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.

[参考译文] TMS320F2808:I2C 代码操作说明

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1036844/tms320f2808-i2c-code-operation-clarification

器件型号:TMS320F2808
主题中讨论的其他器件:C2000WARE

在提供的 F2808 I2C EEPROM 示例中、我对代码时序与实际情况感到困惑、我只是想寻求澄清。

相关代码如下:

//设置要发送的数据
I2caRegs.I2CDXR = msg->MemoryHighAddr;
I2caRegs.I2CDXR = msg->MemoryLowAddr;

对于(i=0;i NumOfBytes;i++)

  I2caRegs.I2CDXR =*(msg->MsgBuffer+I);

/*
*位字段值说明
* 14在调试器断点时 I2C 模块采取的自由1操作
* 13 STT 1起始条件位
* 11 STP 1停止条件位
10 MST 1主控模式位
* 9 TRX 1发送器模式位
* 5 IRS 1 I2C 模块复位位位位位
* 0110 1110 0010 0000
*
//将 START 作为主发送器发送
I2caRegs.I2CMDR.ALL = 0x6E20;

返回 I2C_Success;

根据文档、当数据被写入 I2CDXR 寄存 器时、数据被复制到 I2CXSR 寄存器、然后在 SDA 线上移出位。 但是、在根据" for loop"将所有数据位移出 SDA 线路后、Start、Stop 和 TRX 位会被置位。 在 I2CMDR 寄存器被写入之前、什么机制会停止/延迟位移位?  I2CDXR 有深度吗?

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

    您好 Jeffrey、

    [引用 userid="352848" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1036844/tms320f2808-i2c-code-operation-clarification "] I2CDXR 有深度吗?[/quot]

    是的、当 I2C 在 FIFO 模式下使用时、这实际上是正确的。 在本例中、I2CDXR 实际上充当16字节 FIFO。 因此、在示例中、I2C FIFO 首先通过写入 I2CDXR 来填充数据、然后当执行下一行时、I2C 通信将实际开始(起始条件、从器件地址、数据等)。

    // Send start as master transmitter
    I2caRegs.I2CMDR.all = 0x6E20;

    我可能建议您查看 C2000ware 中较新的 F2806x I2C 示例、因为它们更易于遵循、您可以利用这些功能。 这些器件之间的 I2C 模块几乎相同、只是 FIFO 大小不同。 以下示例的目录位置:

    C:\ti\c2000Ware_3_04_00_00\device_support\f28066\examples\c28\i2c_Lib_EEPROM_Polling

    C:\ti\c2000Ware_3_04_00_00\device_support\f28066\examples\c28\i2c_Lib_EEPROM_INTERRUPT

    最棒的

    Kevin