Herunterladen Inhalt Inhalt Diese Seite drucken

Nicht-Speicherung Von Irqs; Spurious Interrupt; Irq-Priorität - taskit 386EX MicroPC Technisches Handbuch

Inhaltsverzeichnis

Werbung

MicroPC
also durch Ausgabe des Byte 20h auf die I/O-Adresse 20h bzw. A0h. Bei den IRQs des PIC2 muß
immer auch das In-Service-Bit des IRQ2 zurückgesetzt werden, man muß also beide der
angegebenen Out-Befehle ausführen.
Grundsätzlich ist zu beachten, daß die CPU beim Einsprung in eine Interrupt-Routine zunächst alle
Interrupts sperrt durch Rücksetzen des Interrupt-Enable Flags. Dies gilt für IRQ-Service-Routinen wie
auch für Software-Interrupts (nur im Protected Mode kann hier für jeden Interrupt eine andere
Einstellung gewählt werden). Falls notwendig, kann man die Interrupts innerhalb einer Interrupt-
Routine durch den „Set Interrupt" (STI) Befehl wieder freigeben.

5.6.6. Nicht-Speicherung von IRQs

IRQs werden beim 8259 nicht zwischengespeichert (auch wenn das Intel-Manual diesen Eindruck zu
erwecken
scheint).
D.h.:
zurückgenommen, bevor die CPU den IRQ bearbeiten kann (z.B. weil die Interrupts in der CPU
gerade gesperrt sind), so geht dieser Interrupt verloren. Nur direkt während eines Interrupt-
Acknowledge-Zyklus der CPU werden die Zustände der IRQ-Eingänge eingefroren, um eine
eindeutige Ausgabe des Interrupt-Vektors zu ermöglichen. Das Interrupt Request Register (IRR) gibt
ansonsten nur den Zustand der IRQ-Eingänge wieder. Dies gilt unabhängig davon, ob ein IRQ
ausmaskiert ist. Wenn im flankengetriggerten Modus ein IRQ gerade bearbeitet wird (In-Service-Bit
gesetzt), wird das betreffende Bit des IRR als 0 gelesen, da das Edge-Sense-Latch den Eingang
sperrt. Das Edge-Sense-Latch wird durch einen Low-Impuls an dem IRQ-Eingang zurückgesetzt,
auch wenn das In-Service-Bit noch gesetzt ist, so daß man dann den IRQ-Eingang via IRR wieder
einlesen kann.

5.6.7. Spurious Interrupt

Die Nicht-Speicherung von IRQ-Impulsen macht auch den Default- oder Spurios-Interrupt notwendig.
Dieser tritt bei "unsauberen" IRQ-Signalen auf, z.B. bei IRQs von prellenden Tastaturen. Wenn die
CPU als Reaktion auf einen IRQ einen INTA-Zyklus durchführt, der PIC den zugehörigen IRQ-
Eingang aber bereits vergessen hat (da das Signal zurückgenommen wurde), muß der PIC dennoch
einen Interrupt-Vektor auf den Datenbus ausgeben (ein Zufallswert auf dem Datenbus könnte sonst
zum Absturz des Rechners führen). Dieses ist dann der "Spurios IRQ7". Er wird auch dann
aufgerufen, wenn der IRQ7 ausmaskiert ist. Das In-Service-Bit des IRQ7 wird beim Spurios IRQ nicht
gesetzt. Beim PIC2 kann auch ein Spurios IRQ15 auftreten. Ob ein IRQ7 oder ein IRQ15 auftritt,
hängt dann vom Timing des Eingangssignals ab. Wegen der Durchlaufverzögerung des PIC2 liegt das
IRQ-Signal am PIC1 etwas länger an, so daß eventuell der PIC1 den IRQ nicht als "Spurios"
betrachtet und den PIC2 aktiviert, der dann einen Spurious IRQ15 erzeugt.
5.6.8. IRQ-Priorität
Die Priorität der IRQs ist beim PC üblicherweise so festgelegt, daß der IRQ0 die höchste Priorität
besitzt, die anderen IRQs folgen gemäß ihrer Nummer. Da der PIC2 an IRQ2 angeschlossen ist,
liegen die IRQs des PIC2 der Priorität entsprechend vor dem IRQ3. Die Service-Routinen des PIC2
können allerdings nicht von IRQs höherer Priorität des PIC2 unterbrochen werden, solange das In-
Service-Bit des IRQ2 nicht zurückgesetzt wurde. Setzt man aber dieses Bit zurück, können sie auch
durch IRQs des PIC1 mit niedrigerer Priorität unterbrochen werden.
Die Prioritäten können auch geändert werden, allerdings nur zyklisch innerhalb der einzelnen PICs.
D.h. man legt per Befehl den IRQ mit der niedrigsten Priorität fest, woraus sich automatisch die
anderen Prioritäten innerhalb dieses PICs ergeben. Die Festlegung der niedrigsten Priorität erfolgt für
den PIC1 bzw. PIC2 durch den Befehl
out [20h], 0C0h+ IRQ-Nr
bzw.
out [0A0h], 0C0h+ IRQ-Nr
Z.B. legt
out [20h], 0C3h
den IRQ3 auf die niedrigste Priorität, wodurch der IRQ4 (von COM1) die höchste Priorität bekommt.
wird
das
IRQ-Signal
- 17 -
von
der
betreffenden
Hardware
Peripherie-Einheit

Werbung

Inhaltsverzeichnis
loading

Inhaltsverzeichnis