ZHCZ057A December 2024 – November 2025 MSPM0L1116 , MSPM0L1117
UNICOMMI2CC 模块
功能
轮询 I2C BUSY 位可能无法保证控制器传输完成
在设置 BUSRTRUN/FRAME_START 位来启动 I2C 控制器传输后,大约需要 2 个 I2C 功能时钟周期才能将 BUSY 状态置为有效。如果在设置 BUSRTRUN/FRAME_START 后立即轮询 BUSY 位以等待传输完成,可能会在 BUSY 状态尚未置位时就完成状态检查。在 CLKDIV 值较高(导致 I2C 功能时钟较慢)或编译器优化级别较高的情况下,更有可能发生该问题。
在轮询 BUSY 状态之前添加软件延迟。软件延迟 = 3 x I2C 功能时钟 = 3 x clock_divider x(CPU_CLK/所选时钟源频率),例如 clock_divider 为 8、时钟源为 4MHz (MFCLK)、CPU_CLK 为 32MHz:软件延迟 = 3 x 8 x (32 MHz / 4 MHz) = 192 个 CPU 周期