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.
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.
--
'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.
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.
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...
: 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?
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.
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.