1、以下这两行程序的动作是怎样动作的?
while ((I2C0->CON & I2C_SI) != I2C_SI);
I2C0->CON &= ((~I2C_STA)&(~I2C_SI));
2、程序在下面这个判断式之后停止,control fail是指哪一部份有问题?该怎么解决?
if (I2STATUS != 0x18)
{
DEBUGMSG("I2C write control fail\r\n");
return FALSE;
}
2022/09/06 17:21
1)
while ((I2C0->CON & I2C_SI) != I2C_SI);//表示主机发送Start信号,等待发送完成
I2C0->CON &= ((~I2C_STA)&(~I2C_SI));//清除发送start信号完成的flag
2)每个状态都对应一个状态值,当I2STATUS 为 0x18时表示,主机传输地址从机有ACK,fail表示I2STATUS 不为0x18即表示主机传输地址后从机没有ACK。具体通信处于什么状态可以到I2C章节找对应模式的流程图,比如下图为master 发送的图: