(→Interrupt Request) |
(→Interrupt Request) |
||
Zeile 5: | Zeile 5: | ||
Es wird unterschieden zwischen maskierbaren (d.h. Interrupts, die man unterdrücken kann) und nicht maskierbaren Interrupts. Nicht maskierbare Interrupts werden vor allem für besonders schwerwiegende Ereignisse (z.B. zu hohe Umgebungstemperatur) verwendet, da hier das Steuerprogramm immer unmittelbar reagieren muss, um Schaden vom System abwenden zu können (z.B. indem es eine Kühlung aktiviert). | Es wird unterschieden zwischen maskierbaren (d.h. Interrupts, die man unterdrücken kann) und nicht maskierbaren Interrupts. Nicht maskierbare Interrupts werden vor allem für besonders schwerwiegende Ereignisse (z.B. zu hohe Umgebungstemperatur) verwendet, da hier das Steuerprogramm immer unmittelbar reagieren muss, um Schaden vom System abwenden zu können (z.B. indem es eine Kühlung aktiviert). | ||
− | Sind die Interrupts nicht unterdrückt, wird der normale Programmfluss unterbrochen, sobald ein Interrupt Signalisiert wird. Es wird dann eine spezielle Unterroutine ([[ISR]]) verzweigt, die auf das Signal reagieren und es ggf. abschalten muss (um erneute Interrupt Requests und damit Endlosschleifen zu vermeiden). Je nach Mikroprozessor gibt es je nach Interruptquelle eine eigene ISR (z.B. AVR) oder nur eine (z.B. PIC18) bzw. einige wenige. | + | Sind die Interrupts nicht unterdrückt, wird der normale Programmfluss unterbrochen, sobald ein Interrupt Signalisiert wird. Es wird dann eine spezielle Unterroutine ([[ISR]]) verzweigt, die auf das Signal reagieren und es ggf. abschalten muss (um erneute Interrupt Requests und damit Endlosschleifen zu vermeiden). Je nach Mikroprozessor gibt es je nach Interruptquelle eine eigene ISR (z.B. AVR) oder nur eine (z.B. PIC18) bzw. einige wenige. |
Da die Anzahl der Interrupt-Leitungen bei Microprozessoren meist begrenzt sind, werden oft Interrupt-Controller vorgeschaltet (z.B. im PC). Die eigentliche Interruptquelle wird dann später, z.B. in der ISR ermittelt. | Da die Anzahl der Interrupt-Leitungen bei Microprozessoren meist begrenzt sind, werden oft Interrupt-Controller vorgeschaltet (z.B. im PC). Die eigentliche Interruptquelle wird dann später, z.B. in der ISR ermittelt. |
Version vom 21. Juni 2009, 21:02 Uhr
Inhaltsverzeichnis
Interrupt Request
"Ein Interrupt ist ein Signal, meist von einem externen Gerät, mit dem der Prozessor aufgefordert wird, den aktuellen Programmablauf anzuhalten (zu unterbrechen) und eine sog. Unterbrechungsroutine (ISR) aufzurufen." (Zitat aus der Wikipedia Interrupt Request) Bei Microcontrollern sind viele der Interruptquellen interne Module wie Timer, UART, I2C oder A/D.
Es wird unterschieden zwischen maskierbaren (d.h. Interrupts, die man unterdrücken kann) und nicht maskierbaren Interrupts. Nicht maskierbare Interrupts werden vor allem für besonders schwerwiegende Ereignisse (z.B. zu hohe Umgebungstemperatur) verwendet, da hier das Steuerprogramm immer unmittelbar reagieren muss, um Schaden vom System abwenden zu können (z.B. indem es eine Kühlung aktiviert).
Sind die Interrupts nicht unterdrückt, wird der normale Programmfluss unterbrochen, sobald ein Interrupt Signalisiert wird. Es wird dann eine spezielle Unterroutine (ISR) verzweigt, die auf das Signal reagieren und es ggf. abschalten muss (um erneute Interrupt Requests und damit Endlosschleifen zu vermeiden). Je nach Mikroprozessor gibt es je nach Interruptquelle eine eigene ISR (z.B. AVR) oder nur eine (z.B. PIC18) bzw. einige wenige.
Da die Anzahl der Interrupt-Leitungen bei Microprozessoren meist begrenzt sind, werden oft Interrupt-Controller vorgeschaltet (z.B. im PC). Die eigentliche Interruptquelle wird dann später, z.B. in der ISR ermittelt.
Unterschiede zum Polling
Alternativ zur Verwendung von Interrupts lässt sich das Auftreten eines externes Ereignisses auch durch das regelmäßige Abfragen des externen Gerätes erkennen. Diese Technik nennt sich Polling (der Prozessor frägt das externe Gerät).
Vorteile des Pollings gegenüber der Verwendung von Interrupts:
- Es ist einfacher zu implementieren, da die Abfrage des Geräts im Hauptprogramm erfolgen kann.
- Es reagiert meist schneller auf das externe Ereignis, sofern nur auf ein Ereigniss gewartet wird. Bei Interrupts wird der aktuelle Befehl des Hauptprogramms noch fertig ausgeführt, dann wird die Rücksprungadresse gesichert und in die ISR verzweigt. Diese wiederrum muss die zu benutzenden Register auf dem Stack sichern, bevor sie mit der eigentlichen Reaktion auf das externe Ereignis beginnen kann. Beim Polling kann nach Erkennung des Ereignisses sofort reagiert werden.
- Es ist weniger Hardwareaufwand bei den Geräten notwendig, da diese nicht in der Lage sein müssen, auf das Auftreten eines Ereignisses mit einer Interrupt-Anfrage zu reagieren. So braucht z.B. ein Temperatursensor für Polling im einfachsten Fall nur einen A/D-Wandler. Bei der Verwendung von Interrupts muss er jedoch neben der Möglichkeit, die Temperatur zu messen, zusätzlich auf die Änderung der Temperatur mit einer Interruptanfrage reagieren können.
- Auch Eingänge ohne Interruptfunktion können genutzt werden.
Vorteile von Interrupts gegenüber Polling:
- Das Hauptprogramm wird u.U deutlich einfacher und besser verständlich, weil es sich auf das Wesentliche konzentriert, ohne ständig oder von unterschiedlichen Codestellen aus Ereignisse abzufragen zu müssen.
- Es können leicht mehrere mögliche Signale Überwacht werden.
- Das Auftreten des externen Ereignisses wird immer überwacht. Beim Polling geschieht dies nur zu den Zeiten, zu denen das Hauptprogramm danach frägt.
- Das Hauptprogramm kann andere Aufgaben übernehmen als das externe Gerät zu überwachen. Beim Polling wird häufig sämtliche Rechenleistung für die Abfrage der Geräte aufgewendet.
- Die Kommunikationsleitungen, Datenbusse und externen Geräte werden entlastet. Im Gegensatz zum Polling wird nur mit dem Gerät kommuniziert, wenn tatsächlich ein externes Ereigniss stattfindet.
- Es ist oft stromsparender. Hat das Hauptprogramm keine Aufgaben mehr zu erledigen, so kann es Teile der CPU bis zum nächsten Auftreten eines Interrupts in einen stromsparenden Sleep-Mode versetzen. In diesem Modus wird die CPU angehalten und beim nächsten Interrupt wieder aktiviert. Fast alle modernen, interruptfähigen Prozessoren unterstützen einen solchen Modus.
In den allermeisten Fällen überwiegen die Vorteile der Verwendung von Interrupts deutlich!
Interrupt-Sharing
Stehen auf dem Controller weniger Interruptleitungen zur Verfügung, als interruptfähige Geräte angeschlossen werden sollen, so ist es notwendig, dass sich mehrere Geräte eine Interruptleitung teilen (Interrupt-Sharing). Bei einfachen Controllern kann es sogar vorkommen, dass nur eine einzige ISR definiert werden kann, die bei jeder Art von Ereignis aufgerufen wird. In diesem Fall muss die durch den Interrupt aufgerufene Interrupt Service Routine prüfen, bei welchem Gerät das Ereignis aufgetreten ist. Das geschieht wiederrum durch Abfrage jedes in Frage kommenden Geräts (also Polling).