Muss ich den ausstehenden Status eines Interrupts in der Interrupt-Service-Routine einer ARM Cortex-M0-MCU löschen?
Konnte dazu keine Informationen im Web finden.
Nein, Sie müssen den ausstehenden Status im NVIC nicht löschen, das geschieht automatisch, wenn der Interrupt bedient wird (siehe Joseph Yiu, The Definitive Guide to ARM Cortex-M3 and Cortex-M4 Processors, 3rd Edition, page 247) .
Möglicherweise müssen Sie jedoch die Bedingung löschen, die den Interrupt auf dem bestimmten Peripheriegerät verursacht hat.
IN PIO muss man nur den PIO_ISR-Status innerhalb der Interrupt-Prozedur lesen. Im anderen Fall macht es den Interrut direkt nach dem Interrupt-Exit anhängig. Ich bin mir derzeit nicht sicher, aber ich denke, der Atmel ASF-Handler macht es automatisch, aber wenn man in die niedrigere Ebene geht, darf man nicht vergessen, es selbst zu machen.
Danke ABC für den Hinweis. Ich habe Wochen gebraucht, um das herauszufinden, da der ASF-Handler dies NICHT automatisch macht. Da ich nur einen Pin für den Interrupt aktiv habe, muss ich dieses Register für die Pin-Lokalisierung nicht lesen. Wenn ich jetzt immer dieses Register auslese, funktioniert alles einwandfrei.
Hinweis: Im Datenblatt der PIO-Benutzeroberfläche des SAM E70 (mein Prozessor) unter der PIO_ISR-Registerbeschreibung steht folgender Satz: „1: Mindestens eine Eingangsänderung wurde auf der I/O-Leitung erkannt, seit PIO_ISR zuletzt gelesen wurde oder seit Reset.“ Ich denke, das ist wirklich schwer zu finden.
DoxyLover