我在 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 函数。
提前感谢您的任何帮助。