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.

[参考译文] TMS320F280049C:需要 I2C 澄清

Guru**** 2805935 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1108273/tms320f280049c-i2c-clarification-requied

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

尊敬的所有人:

我最近一直在研究 i2c、几乎没有什么疑问、我已经尽力解决了、但我无法解决。 因此、请帮助我:

1)从示例程序表中,我看到在完成所有配置并输入数据后,我们正在调用 START 条件函数,并调用 STOP 条件函数。请按照正确的方式...

I2C_putData (I2CA_BASE、1);

//将 START 作为主发送器发送
I2C_setConfig (I2CA_BASE、I2C_MASTER_SEND_MODE);
I2C_sendStartCondition (I2CA_BASE);
I2C_sendStopCondition (I2CA_BASE);

2) 2)请从 C 语言的 ti 示例中读取以下代码片段:\ti\c2000Ware_3_04_00_00\driverlib\f28004x\examples\i2c\i2c_ex2_EEPROM.c

空 initI2C()

//
//必须在配置 I2C 之前将其复位
//
I2C_DisableModule (I2CA_BASE);

//
// I2C 配置。 使用占空比为33%的400kHz I2CCLK。
//
I2C_initMaster (I2CA_BASE、DEVICE_SYSCLK_FREQ、400000、I2C_DUTYCYCLE _33);
I2C_setBitCount (I2CA_BASE、I2C_BITCOUNT_8);
I2C_setSlaveAddress (I2CA_BASE、SLAVE_ADDRESS);
I2C_setEmulationMode (I2CA_BASE、I2C_emulation_free_run);

//
//启用停止条件和寄存器访问就绪中断
//
I2C_enableInterrupt (I2CA_BASE、I2C_INT_STOP_Condition |  
I2C_INT_REG_ACCESS_RDY);

//
// FIFO 配置

I2C_enableFIFO (I2CA_BASE);
 I2C_clearInterruptStatus (I2CA_BASE、I2C_INT_RXFF | I2C_INT_TXFF);

//
//配置完成。 启用模块。
//
I2C_enableModule (I2CA_BASE);

这里我们不是设置 FIFO 中断级别,也不是在主代码中设置 FIFO ISR。我们现在只启用 FIFO。它的工作原理是什么? 请说明。另请尝试提供程序流。  

当我尝试注释出 FIFO 使能功能时,数据没有发送。我启用了 TX 就绪中断,在不使用 FIFO 的情况下处理整个问题。 但我看到的只是忙位始终设置为1。 如何在没有 FIFO 的情况下使用 i2c?

当我使用 i2c 的配置时,所有东西都能正常工作,但我只想知道发生了什么...

谢谢、此致、

Stevin Martin

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

    您好!

    1) 1)在非重复模式下、您可以  背对背执行 I2C_sendStartCondition 和 I2C_sendStopCondition、因为在此模式下、I2C 状态机在发送/接收 I2CCNT 寄存器中的字节数之前不会生成停止条件。

    2) 2)这里有几件事。 如果您使用 I2C 连接 EEPROM、我建议您改用以下示例。

    I2C_ex4_EEPROM_POLLING  :在不使用 I2C 中断的情况下执行不同的 EEPROM 读取/写入操作

    I2C_ex6_EEPROM_INTERRUPT :使用 I2C 中断执行不同的 EEPROM 读取/写入操作

    此外、您不想使用 FIFO 的原因。  

    此致、

    曼诺伊

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

    您好、Manoj、

    我不想使用 FIFO。 这里正在尝试了解一切是如何工作的。 我对使用 FIFO 的理解是启用 FIFO、设置缓冲区级别、设置中断 ISR。但是在这里、您可以看到我们没有执行任何此操作、我们只是启用 FIFO。我希望首先清除这一特定的疑问。

    谢谢、此致、

    Stevin Martin

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

    您好、先生、  

    当触发级别设置为 I2C_FIFO_TXEMPTY 时、i2c ISR 中的 TX FIFO 中断何时被触发。是否在缓冲区中发生数据更改?

    谢谢、此致、

    Stevin Martin

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

    Steve、

    当 TX FIFO 中的内容(TXFFST)小于(或)等于触发电平(TXFFIL)时、会触发 TX FIFO 中断。

    此致、

    曼诺伊