ZHCZ040C November 2024 – November 2025 MSPM0G1518 , MSPM0G1519 , MSPM0G3518 , MSPM0G3518-Q1 , MSPM0G3519 , MSPM0G3519-Q1 , MSPM0G3529-Q1
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 周期