这两天要测试一块液晶,但液晶的程序也不知道是对的还是错的,所以就想用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 */
前面几个笔记说过的东西,这里就不再说了,顺便把工程上传一个,希望对你有帮助:
——回复可见内容——
电脑回显效果:
我要赚赏金
