最近在调试QG8的I2C模块,调试了很久都没成功,程序老是停在等待ACK " while(IICS_RXAK); "的位置,也就是QG8没有收到从端的ACK信号. 手册都看遍了,觉得没有什么错误啊,这里把程序贴出来,大家帮忙看看吧,万分感谢!!!
void main(void) {
//ICGTRM=0X80; SOPT1_COPE = 0; //disable WatchDog /* include your code here */ SCI_INIT(); Port_INIT(); PTAD_PTAD0 = 0; I2c_init(); delay(100); PTAD_PTAD0 = 1; delay(100); EnableInterrupts; /* enable interrupts */
WriteBytesI2C(BH1710_ADDRESS,0) ;
while(1) { }
}
//------------------------------------------------- void WriteBytesI2C(unsigned char slaveAddress,char data) { char Temp; Temp = 0x00; Temp = slaveAddress<<1;
while(IICS_BUSY==1) {;} IICC_MST = 1; IICC_TXAK = 0; IICS_IICIF = 1; IICC_TX = 1; /* Select Transmit Mode 发送,伴随着下面MST从0变1 */
IICD = Temp; /* Send slave device selected address */
while(!IICS_IICIF); IICS_IICIF = 1; while(IICS_RXAK);
IICD = data;
while(!IICS_IICIF); IICS_IICIF = 1; while(IICS_RXAK);
IICC_MST = 0;
}
//-----------------------------------------------------
//------------------------------------- void Port_INIT(void){
//----- Initialized the other pin PTADD_PTADD0 = 1; // set pin as output PTAPE_PTAPE0 = 1; //enable internal pull up PTADS_PTADS0 = 1; // enable how output driver PTAD_PTAD0 = 1; // default value is high
}
//---------------------------- void I2c_init(void) {
/* Configure interfaces. Set our IIC adress. */ IICC_IICEN = 1; /* Enable IIC_module */ IICC_TXAK = 0; IICC_MST = 0; IICA =0x00; /* IIC Address */ IICF = 0x40; /* Set IIC frequency */ I2C_STEP = IIC_READY_STATUS; } //----------------------------- void SCI_INIT(void) {
// SCIBD =4530000/16/scibandrate; //设置波特率 SCIBD = 29; SCIC1=0x00; SCIC2=0x2C;//使能接受中断 }
//---------------------------- void delay(int x){
int i,j; for(i=0;i<x;i++) { for(j=0;j<100;j++) {;} } }
|