Xmega Tutorial – external Interrupt

Auf den folgenden Seiten findet Ihr ein kleines Xmega Tutorial – external Interrupt zu den Microcontrollern der Familie AVR Xmega in der Programmiersprache “C”. Bei den Xmega Controllern hat sich auch am Interruptsystem so einiges geändert. Das System ist im Vergleich zu den Atmegas viel komplexer geworden und bietet nun viel mehr Möglichkeiten um auf spezielle Ereignisse (Events) zu reagieren. Weiterhin kann man in diesem System jeder Interruptquelle einen von 3 Interruptleveln zuordnen um somit die Ereignisse untereinander zu priorisieren.

Bei den Xmega Controllern hat sich auch am external Interruptsystem so einiges geändert. Das System ist im Vergleich zu den Atmegas viel komplexer geworden und bietet nun viel mehr Möglichkeiten um auf spezielle Ereignisse (Events) zu reagieren. Weiterhin kann man in diesem System jeder Interruptquelle einen von 3 Interruptleveln zuordnen um somit die Ereignisse untereinander zu priorisieren. Speziell bedeutet es, dass man zwischen den Prioritäten High, Medium oder Low wählen kann. Dadurch erreicht man, dass die Interrupts in einer bestimmten Reihenfolge abgearbeitet werden.

Interrupts sind grundsätzlich Reaktionen des Controllers, mit welchen er auf festgelegte interne oder externe Ereignisse reagiert und dadurch den eigentlichen Programmfluss unterbricht. Jeder PORT des ATxmega besitzt zwei unabhängige Interruptvektoren (INT0 und INT1). Diese werden beim Auslösen eines I/O-Interrupts angesprochen.

Die I/Os, bzw. die Pins der Xmega Controller können als I/O-Port-Interrupts verwendet werden, um einen Interrupt bei Änderung eines einzelnen Pin oder einer Pin-Gruppe zu erzeugen. An dieses Ereignis kann eine Interrupt Serviceroutine und oder über das interne event System eine andere Aktion ausgeführt werden. Zum Beispiel kann man den Controller über einen externen Pin Interrupt aus dem Schlaf-Modus aufwecken. Der folgende Abschnitt gibt einen Überblick über die Verwendung der I/O-Interrupts der Xmega Controller.

Das folgende Beispiel konfiguriert den Pin 2 an Port D als externen Interrupt, welcher bei fallender Signalflanke einen Interrupt auslöst und in die zugehörige Serviceroutine springt, um dort den entsprechenden Code auszuführen. In dem Beispiel wird bei dem Interrupt die LED an Pin D1 getoggelt. Als Interrupt wurde der Interrupt 0 des Port D gewählt welcher bei dem Ereignis einen Lowlevel Interrupt auslöst. Xmega External Interrupt Example

Ein ausführliches Beispiel zum Testen der in diesem “Xmega Tutorial – external Interrupt” vorgestellten Funktionen findet ihr unter Downloads. Weiterhin findet ihr die von Atmel zu dem Thema zur Verfügung gestellte Appnote im Anhang des Artikels unter Links.

Viel Spass beim Testen.

Hinweis:
Das Tutorial wird nach und nach von mir ergänzt. Wenn ihr Fehler in dem Tutorial findet würde ich mich freuen wenn ihr mir diese mitteilt, damit ich diese korrigieren kann. Wenn jemand eigene Tips, Informationen oder Code-Schnipsel hat kann er mir diese gern zusenden damit ich sie anschließend in das Tutorial einbinden kann.

Links 
Atmel Appnote
Xmega External Interrupts
AVR1313: Using the XMEGA IO Pins and External Interrupts (pdf)
AVR1313: Using the XMEGA IO Pin and External Interrupts (Software)

Downloads

{phocadownload view=file|id=18}