处理 msp430fr5969 上的多优先级中断



目前正在处理msp430fr5969.我有多个中断,如SPI,I2C,定时器,要求SPI协议是最高优先级。 但是,根据数据表,I2C(eUSCI_B0(的优先级高于SPI(eUSCI_A1(并且不能改变中断优先级。

链接:http://mikrokontroler.pl/wp-content/uploads/pliki/msp430fr5969.pdf(第21页(。

如何在 I2C 处理时尽快进入 SPI 中断?

我在I2C读取时卡住了,它有一个从另一个MCU发送的数据。 在这种情况下,MCU 会通知超时。它很少,但我想修复它。

注意:使用SPI与另一个MCU通信,以便获得其重要性数据。 使用 I2C 从传感器重新添加信息。

只有在 CPU 能够处理其中一个中断标志之前设置了两个中断标志,并且 CPU 必须决定首先处理哪一个时,中断优先级才有意义。在实践中,这几乎从未发生过。

当中断处理程序执行时,无论优先级如何,所有其他中断都将被阻止(默认情况下清除 GIE(。这意味着,当I²C中断处理程序当前正在执行并且SPI中断发生时,SPI处理程序仅在I²C处理程序完成后才开始执行。

要以高优先级执行 SPI 处理程序,必须确保所有其他中断不会阻塞它,至少不会长时间阻塞它。这通常由这些中断处理程序完成,只需设置一个指示设备需要注意的标志,然后在应用程序的主循环中处理这些条件。

从技术上讲,您可以在其他中断中重新启用 gie 以启用中断嵌套。 这样,您可以通过添加一些逻辑作为中断的前导码来管理中断执行顺序。就我个人而言,我宁愿避免它并将其作为最后的手段。尽量保持其他中断代码简短,管理中断之外的逻辑,如果还不够,请尝试在预期关键中断到来时禁用其他中断(如果可能(。

最新更新