[技术问答] I2C控制訊號

[复制链接]
247|2
手机看帖
扫描二维码
随时随地手机跟帖
stormwind123|  楼主 | 2022-5-10 09:30 | 显示全部楼层 |阅读模式
最近在使用I2C的功能
想請問以下這兩行程式的動作是怎樣動作的?例如訊號準位變換或用途之類...
while ((I2C0->CON & I2C_SI) != I2C_SI);
I2C0->CON &= ((~I2C_STA)&(~I2C_SI));

另外,程式在下面這個判斷式之後停止,control fail是指哪一部份有問題?該怎麼解決?
我用示波器看,好像是ACK的準位沒有pull low,表示受控端(slave)沒有接收到寫入的訊息嗎?
    if (I2STATUS != 0x18)
    {
            DEBUGMSG("I2C write control fail\r\n");
            return FALSE;
    }

使用特权

评论回复
probedog| | 2022-5-10 09:32 | 显示全部楼层
while ((I2C0->CON & I2C_SI) != I2C_SI);//表示主机发送Start信号,等待发送完成

I2C0->CON &= ((~I2C_STA)&(~I2C_SI));//清除发送start信号完成的flag

使用特权

评论回复
classroom| | 2022-5-10 09:33 | 显示全部楼层
每个状态都对应一个状态值,当I2STATUS 为 0x18时表示,主机传输地址从机有ACK,fail表示I2STATUS 不为0x18即表示主机传输地址后从机没有ACK

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则