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条回答
zhaojun_xf
1楼-- · 2019-03-26 02:25
 精彩回答 2  元偷偷看……
osoon2008
2楼-- · 2019-03-26 03:04
i2c速率设定在100k, ===10k
arm新手
3楼-- · 2019-03-26 07:41
对着周立功翻译的手册i2c这章看了好多遍了,还是没找到是哪里的问题,发送完起始位i2cstat为0x08状态,把从地址+w为写到i2cdat后i2cstat还是为0x08状态,问题就出在清零sta位和si位后,i2cstat就跳到0xf8这个无有用信息的状态了,难道有个发送的操作?,手册上没提啊。
arm新手
4楼-- · 2019-03-26 08:06
速率跳到10k,1k都试了,还是一样。
arm新手
5楼-- · 2019-03-26 11:01
找到问题了,把对CONSET和CONCLR的操作指令从 LPC_I2C0->I2CONSET|=0x60;形式改成LPC_I2C0->I2CONSET=0x60;就行了。
新问题是读出来的数据总是存储单元的地址,比如读0x03单元的数据,结果读出的数据是0x03,立即地址读出的数据也是当前地址,读一次就加1,不知问题在哪啊,求指点。
osoon2008
6楼-- · 2019-03-26 13:21
你这么调真的太麻烦了,给你一个最终的方法,买个便宜点的逻辑分析仪。

一周热门 更多>