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