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 11:01
找到问题了,把对CONSET和CONCLR的操作指令从 LPC_I2C0->I2CONSET|=0x60;形式改成LPC_I2C0->I2CONSET=0x60;就行了。
新问题是读出来的数据总是存储单元的地址,比如读0x03单元的数据,结果读出的数据是0x03,立即地址读出的数据也是当前地址,读一次就加1,不知问题在哪啊,求指点。

一周热门 更多>