您好!
以下资源的模块12用于 I2C 通信。
http://www.ti.com/lit/zip/ssqc019
我知道在发送地址 SCD 后会轮询。 因为当内部数据计数器(I2CCNT 中的值)计数到0时、SCD 将被置位。
此外、如果 STT 未被置位、则会轮询 ARDY 以指示计数器已减至0。
但是、为什么我们最初无法设置 NACK 位、然后轮询 NACK 位(I2CSTR.1)? 因此、如果它变为0、则表示接收器已发送确认。
根据 I2C 手册:
"当 I2C 模块是发送器时、NACK 适用(主器件或
从器件)。 NACK 指示 I2C 模块是否检测到
中的确认位(ACK)或无确认位(NACK)
接收器。 CPU 可以轮询 NACK 或使用 NACK 中断
请求。"
但 NACK 从未轮询。 是轮询 SCD/ARDY。 为什么会这样呢?
此外、仅当我们轮询 NACK 位时、我们才能实际知道接收器是否已发送确认、然后继续发送下一个数据。 但是、轮询 SCD/ARDY 如何指示接收器是否发送 ACK 以及是否可以发送下一个数据? SCD/ARDY 只能指示 I2CCNT 中设置的字节数是否已传输。 如果没有轮询 NACK、我们如何知道从器件是否已接收到数据?
提前感谢!