收发程序基本就是SDK提供的例程,问题是:一旦有I2C从机的发送,中断就一直处于不断响应的状态。怀疑有中断标志没有被清除,但是从手册上看I2C_Last_Event_Get()已经可以清除任何中断事件。我在void I2C_IRQ_HANDLER(void)中加入GPIO_Pins_Set()和GPIO_Pins_Reset(),得到波形如下,
从时间上看,设备地址和寄存器地址的接收都还还好,应该从I2C从机发送数据开始有未屏蔽并且未处理的中断。
I2C的从机功能是没有问题,但是这样占用mcu导致其它实时任务很难正常处理。有没有办法处理这种中断情况,例如清除所以中断。另外,在 default: I2C_ON(I2C_DEV);处设置断点,得到未处理的last_event值为0.
|
|