Interrupts auf der AVR® Mikrocontroller-FamilieWas ist ein Interrupt?Die meisten Mikrocontroller bieten die Möglichkeit, auf externe oder interne Ereignisse unmittelbar (asynchron) zu reagieren. Bei einem Interrupt wird das laufende Hauptprogramm unterbrochen. Ein Unterprogramm (Interrupt Service Routine) wird ausgeführt. Danach wird das Hauptprogramm dort fortgesetzt, wo es unterbrochen wurde. Mit Hilfe von Interrupts erlangt der Mikrocontroller also eine gewisse Multitasking-Fähigkeit. IRQs und ISRs
Das Ereignis, das die Unterbrechung des Hauptprogramms auslöst wird Unterbrechungsanforderung genannt. Gängig ist aber der englische Begriff
Nach einem IRQ wird ein Unterprogramm, die Interruptprogrammierung in CDie Programmierung von ISRs in C wird in einem gesonderten Kapitel beschrieben. Arten von IRQsIRQs können durch externe Ereignisse, z.B. einem Tastendruck, oder interne Ereignisse, z.B. einem Timer Overflow, ausgelöst werden. InterruptsteuerungEin Mikrocontroller muss wissen, ob und wie er auf einen IRQ reagieren soll. Dazu ist eine Interruptsteuerung notwendig, die je nach Mikrocontroller mehr oder weniger aufwändig ist. Beim AVR ist die Interruptsteuerung (wie bei den meisten Mikrocontrollern) zweistufig. Globale Interruptsteuerung
Der AVR besitzt im Statusregister (SREG) das Global Interrupt Enable Bit I. Lokale InterruptsteuerungDie unterschiedlichen IRQs werden durch Sonderregister gesteuert. Je nach Interrupt Quelle müssen ein oder mehrere Bits in Sonderregistern, entsprechend der gewünschten Funktion, beschrieben werden. Externe InterruptsExterne Interrupts werden an dafür vorgesehenen Interrupt-Pins detektiert. Wie viele und welche Pins dafür geeignet sind hängt vom Mikrocontroller Typ ab. INT0 und INT1 am ATmega328p
Beim ATmega328p bieten die externen Interrupts INT0 an Die Funktionalität dieser Pins wird durch das External Interrupt Control Register A (EICRA) festgelegt. Das External Interrupt Mask Register (EIMSK) legt fest, ob von diesen Pins ein IRQ ausgelöst werden kann.
Um externe Interrupts an
Timer InterruptsDie Timer des AVR stellen mehrere Möglichkeiten zur Verfügung, einen IRQ auszulösen. Solche Timer Interrupts eignen sich beispielsweise, um Uhren unabhängig vom Hauptprogramm zu realisieren oder um Delay-Schleifen zu ersetzen. Timer Interrupts am ATmega328pDer ATmega328p besitzt drei Timer, die auf unterschiedliche Weise einen IRQ auslösen können. Dies kann bei einem Timer Overflow oder bei einem Compare Match geschehen. Die Interruptsteuerung für Timer Interrupts wird durch das Beschreiben der Timer/Counter Interrupt Mask Register (TIMSKn) festgelegt. Jeder der drei Timer hat ein eigenes TIMSK Register. Um die Interruptverarbeitung für Timer Interrupts zu aktivieren müssen also folgende folgende Voraussetzungen erfüllt sein (siehe auch Timer):
|