Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03361.jsonl.gz/680

Interrupts (Programmunterbrechungen)
Hierbei handelt es sich um die Unterbrechung des laufenden Programms durch die
Hardware (IRQ-Signal, z. B. von der Peripherie) oder durch die Software. Es wird ein anderes Programm (= Interrupt Service Routine, ISR) nach Beendigung des laufendenBefehls gestartet.
Anwendungen:
- Quasiparallele Ausführung mehrerer Programme (normalerweise nur Hauptprogrammund ISR) - Parallelarbeit von Programmen und externen Geräten (interruptgesteuerterE/A-Transfer)
- Reaktion auf unvorhersehbare Ereignisse (z. B. Spannungsabfall)
- Testen von Programmen mittels Breakpoints (SW-Interrupt)
- Aufruf von Betriebssystemfunktionen (SW-Interrupt)
Aufgaben der CPU bei einen Interrupt:
- Abspeichern von Registerinhalten (bei 68HC11 im Stack)
- Setzen der Interruptmaske zum Sperren weiterer Interrupts
(Unter Berücksichtigung der Priorität)
- Laden der Startadresse (= Interrupt-Vektor) der ISR in den PC
- Der Interruptvektor steht an einer hardwaremäßig vorgegebenen Adresse, die von der Art des Interrupts abhängt.
- Je nach Interrupt-Art wird die entsprechende Interrupt-Vektor-Adresse auf den
Bus gegeben.
- In den so adressierten Speicherzellen steht dann die Startadresse der ISR
(= Interrupt-Vektor), die in den PC gebracht wird
Start der ISR
- Fortsetzung des unterbrochenen Programms nach der Interrupt-Bearbeitung: RTI-Befehl
- weggespeicherte Register werden vom Stack geholt
- PC erhält Adresse des nächsten Befehls des unterbrochenen Programms
Im allgemeinen wird ein Hardware-IRQ erst am Ende eine Befehlszyklus bedient. Außer
dem PC und dem Stackpointer werden keine Register beeinflußt. Interrupts können
geschachtelt werden (3 Ebenen).
Interruptsystem des 68HC11:
|Signal||RESET||Unbedinger Abbruch und Neustart|
|Signal||XIRQ & (X-Bit = 0)||Unbedingte Unterbrechung
(non maskable interrupt)|
|Signal||IRQ & (I-Bit = 0)||Bedingte Unterbrechung
(interrupt request)|
(kann auch interne Ursachen haben)
I-Bit beeinflußbar durch die Befehle SEI/CLI
|Befehl||SWI||Befehlsgesteuerte Unterbrechung
(software interrupt)|
|Befehl||Illegal Opcode||Nicht implementierter Befehl|
Beim Auftreten eines Interrupts wird das I-Bit auf 1 gesetzt (Sperren IRQ),
bei Reset und XIRQ auch das X-Bit. Beim RTI wird durch das Zurückschreiben
des Statusregisters diese Sperre automatisch wieder aufgehoben. Das X-Bit
kann nicht per Programm beeinflußt werden.
Jedem dieser Interrupts ist eine eindeutige Interrupt-Vektor-Adresse (= Adresse,
unter welcher der Interrupt-Vektor, also die Adresse der Interrupt-Serviceroutine,
zu finden ist) zugeordnet:
Zu jeder Interrupt-Art ist eine eigene ISR möglich.
Zumindest der RESET-Vektor muß bei Einschalten vohanden sein
ROM im höchsten Adreßbereich nötig.
Beispiel: Starten der Interrupt-Service-Routine für XIRQ
Grundsätzlich gilt für Programme mit Interrupt-Serviceroutinen, daß
vier Schritte für die Initialisierung (zu Beginn des Hauptprogramms) nötig
sind:
- Setzen des System-Stackpointers
Solange er nicht gesetzt ist, werden keine Interrupts entgegengenommen.
- Initialisierung der Hardware
In der Regel werden Interrupts von E/A-Bausteinen ausgelöst. Diese müssen
entsprechend programmiert werden.
- Setzen des Interruptvektors
Siehe oben.
- Freigeben des Interrupts durch Setzen des entsprechenden I-Flags im CC-Register
auf 0. Bei einer ISR für XIRQ entfällt dieser Punkt natürlich.