This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TMS320F28069:具有 FIFO 的 I2C

Guru**** 2195940 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/753150/ccs-tms320f28069-i2c-with-fifo

器件型号:TMS320F28069

工具/软件:Code Composer Studio

您好!

我正在尝试使用 EEPROM (M24LR16E-R)实现 i2c 主器件操作。 由于我没有找到任何具有 i2c FIFO 中断的示例代码、因此我使用参考手册对其进行编码。

但是、现在我在向 EEPROM 写入数据时遇到了问题。 我可以通过示波器看到、EEPROM 的读取工作正常。

使用该 EEPROM 、我每5ms 只能向 其写入4个字节的数据。 因此、非常简单、当向 EEPROM 写入4个字节时、我将 I2CCNT 设置为6 (2个地址字节+ 4个数据字节)、并将 FIFO 电平设置为0并启动 i2c 作为发送器。 那么、我可以预期、FIFO 中断在写入4个字节(2个地址字节、2个数据字节)后发生。 在 FIFO 中断中、我将最后2个字节复制到 I2CDXR 寄存器。 写入最后2个字节后、我应该获得检测到的停止条件中断、因为6个字节被写入(I2CCNT 被设定为6)。

使用示波器观察信号会给我带来另一种行为。 以下是示波器的屏幕截图:

黄色信号是 i2c_int1a 中断发生、红色信号是 i2c_int2a 中断(FIFO)、蓝色信号是 SCL、绿色信号是 SDA。 黄色和红色信号只是中断入口的 GPIO 切换。

如您所见、写入3个字节(没有 EEPROM 的 I2C 从地址)后会发生 FIFO 中断(i2c_int2a)。 正如我说过的、在 FIFO 中断中、我只向 I2CDXR 寄存器写入2个新的字节、但是在 FIFO 中断后、写入3个字节、那么停止条件检测中断发生(黄色)。 因此、正确的4个字节(包含0、1、2、3)被写入 EEPROM 的正确地址(0)、但 FIFO 中断的行为不符合我的预期。

我的问题是、i2c 从地址是否计数到 FIFO 必须写入的字节数? 对于 I2CCNT 寄存器、从地址不会计数、我将其设置为6字节、并写入6字节(不含 i2c 从地址)。 但我想、FIFO 中断将在4个字节之后发生、而不是在3个字节之后发生。

当我在 FIFO 中断中设置断点时、在向 I2CDXR 寄存器写入新数据之前、会写入正确的字节数、如您所见:

但在发送最后一个字节之前会发生中断。 这是正常的过孔吗?

感谢你的任何帮助。

此致、

Dani

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Dani:

    当 TXFFST4-0寄存器位的值等于或小于 TXFFIL4-0寄存器位时、FIFO 中断将触发。 您可能将此设置为零、因此当 TX FIFO 缓冲区(I2CDXR 用作 TX FIFO 缓冲区)为空时、中断会触发。 这些值从 I2CDXR 移位到 I2CXSR、然后在 SDA 上传输字节、请参阅下图:

    我认为 FIFO 缓冲区变空、在字节通过总线传输之前触发中断。 您可以通过查看触发中断时的寄存器值来检查此情况(TXFFST4-0应为零、或等于 TXFFIL4-0设置为的任何值)。 这不会对您的应用产生负面影响、因为您可能希望尽可能填满 TX FIFO 缓冲区。

    希望这对您有所帮助、

    Kevin