Re: Interrupte erweitern
- From: Frank Seidinger <p3lucluc@xxxxxx>
- Date: Mon, 20 Feb 2006 09:45:03 +0100
Thomas Frey schrieb:
Den hab ich mir auch schon angeschaut, versteh ihn aber irgendwie nicht
ganz. Der will dem Controller die Einsprungadresse des Interrupts
mitteilen? Mir ist nicht klar, wie ich das mit einem 8051 verkoppeln kann.
Der 8259 ist ein Interrupt-Controller für 8080 bzw. 8085 kompatible CPUs.
Für diese implementiert er ein spezielles "Protokoll". Der Controller
liefert den Interrupt am INT Pin des Prozessors. Wenn der Prozessor die
Interrupt-Verarbeitung beginnt, pulst er einmal den INTA Ausgang, der in
diesem Modus direkt mit dem INTA Eingang des Controllers verbunden ist.
Der 8259 legt als Antwort auf den Puls den Instruction Code CD auf den
Datenbus. Das ist der Instruction Code für einen subroutine call. Danach
pulst der Prozessor noch zweimal den INTA Ausgang und erhält vom Controller
High- und Low-Byte eines Interruptvektors. Insgesamt wird damit also ein
Call auf die Adresse der Interrupt-Routine bewerkstelligt.
Mit Hilfe des Controllers kann die CPU also für jeden Interrupt eine eigene
Adresse anspringen lassen. Die Adressen werden bei der Initialisierung des
Controllers über Port-Zugriffe hinterlegt.
Der 8259 kennt noch einen Modus für 8086/8088 kompatible CPUs. In diesem
Fall erwartet er nur zwei Pulse auf seinem INTA Eingang. Die legen nur das
High- und Low-Byte auf den Datenbus. Hier wird also nur der Vector
ausgegeben.
Für den 8051 lässt sich der Controller nutzen, in dem man den INTA Eingang
unbeschaltet lässt. Dann zieht er nur den INT Pin runter und wartet auf die
Bearbeitung. Da die Pulst am INTA-Eingang ausbleiben, macht er aus nichts
mit dem Datenbus. Der Controller muss dafür initialiert werden mit AEOI = 0
(automatic end of interrupt). Die INT-Leitung bleibt damit solange für
weiter Interrupts gesperrt, bis die CPU einen EOI-Befehl an den Controller
sendet. Das ist in der Regel die letzte Anweisung der Interrupt-Routine.
Eine Alternative ist, den INTA-Eingang z.B. über einen Adressdekoder auf
zwei Adressen im Adressraum deines 8051 zu legen. Liest die CPU in der
Interrupt-Routine die beiden Adressen, legt der 8259 jeweils den Vector auf
Datenbus. Die gelesen Werte kann man in einem Register sammeln und dann per
indirektem Sprung zu der echten Routine springen.
Grüße,
Frank.
--
Geld allein macht nicht glücklich.
Es kommt auch auf die Menge an...
.
- References:
- Interrupte erweitern
- From: Thomas Frey
- Re: Interrupte erweitern
- From: Uwe Bredemeier
- Re: Interrupte erweitern
- From: R.Freitag
- Interrupte erweitern
- Prev by Date: Re: Flimmern von Energiesparlampen
- Next by Date: Re: Ultraschall Reinigung
- Previous by thread: Re: Interrupte erweitern
- Next by thread: Re: Interrupte erweitern
- Index(es):
Relevant Pages
|