尊敬的 Sirs:
在从外部 ADC 读取数据时、I2C 的实现存在问题。
顺序为:
1) 1)设置 I2C 从机地址
2) 2)将 Mode 设置为 I2C 主机
3) 3)将方向设置为 I2C 发送器
4) 4)设置开始
5) 5)发送地址
6)在 i2cREG1->STR 中检查 I2C_TX_INT
7) 7)读取 i2cREG1->DRR 以清除标记
8) 8)设置"开始"
9) 9)将方向设置为 I2C 接收器
10) 10)从 ADC 接收2个字节
11) 11)设置停止
12)接收最后一个字节(第3个)
13) 13)清除 SCD
该算法在许多小时内工作正常、但有时在步骤10中、在实际字节到达 I2C 模块之前设置 Rx 标志(在步骤7中清除)、从而导致读取0x00。
结果是、我们读取0x00-byte1-byte2、而不是字节1-byte2、从而导致 ADC 读数错误。
我尝试更改序列7-9、以便在输入10之前重置标志)、结果相同。
因此、I2C 模块似乎是错误地设置 Rx 标志。
是否有任何线索知道为什么会发生这种情况以及如何解决这种情况?
谢谢你