您好!
我目前正在实施一个小型 I2C 从设备、该设备将向实施主设备并与从设备通信的学生演示 I2C 通信(在回送模式下、但我目前已使用外部上拉电阻器对其进行设置以进行调试)。 为此、我希望实现在错误检测/传播方面表现得尽可能好、即、只要主器件的行为不符合预期、我就想 NACK。 我的从器件实现了一个典型的基于寄存器的器件、即主器件需要通过 I2C 来寻址从器件、然后写入一个寄存器地址、然后它最终可以读取或写入从器件的寄存器。
它基本上可以工作、但我希望返回的 nack 比我目前要多。 但是、在某些情况下、我的从代码会停止主代码而不是 NACKing、并使其中止事务、这是我不理解的。 例如、当我在 I2C_SLAVE_INT_DATA 中断中提供 I2C_SLAVE_ACT_TREQ 时、我希望 NACK 该请求而不是返回数据(我认为 NACK 有效)。 为此,我尝试执行 I2CSlaveACKValueSet (...,0)而不是 I2CSlaveDataPut ()。 但是、当我这么做时、事务(如逻辑分析仪所示)在主器件发送寻址字节和从器件发送 ACK 后变为保持状态-请记住、尽管我尝试 NACK。 我假设失速是由从器件的时钟拉伸引起的、但我不确定。 我想知道我是否可以使用 TM4C1294NCPDT 从器件进行任何尝试。 基本上,我想知道在哪个调用 I2CSLaveACKValueSet()的 instants 会产生影响,因为 MCU 数据表和 TivaWare 文档都没有接近这一数量的细节。