您好、我们有一个定制电路板在 I2C 通信期间挂起、这似乎是随机发生的、在这种情况下 SCL 和 SDA 都无限期地保持高电平、并且 I2CMCS 寄存器显示 I2C_MC_BUS 和 I2C_MC_BUSBSY 都设置为1。
我们认为这可能是硬件问题、该硬件问题目前正在调查中、但是、最好也在软件中进行重置以解决该问题。
我已经尝试 调用 SysCtlPeripheralDisable (),然后调用 SysCtlDelay (2000),再调用 SysCtlPeripheralEnable ()并重新初始化 I2C 通道,但没有修复它。
我还尝试了以下方法:
// Disable the I2C module MAP_I2CMasterDisable(I2C9_BASE); // Clear any pending interrupts MAP_I2CMasterIntClear(I2C9_BASE); // Re-enable the I2C module MAP_I2CMasterEnable(I2C9_BASE)
这也没有解决这个问题。
不过、我们发现通过调用 SysCtlReset ()执行 Tiva 软件复位确实会导致该通道上的 I2C 通信再次开始。
是否可以执行 SysCtlReset ()()正在执行的操作,但只能执行特定的 I2C 通道?
