这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 企业专区» Cypress» PSoc4与PCF8563测试IIC通信

共8条 1/1 1 跳转至

PSoc4与PCF8563测试IIC通信

高工
2014-02-24 14:44:56 打赏

这两天要测试一块液晶,但液晶的程序也不知道是对的还是错的,所以就想用PSoc来测,根据前面的测试PSoc4自带的IIC模块来写驱动的话,事半功倍的!由于PCF8563的程序相对简单一点,所以就用这个来测试了。话不多说,先上程序:


/* ======================================== * * Copyright YOUR COMPANY, THE YEAR * All Rights Reserved * UNPUBLISHED, LICENSED SOFTWARE. * * CONFIDENTIAL AND PROPRIETARY INFORMATION * WHICH IS THE PROPERTY OF your company. * * 说明:该程序用于测试PSoc4的IIC模块工作情况 * 使用一块PCF8563实时时钟模块与PSoc4的IIC接 * 口相连进行IIC通信(未使用PCF8563中断功能), * 具体引脚定义如下(可以在PSoc4_UART.cydwr文 * 件中查看),在测试时使用评估板自带的USB-RS2 * 32模块与电脑连接: * P12.6 ---- P4.1 (UART) * P12.7 ---- P4.0 (UART) * P0.4 ---- SCL(PCF8563) * P0.5 ---- SDA(PCF8563) * 2014-02-24 下午14:30 * Veiko * ======================================== */ #include /* PCB8563定义 */ #define Spcf8563 0x51 /* PCF8563从机地址,应用于PSoc4时要右移一位除去读写识别位 */ #define ContReg 0x00 //控制-状态寄存器1 #define SecdReg 0x02 //秒寄存器 #define MinuReg 0x03 //分钟寄存器 #define HourReg 0x04 //小时寄存器 #define YedaReg 0x05 //日寄存器 #define WemoReg 0x06 //星期寄存器 #define MoCeReg 0x07 //月-世纪寄存器 #define YearReg 0x08 //年寄存器 #define MiAlReg 0x09 //分钟报警寄存器 #define BehoReg 0x0c //星期报警寄存器 #define BemiReg 0x0b //日报警寄存器 /* 变量定义 */ unsigned char Sec = 0; /* 用于存储秒数据 */ unsigned char Sec_Tmp = 0; /* 用于对比秒数据是否发生改变 */ unsigned char UARTSendChar = 0; /* 用于串口发送秒数据 */ /* 函数声明 */ void PCF8563_WriteReg(unsigned char SubAddr,unsigned char Data); void PCF8563_Init(void); unsigned char PCF8563Read(unsigned char SubAddr); int main() { /* Place your initialization/startup code here (e.g. MyInst_Start()) */ UART_Start(); /* 串口初始化 */ IIC_M_Start(); /* IIC初始化 */ CyGlobalIntEnable; /* 使能全局中断 */ //UART_SCB_IRQ_Start(); /* 打开串口中断 */ PCF8563_Init(); //-----初始化PCF8563芯片 /* CyGlobalIntEnable; */ /* Uncomment this line to enable global interrupts. */ for(;;) { Sec = PCF8563Read(SecdReg); if(Sec_Tmp != Sec) { UARTSendChar = ((Sec>>4)&0x0f)+0x30; UART_UartPutChar(UARTSendChar); UARTSendChar = (Sec&0x0f)+0x30; UART_UartPutChar(UARTSendChar); UART_UartPutChar('\r'); UART_UartPutChar('\n'); Sec_Tmp = Sec; } } } void PCF8563_WriteReg(unsigned char SubAddr,unsigned char Data) { IIC_M_I2CMasterSendStart(0x51,0); //-- 发送起始信号,从机地址写信号 IIC_M_I2CMasterWriteByte(SubAddr); //-- 发送寄存器地址(子地址) IIC_M_I2CMasterWriteByte(Data); //-- 发送数据 IIC_M_I2CMasterSendStop(); //-- 发送停止信号 } void PCF8563_Init(void) { PCF8563_WriteReg(SecdReg,0x00); PCF8563_WriteReg(HourReg,0x00); PCF8563_WriteReg(MinuReg,0x00); PCF8563_WriteReg(YedaReg,0x01); PCF8563_WriteReg(MoCeReg,0x01); PCF8563_WriteReg(YearReg,0x09); } unsigned char PCF8563Read(unsigned char SubAddr) { unsigned char DataRec = 0; IIC_M_I2CMasterSendStart(0x51,0); //-- 发送起始信号,从机地址写信号 IIC_M_I2CMasterWriteByte(SubAddr); //-- 发送寄存器地址(子地址) IIC_M_I2CMasterSendRestart(0x51,1); //-- 发送起始信号,从机地址读信号 DataRec = IIC_M_I2CMasterReadByte(1); //-- 读取一个字节并在结束通信前发送NACK应答位 IIC_M_I2CMasterSendStop(); //-- 发送停止信号 return DataRec; } /* [] END OF FILE */



前面几个笔记说过的东西,这里就不再说了,顺便把工程上传一个,希望对你有帮助:


——回复可见内容——

电脑回显效果:





关键词: PSoc4 PCF8563 通信 IIC通信

高工
2014-02-24 14:51:04 打赏
2楼
不错,顶起。

助工
2014-02-25 08:24:03 打赏
3楼
看了看,楼主的代码风格和注解做得相当好,在 嵌入式开发 工程师里头算是典范!向你学习!!!

专家
2014-02-25 08:54:22 打赏
4楼
学习了!

高工
2014-02-25 09:15:06 打赏
5楼
额,只是为了以后能看懂,谢谢

专家
2014-03-10 18:22:05 打赏
6楼
学习了! 学习了! 学习了!

菜鸟
2016-06-21 20:22:29 打赏
7楼

菜鸟
2019-10-15 17:32:55 打赏
8楼

我现在I2CMasterWriteByte这个函数一直返回的I2C_MSTR_NOT_READY,请问楼主有遇到过吗?


共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]