主题中讨论的其他器件:C2000WARE
我对在 C2000微控制器上使用 I2C 模块的正确方法有点困惑。 我必须使用非常简单的 I2C 从设备。 为了与它通信、我需要发送一个单字节命令并接收一个单字节响应。 我已经为320f2839d 准备了 TRM (修订版 I)、在我看来、此交易应该包含两个阶段:
1) 1)主机传输模式、在该模式下我发送命令
2) 2)主机接收模式、在此模式下、我接收到响应
根据 TRM 的理解、我需要在这两个级之间将 MDR.TRX 位从1切换到0。 是这样吗?
在我看来、将 MDR.TRX 从1切换到0意味着重新配置 I2C 模块。 因此、我需要 通过清除 MDR.IRS 来重置模块。 因为 TRM 状态:
配置或重新配置 I2C 模块时、IRS 必须为0。
(TRM 第20.5部分)。 是这样吗? 将 IRS 从1切换到0时是否会生成停止条件? 还是控制器继续控制总线? SCL 线会发生什么情况?
无论如何、当在 TRX 从1切换为0后将 IRS 从0切换为1时、模块将释放 I2C 总线

正如我所理解的、释放总线意味着任何其他主器件都可以捕获它、因此我需要在尝试从器件获取响应之前检查总线是否空闲。 但是、在 BB 位有效之前、我应该在离开复位状态后等待一段时间:
BB 位将会
当 I2C 外设处于复位状态(IRS = 0)时、保持在已清除状态(BB = 0)。 I2C 外设
复位后(IRS 设为1)、BB 位在启动或之前不会正确反映 I2C 总线状态
检测到 STOP 条件。
在使用 I2C 启动首次数据传输之前、请执行以下步骤:
1.通过将 IRS 位设置为1来使 I2C 外设退出复位后、等待一个大于总周期的时间
应用程序中最长数据传输所需的时间....
因此、从从器件读取一个字节响应的整个过程对我来说非常奇怪。
我错过或误解了什么?
我已经检查了 C2000ware 中的样片、但发现这些样片太复杂、不适合我的用途。 它们都使用 FIFO、中断和状态机-在我的例子中、这是一种过度设计。
看起来、example_2837xDI2C_EEPROM.c (来自 device_support\f2837xd\examples\cpu1\i2c_EEPROM\cpu01)是最简单的示例、但我也对此有一些疑问。 例如、我看到 MDR 寄存器有几处更改。 每次更改都会设置 IRS 位。 为什么? 我没有找到清除代码的位置。
此致、
Alex