I2C控制信号问题

I2C
KenKo |浏览2550次
收藏|2015/02/05 14:09

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 发送的图:

 

 


 

 

jamesliu

其他回答(0)
0人关注该问题
+1
 加载中...