Ich verwende 2 Interrupts auf LPC1778. Eine für CAN und eine für Timer. Der CAN unterbricht immer dann, wenn eine neue Nachricht empfangen wird. Der Timer unterbricht alle 200uS. Die Priorität für Timer-Interrupts ist die höchste (dh NVIC-Priorität = 0). Mein Zweifel ist, wenn eine CAN-Nachricht ankommt und ich in der ISR bin, angenommen, dass ein Timer-Interrupt auftritt, während ich in CAN ISR bin, wird die Timer-Interrupt-ISR ausgeführt und kehrt dann zu CAN ISR zurück? Oder wird der CAN-Interrupt abgeschlossen, bevor der Timer-Interrupt ausgeführt wird. Gilt die Priorität nur, wenn beide Interrupts gleichzeitig auftreten, oder gilt die Priorität für die Einstellung, welche Interrupts unter keinen Umständen maskiert werden können? Denn es ist sehr wichtig, dass der Timer-Interrupt unter allen Umständen alle 200 uS ausgeführt werden muss.
Siehe feines Benutzerhandbuch . Der Mikrocontroller LPC1778 enthält einen ARM Cortex-M3-Kern, der das Peripheriegerät Nested Vectored Interrupt Controller (NVIC) enthält . Das Schlüsselwort hier ist " verschachtelt ", was bedeutet, dass der Interrupt-Controller verschachtelte Ausnahmen und Interrupts unterstützt, was bedeutet, dass ein aktiver Interrupt durch einen Interrupt mit höherer Priorität vorbelegt werden kann. Suchen Sie im Benutzerhandbuch nach den Begriffen „nest“ und „preempt“, um mehr zu erfahren.
Sie müssen den Interrupt-Controller konfigurieren und die Interrupts entsprechend priorisieren, damit Preemption auftritt. Vielleicht entscheiden Sie sich dafür, die SysTick-Ausnahme für Ihren Timer zu verwenden, damit er eine höhere Priorität als der CAN-Interrupt hat. Oder wenn Sie einen Interrupt auch für den Timer verwenden, müssen Sie die Gruppenpriorität (siehe Abschnitt 39.3.3.6) der Interrupts konfigurieren, um sicherzustellen, dass die Timer-ISR der CAN-ISR Vorrang einräumen kann.
schwach
AlphaGoku
schwach
AlphaGoku