lpc1768的i2c控制器写24c02失败,各位高手帮忙看看。

2019-03-25 20:28发布

void i2c0_wr_byte(uint8_t da,uint8_t add)
{  LPC_I2C0->I2CONCLR=0x2c; 
 LPC_I2C0->I2CONSET|=0x60;     //使能i2c控制器并发送起始位
 while(!(LPC_I2C0->I2STAT==0x08));  //等待发送完起始位
 LPC_I2C0->I2DAT=0xa0;     //写入24c02从机地址+w位
 LPC_I2C0->I2CONCLR|=0x28;    //清零起始位和中断标志位  
 while(!(LPC_I2C0->I2STAT==0x18));   //等待发送完从机地址+w位和接收ack位
 LPC_I2C0->I2DAT=add;    //写入数据地址到I2DAT
 LPC_I2C0->I2CONCLR|=0x08;   //清零中断标志位
 while(!(LPC_I2C0->I2STAT==0x28)); //等待发送完数据地址和接收ack位
 LPC_I2C0->I2DAT=da;      //写入数据到I2DAT
 LPC_I2C0->I2CONCLR|=0x08;    //清零标志位
 while(!(LPC_I2C0->I2STAT==0x28)); //等待发送完数据和接收ack位
 LPC_I2C0->I2CONSET|=0x10;   //发送sto位
}   写一个数据到24c02的函数,i2c速率设定在100k,调试发现程序停在 (while(!(LPC_I2C0->I2STAT==0x18));   //等待发送完从机地址+w位和接收ack位)这里,状态寄存器i2cstat为0xf8,请高手帮忙看看,本人新手,请勿见笑。 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
arm新手
2019-03-26 07:41
对着周立功翻译的手册i2c这章看了好多遍了,还是没找到是哪里的问题,发送完起始位i2cstat为0x08状态,把从地址+w为写到i2cdat后i2cstat还是为0x08状态,问题就出在清零sta位和si位后,i2cstat就跳到0xf8这个无有用信息的状态了,难道有个发送的操作?,手册上没提啊。

一周热门 更多>