Herunterladen Inhalt Inhalt Diese Seite drucken

Interrupt Controller; Allgemeines; Flanken- Und Pegeltriggerung; Zugeordnete Interrupt-Vektoren - taskit 386EX MicroPC Technisches Handbuch

Inhaltsverzeichnis

Werbung

MicroPC

5.6. Interrupt Controller

5.6.1. Allgemeines

Der
386EX
Prozessor
Programmable Interrupt Controller) und entspricht damit dem PC. Hierdurch stehen wie beim PC 15
Interrupt-Requests (IRQs) zur Verfügung, die teilweise bereits durch Einheiten des MicroPC belegt
sind. Für Anwendungen frei sind die IRQs 1, 5, 7, 9, 13 und 14. Wird kein RTC-Interrupt benötigt,
kann auch der IRQ8 anderweitig verwendet werden (RTC-On Signal, Open-Drain Ausgang der RTC).
Wenn die erste oder zweite serielle Schnittstelle ohne Interrupt betrieben werden kann oder nicht
benötigt wird, so steht auch IRQ4 bzw. IRQ3 extern zur Verfügung. Zu beachten ist, daß der IRQ 8
auf dem Stecker invertiert, also low-aktiv ist.
Der PIC2 ist mit seinem Ausgang an den IRQ2-Eingang des PIC1 angeschlossen. Der IRQ2-Eingang
ist deshalb als Slave-Eingang konfiguriert, so daß es den IRQ2 im eigentlichen Sinn nicht gibt. Dem
Vektor Int 0Ah ist also auch kein IRQ zugeordnet. Der CPU-Kern besitzt einen allgemeinen Interrupt-
Eingang. An diesen ist der Ausgang des PIC1 angeschlossen. Daneben gibt es noch den NMI- und
den SMI-Interrupt Eingang. Beim MicroPC werden diese nicht verwendet.
Die Einzelheiten der Programmierung der Interrupt-Controller kann man dem Manual des 386EX-
Prozessors von Intel oder der gängigen PC-Literatur entnehmen. Hier sind deshalb nur einige
Hinweise aufgeführt.

5.6.2. Flanken- und Pegeltriggerung

Die Interrupt-Controller arbeiten traditionell beim PC mit Flankentriggerung. Eine Umprogrammierung
auf Pegel-Triggerung ist nicht unbedingt zu empfehlen, da bei den BIOS Interrupt-Funktionen, speziell
denen der RTC und des Timer 0, Probleme auftreten werden. Falls der RTC-Interrupt nicht benötigt
wird, kann der PIC2 auf Pegel-Triggerung eingestellt werden. Der Vorteil der Pegel-Triggerung:
mehrere Einheiten können sich – durch Wired-OR bzw. Wired-AND Verknüpfung - einen IRQ teilen
(das geht bei Flankentriggerung nicht gut, da Flanken verloren gehen, wenn zwei Interrupt-Signale auf
einer Leitung gleichzeitig auftreten). Der Nachteil der Pegel-Triggerung besteht darin, daß die
Interrupt-Quelle innerhalb der Service-Routine sofort zurückgesetzt werden muß (was aber z.B. beim
Timer gar nicht möglich ist), da sonst weitere Interrupts auftreten.

5.6.3. Zugeordnete Interrupt-Vektoren

Jedem PIC kann per Software-Initialisierung ein Bereich von acht aufeinander folgenden Interrupt-
Vektoren zugeordnet werden. Beim PC werden traditionell vom BIOS dem PIC1 die Vektoren Int08 bis
Int0Fh und dem PIC2 die Vektoren Int70h bis Int77h zugeordnet. Die Vektoren des PIC1 liegen daher
entsprechend der PC-Tradition - wie auch die meisten BIOS-Funktionen - in dem von Intel als
"reserved" vorgesehenen Bereich von Int0 bis Int1Fh, d.h. sie teilen sich den Vektor mit gewissen
Prozessor-Exceptions. In der Praxis führt dies in den meisten Fällen nicht zu Problemen.

5.6.4. Maskieren von Interrupts

Um einen IRQ zu aktivieren, muß das zugehörige Bit im Maskenregister des PIC auf 0 gesetzt
werden. Für die IRQs des PIC2 muß zusätzlich das Maskenbit 2 des PIC1 (entsprechend IRQ2) auf 0
gesetzt werden. Die Maskenregister liegen bei den I/O-Adressen 21h bzw. A1h für PIC1 bzw. PIC2.
5.6.5. Zurücksetzen der Interrupt-Controller
Jeder IRQ-Eingang besitzt im Interrupt-Controller ein In-Service-Bit. Die Interrupt-Service Routinen
müssen grundsätzlich das In-Service-Bit des betreffenden IRQ zurücksetzen, da andernfalls kein
weiterer IRQ mit gleicher oder niedrigerer Priorität mehr erzeugt werden kann. Dies geschieht nor-
malerweise durch den "unspezifischen Rücksetzbefehl"
out [20h], 20h
bzw. für den PIC2:
out [0A0h], 20h
oder in "C":
_outp(0x20, 0x20); _outp(0xA0, 0x20);
besitzt
On-Chip
zwei
- 16 -
8259-kompatible
Interrupt-Controller
Hardware
("PIC",

Werbung

Inhaltsverzeichnis
loading

Inhaltsverzeichnis