Interrupte erweitern

T

Thomas Frey

Guest
Guten Tag,

ich such' ein IC mit dem ich einen 8051-kompatiblen Mikrocontroller um 8
Interrupte erweitern kann.
Konkret stell ich mir das folgendermassen vor: das IC speichert Hi oder
Low Pegel an dessen Eingänge und gibt an einem Pin ein Signal zum
Controller weiter (quasi 8-fach OR) über den Bus lässt sich abfragen,
welcher Eingang den Interrupt ausgelöst hat. Dieser Eingang wird dann
zurückgesetzt....
So in etwa. Hat da jemand einen Tipp?

Danke
Thomas Frey
--
bitte in der emailadresse "trash" durch "tfrey" ersetzen.
 
Wenn das Signal lange genug anliegt, kann man sich das Speichern sparen. Die
Oder-Verknüpfung kann man auch mit ein paar Dioden realisieren. Vorzugsweise
aber mit invertiertem Pegel, d.h. die fallende Flanke löst den INT aus. Die
entsprechenden Portleitungen werden mit einem Pull-Up nach + gezogen. Vom
INT-Pin dann jeweils eine Diode zum Port-Pin. INT dann auf fallende Flanke
am richtigen INT-Eingang.

Wenn der Impuls mindestens 30us anliegt sollte das funktionieren.

Gruß

Stefan
 
Thomas Frey schrieb:

ich such' ein IC mit dem ich einen 8051-kompatiblen Mikrocontroller um 8
Interrupte erweitern kann.
Konkret stell ich mir das folgendermassen vor: das IC speichert Hi oder
Low Pegel an dessen Eingänge und gibt an einem Pin ein Signal zum
Controller weiter (quasi 8-fach OR) über den Bus lässt sich abfragen,
welcher Eingang den Interrupt ausgelöst hat. Dieser Eingang wird dann
zurückgesetzt....
8295A

Gruß

Uwe
 
Hallo Thomas,

ich such' ein IC mit dem ich einen 8051-kompatiblen Mikrocontroller um 8
Interrupte erweitern kann.
Konkret stell ich mir das folgendermassen vor: das IC speichert Hi oder
Low Pegel an dessen Eingänge und gibt an einem Pin ein Signal zum
Controller weiter (quasi 8-fach OR) über den Bus lässt sich abfragen,
welcher Eingang den Interrupt ausgelöst hat. Dieser Eingang wird dann
zurückgesetzt....
So in etwa. Hat da jemand einen Tipp?
Wenn ein paar Port Pins frei sind, vielleicht einen 8-fach Mux wie HC354
"durchroedeln" lassen. Hat aber keinen Latch Clear.

Gruesse, Joerg

http://www.analogconsultants.com
 
Uwe Bredemeier schrieb:
Hi Uwe,

