当前正在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从传感器读取信息。
答案 0 :(得分:2)
只有在CPU能够处理其中一个中断标志之前,两个中断标志被置位,并且CPU必须决定先处理哪个中断标志,中断优先级才有意义。实际上,这几乎永远不会发生。
执行中断处理程序时,所有其他中断均被阻止(默认情况下,GIE被清除),而不考虑优先级。这意味着当当前正在执行I²C中断处理程序并且发生SPI中断时,只有在I²C处理程序完成后,SPI处理程序才开始执行。
要以高优先级执行SPI处理程序,必须确保所有其他中断都不会阻塞它,至少不会长时间。通常,这些中断处理程序只需设置一个指示设备需要注意的标志,然后在应用程序的主循环中处理这些条件即可。
答案 1 :(得分:0)
您可以在技术上与其他中断一起重新启用gie,以启用中断嵌套。 这样,您可以通过向中断添加一些逻辑作为前言来管理中断的执行顺序。就个人而言,我宁愿避免使用它,也要保留它作为最后的选择。尝试使其他中断的代码简短,管理中断之外的逻辑,如果还不够,请在希望出现严重中断时尝试禁用其他中断(如果可能)。