2022/09/07 16:53
可能原因
开漏没接上拉(一直低)。
发送起始信号后被中断打断,再回来清掉SI,然后再去等SI,就等不到了。
set_I2CON_STA; /* 执行完此语句 ===》响应别的中断===》中断返回===》此时启动信号已经成功发送出去==>SI=1 */
clr_I2CON_SI;//此时再清除掉的中断标志位是本次的中断标志,而非上一次的中断标志建议将此句放在STA前
while (!SI); /*SI已经被清除掉,无法等到 */
建议在起始信号阶段disable其他中断。