在0x70084(TRA,BUSY,MSL,TXE,BTF)的case中执行发送restart的操作,退出ISR后,一方面I2C硬件开始在I2C总线上发出这个Start信号,注意这个过程相对于MCU运行速度来说,要持续一段时间。另一方面,在这段时间内,STM32一直在运行着,以上5个flag一直被置位着,所以退出ISR后,又进去,又退出,又进去,你这里进去了14次多余的0x70084。
直到Restart信号出现在I2C总线上了,h/w将TXE,BTF,TRA清零,同时置位SB,于是此时在进入中断,就走到0x30001的case了。
|