工具/软件: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