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.

[参考译文] TM4C1237D5PM:Tiva 函数的时序和操作的处理时间

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/673157/tm4c1237d5pm-timing-of-tiva-functions-and-processing-time-for-operations

器件型号:TM4C1237D5PM

我在 TM4C1237D5PM 部件中的 I2C 模块有问题。  我的通信工作正常、但间歇性地在总线上出现错误(I2C_MASTER_ERR_ARB_Lost)。  代码检测到错误并执行外设复位。  这充其量是间歇性的、即使在发生错误且外设已复位后、我们仍然会看到此错误。 在某个时候、处理器会卡在 while 循环中、等待主设备说它不再忙碌。  这导致需要进行循环通电。  重启电源后、我们会在一段时间内恢复正常运行、但最终会再次出现此错误。  我找到的修复方法是在特定点将等待循环插入代码中、以留出足够的时间使所有内容正常工作。   

生成部分代码时出错: 

I2CMasterSlaveAddrSet (I2C0_BASE、地址、false); I2CMasterDataPut (I2C0_BASE、cmdRegister); I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_SINGLE_SEND); while (I2CMasterBusy (I2C0_BASE)) osThreadYield ();

无错误代码:

I2CMasterSlaveAddrSet (I2C0_BASE、地址、false);
I2CMasterDataPut (I2C0_BASE、cmdRegister);
I2CMasterControl (I2C0_BASE、I2C_MASTER_CMD_SINGLE_SEND);
I2CBusFreeDelay();
while (I2CMasterBusy (I2C0_BASE) osThreadYield ();
I2CBusFreeDelay();

I2CBusFreeDelay() ;=循环500个周期。

当一个外设被访问并被要求执行某些操作时、时间和时钟周期将会过去、但是我找不到任何有关该时间长度的细节(用于声明和执行命令的时钟周期)。  是否有任何信息可以告诉我这些函数在完全置位之前需要多长时间?  我的当前应用程序不是时序关键型应用程序、低速正常、但将来可能不是。  I2C 是我唯一注意到的地方、但我需要知道是否有任何其他领域处于可接受的时序边缘。  如果存在此信息、则最好具有所有 Tiva 函数。

提前感谢您的任何帮助。

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

    您好、Trent、

    这适用于定制电路板吗? 如果是、电路板上是否有其他主器件? 您的上拉电阻器的值是多少? 您能否共享 I2C 引脚的配置代码? I2C 连接是否涉及任何电缆?

    通常、我看到 I2C_MASTER_ERR_ARB_Lost 是由于一些硬件问题(通常较小)引起的、因此这些问题也是如此。

    关于 while 环路被卡住并强制执行下电上电、以下是您需要考虑的解决方案(请注意、只需阅读 Brandon 和 Amit 之间的前几篇文章): https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/t/444151