Interrupte erweitern

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.
Reply to
Thomas Frey
Loading thread data ...

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

Reply to
Stefan Broering

Thomas Frey schrieb:

8295A

Gruß

Uwe

Reply to
Uwe Bredemeier

Hallo Thomas,

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

Gruesse, Joerg

formatting link

Reply to
Joerg

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.
Reply to
Thomas Frey

Hi,

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

Joerg schrieb:

--
bitte in der emailadresse "trash" durch "tfrey" ersetzen.
Reply to
Thomas Frey

R.Freitag 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.

--
bitte in der emailadresse "trash" durch "tfrey" ersetzen.
Reply to
Thomas Frey

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.
Reply to
R.Freitag

Hallo Thomas,

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

formatting link

Reply to
Joerg

"Thomas Frey" schrieb

CPLD

Gruß Hans-Georg

Reply to
Hans-Georg Lehnard

Thomas Frey schrieb:

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...
Reply to
Frank Seidinger

Thomas Frey 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?

Reply to
Peter Heitzer

Peter Heitzer schrieb:

Hallo,

nicht de- sondern Encoder:

74x147, 74x148, 74x348 und 74x278.

Bye

Reply to
Uwe Hercksen

Hallo Thomas,

Warum denn nicht ein Derivat mit mehr Interruptquellen? Der AT89C51ED2 hat am Port 1 einen Matrix-Tastatur-Controller, der einen gemeinsamen Interrupt auslöst.

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...
 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.
Reply to
B. Spitzer

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.