unter dieser Bezeichnung finde ich leider nichts gescheites :(
Kann es sein, dass das IC schon länger nicht mehr hergestellt wird?

Thomas Frey
--
bitte in der emailadresse "trash" durch "tfrey" ersetzen.
 
Hi,

Die Anwendung ist auch relativ zeitkritisch, darum muss das ganze so
Ressourcen schonend wie möglich vor sich gehen.

Joerg schrieb:
Hallo Thomas,


ich such' ein IC mit dem ich einen 8051-kompatiblen Mikrocontroller um
8 Interrupte erweitern kann.
Konkret stell ich mir das folgendermassen vor: das IC speichert Hi
oder Low Pegel an dessen Eingänge und gibt an einem Pin ein Signal zum
Controller weiter (quasi 8-fach OR) über den Bus lässt sich abfragen,
welcher Eingang den Interrupt ausgelöst hat. Dieser Eingang wird dann
zurückgesetzt....
So in etwa. Hat da jemand einen Tipp?


Wenn ein paar Port Pins frei sind, vielleicht einen 8-fach Mux wie HC354
"durchroedeln" lassen. Hat aber keinen Latch Clear.

Gruesse, Joerg

http://www.analogconsultants.com

--
bitte in der emailadresse "trash" durch "tfrey" ersetzen.
 
R.Freitag schrieb:
nöö. 8259 heisst er.
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.

--
bitte in der emailadresse "trash" durch "tfrey" ersetzen.
 
Uwe Bredemeier wrote:

Thomas Frey schrieb:

ich such' ein IC mit dem ich einen 8051-kompatiblen Mikrocontroller um 8
Interrupte erweitern kann.
Konkret stell ich mir das folgendermassen vor: das IC speichert Hi oder
Low Pegel an dessen Eingänge und gibt an einem Pin ein Signal zum
Controller weiter (quasi 8-fach OR) über den Bus lässt sich abfragen,
welcher Eingang den Interrupt ausgelöst hat. Dieser Eingang wird dann
zurückgesetzt....

8295A
nöö. 8259 heisst er.

Robert
--
'Vom Standpunkt eines Beamtenrechtlers aus betrachtet ist der Tod die
schärfstwirkenste aller bekannten, langfristig wirkenden Formen der
vollständigen Dienstunfähigkeit.'
aus: Kommentar zum Beamtenrecht.
 
Hallo Thomas,

Die Anwendung ist auch relativ zeitkritisch, darum muss das ganze so
Ressourcen schonend wie möglich vor sich gehen.
Dann bliebe noch die Brachialloesung: Interrupts einmal per Logik oder
"Poor Man's Logik" (Dioden) so verknuepfen, dass jeder Interrupt am Pin
zieht. Zusaetzlich die Interrupts mit R2R verkoppeln und per on-chip ADC
und Look-up Table auswerten, welche davon gesetzt sind. Koennte aber
je nach ADC zu lange dauern oder die Aufloesung nicht reichen.

Die serielle Abfrage sollte da meist schneller sein. Irgendwie geht das
ja nur seriell, wenn nicht genuegend Interrupt-faehige Port Pins
vorhanden sind.

Gruesse, Joerg

http://www.analogconsultants.com
 
"Thomas Frey" <trash@2wire.ch> schrieb
ich such' ein IC mit dem ich einen 8051-kompatiblen Mikrocontroller um 8
Interrupte erweitern kann.
CPLD

Gruß
Hans-Georg
 
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...
 
Thomas Frey <trash@2wire.ch> wrote:
: Guten Tag,

: ich such' ein IC mit dem ich einen 8051-kompatiblen Mikrocontroller um 8
: Interrupte erweitern kann.
: Konkret stell ich mir das folgendermassen vor: das IC speichert Hi oder
: Low Pegel an dessen Eingänge und gibt an einem Pin ein Signal zum
Prioritätsdecoder mit Latch?
 
Hallo Thomas,

ich such' ein IC mit dem ich einen 8051-kompatiblen Mikrocontroller
um 8 Interrupte erweitern kann.
Warum denn nicht ein Derivat mit mehr Interruptquellen? Der AT89C51ED2
hat am Port 1 einen Matrix-Tastatur-Controller, der einen gemeinsamen
Interrupt auslöst.

Konkret stell ich mir das folgendermassen vor: das IC speichert Hi
oder Low Pegel an dessen Eingänge und gibt an einem Pin ein Signal zum
Controller weiter (quasi 8-fach OR) über den Bus lässt sich abfragen,
welcher Eingang den Interrupt ausgelöst hat. Dieser Eingang wird dann
zurückgesetzt....
Ein GAL: Du brauchst 1 INT-Ausgang und 3 Ausgänge für den Vektor.
Beim Interrupt wird der Vektor gebildet und mit dem rückgekoppelten
INT-Signal
an CLK abgelatcht. Ein weiterer Pin und der Controller setzt die Flipflops
des Vektors zurück

tschuessle
Bernhard Spitzer
--
bash.org - Top 100...
<erno> hm. I've lost a machine.. literally _lost_. it responds to ping, it
works completely, I just can't figure out where in my apartment it is.
 

Welcome to EDABoard.com

Sponsor

Back
Top