Interruptverhalten Z80 CPU im Detail |
![]() |
![]() |
Letztmalig dran rumgefummelt: 05.06.07 08:35:40 |
![]() |
Das Nachfolgende liest und studiert man genau
dann, wenn Interrupts auf einem Mikrorechnersystem zu programmieren sind
und das Ganze nicht einwandfrei funktioniert. Für die allgemeinen Zwecke
sollten die Grobinformationen sowie Programmierungsvorschriften
ausreichend sein. Die Leistungsfähigkeit eines Mikrorechners wird vorrangig durch die Systemeigenschaften des Prozessors und der peripheren Elemente bestimmt. Diese Faktoren bestimmen somit die Haupteinsatzgebiete sowie die Grenzen der Anwendbarkeit von Mikrorechnersystemen. Dabei werden in den grundlegenden Einsatzbereichen, insbesondere also der Datenverarbeitungstechnik und der Steuer- und Regelungstechnik, unterschiedliche und verschieden gerichtete Forderungen an Mikrorechnerkonzepte gestellt. Für den Mikrorechnereinsatz in der Datentechnik ergeben sich hauptsächlich Anforderungen an einen zur Realisierung von arithmetischen und logischen Funktionen ausgelegten Befehlssatz und an die Ausführungszeiten dieser Befehle. Des weiteren wird ein relativ großer Adressierungsraum für externe Speicherelemente (ROM, RAM) benötigt. Der Einsatz großer Schreib-/Lese-Speicherbereiche, die vorteilhaft mit dynamischen RAM-Bauelementen aufgebaut werden, wird durch eine prozessorseitig vorgenommene automatische Refreshgenerierung begünstigt. Leistungsfähige periphere Systemelemente werden zur Gestaltung von standardisierten parallelen und seriellen Ein-/Ausgabe-Einrichtungen benötigt |
||
![]() |
1. Interrupt-Prinzip der Z80 CPU |
||
![]() |
|||
![]() |
Quelle: Kieser, Meder Mikroprozessortechnik Seite 206 ff. |
||
![]() |
|
||
![]() |
In der Steuer- und Regelungstechnik bestehen dagegen vor allem Forderungen zur Realisierung vielfältiger Ein-/Ausgabe-Einrichtungen und nach möglichst kurzen Programmbearbeitungszeiten. Signaländerungen in der Peripherie erfordern eine möglichst schnelle Reaktion des Rechners. Weitere Gesichtspunkte beim Mikrorechnereinsatz sind die Möglichkeit des Echtzeitbetriebs, die Schaffung von Datenbahnkopplungen zu hierarchisch angeordneten Rechnern und die Anwendbarkeit eines leistungsfähigen Interruptsystems. | ||
![]() |
Der Mikroprozessor Z80-CPU und die zugehörigen peripheren Elemente PIO, SIO, CTC und DMAC erfüllen in weiten Grenzen die Forderungen dieser Haupteinsatzgebiete. Mit der maximalen Systemtaktfrequenz von fc = 4 MHz beim System UA880 (2,5 MHz bei UB880) ergibt sich eine typische Befehlsabarbeitungszeit von t = 1 μs (1,6 μs bei UB880), bezogen auf die Ausführung eines hierzu üblicherweise betrachteten 8-bitAdditionsbefehls. Der Prozessor besitzt 158 Basisbefehle. Aus diesem Basisbefehlssatz können durch Spezifizierung der CPU-Register 695 verschiedene Befehle (Op-Kode) gebildet werden. Die Leistungsfähigkeit dieser Befehle ist beispielsweise gekennzeichnet durch die Adressierungsmöglichkeiten, das Flagsystem, die Unterprogrammabarbeitung, die Anwendung von Einzelbit-, Nibble- (4-bit-), Byte- (8-bit-) und Wort- (16-bit-) Verarbeitung und die Anzahl der arithmetischen und logischen Befehle. Der Befehlssatz beinhaltet auch sich automatisch wiederholende (repetierende) Befehle, die zur Übertragung von großen Datenblöcken vorteilhaft angewendet werden können. Der Tauschregistersatz der CPU kann in Interruptbedienroutinen zur Rettung der aktuellen Registerinhalte benutzt werden und ermöglicht damit auch die schnelle Reaktion auf Interruptanmeldungen. | ||
![]() |
Die Eigenschaften der peripheren Elemente des Mikrorechnersystems
bestimmen weitgehend die Möglichkeiten der Anpassung des Rechners an äußere
Signale. Sie haben deshalb besondere Bedeutung für Einsatzfälle in der
Steuer- und Regelungstechnik. Die in verschiedenen Betriebsarten und
Einsatzbedingungen programmierbaren Elemente parallele Ein-
/Ausgabe-Einheit, serielle Ein- /Ausgabe-Einheit und Zähler/Zeitgeber
gestatten aufgrund ihrer Komplexität die Organisation eines den
Mikroprozessor zeitlich nur sehr gering belastenden Datenverkehrs mit der
Peripherie. Als wesentliche Systemeigenschaften, die die Reaktionszeit und Leistungsfähigkeit des Mikrorechnersystems bestimmen, sollen in den nachfolgenden Abschnitten die Interruptbearbeitung und das Verhalten bei direktem Speicherzugriff des Systems U880 dargestellt werden. |
1. Interruptprinzip der Z80 CPU |
![]() |
![]() |
![]() |
![]() |
Die Aufgabe eines Interruptsystems besteht darin, auf vorliegende Interruptanmeldungen aus der Peripherie durch Einschieben einer zugehörigen Programmfolge (ISR) in das laufende Programm zu reagieren. Die Interruptbearbeitung von peripheren Geräten stellt die Alternative zur programmgestützten Peripheriebearbeitung durch zyklische Abfrage (Polling) dar. Sie ermöglicht eine Bearbeitung auf Anforderung und belastet den Prozessor zeitlich geringer. Die Einsatzmöglichkeiten werden durch die Länge des einzuschiebenden Unterprogramms und durch Art und Anzahl der interruptfähigen Peripherieelemente bestimmt. Damit der Prozessor möglichst schnell auf eine Interruptanforderung aus der Peripherie reagieren kann, besitzt die CPU unterschiedlich priorisierte Interrupteingänge |
![]() |
Es ist die Anmeldung von nichtmaskierbaren Interrupts (NMI) und von maskierbaren Interrupts (INT) möglich. Ein NMI unterbricht grundsätzlich jede Programmabarbeitung, während ein INT softwaremäßig gesperrt werden kann und somit für die Dauer der Sperrung unwirksam bleibt. Die CPU hat die Möglichkeit der Auswertung eines Interruptvektors, der vom peripheren Systemelement im Interruptquittierungszyklus erzeugt wird und mit dessen Hilfe die Startadresse der ISR gebildet werden kann. Hierdurch kann im Programmablauf auf die Abfrage aller Peripherieelemente nach der Quelle der Interruptauslösung verzichtet werden. |
![]() |
|
![]() |
Die Auswahl des zur Anmeldung kommenden Interrupts bei mehreren
Anforderungen durch verschiedene Geräte erfolgt in der Peripherie durch
Bildung einer
Interruptprioritätenkette. Diese Prioritätenkette wird hardwaremäßig
durch Kaskadierung der interruptfähigen Elemente gebildet. Der Prozessor
wird also auch bei der Festlegung der Interruptwertigkeit nicht zusätzlich
belastet. Die Leistungsfähigkeit des Interruptbetriebs wird außerdem durch
komfortable CPUBefehle verbessert, die den Tausch der Registersätze bzw.
Registerrettungsoperationen in den Stackbereich des Hauptspeichers bewirken.
Somit kann nach Ablauf der eingeschobenen ISR der alte
Programmbearbeitungszustand wiederhergestellt werden. Die in den nachfolgenden Abschnitten angeführten Zeitangaben sowie Diskussionen zu Einschwingverhältnissen beziehen sich vordergründig, wegen dessen größerer Verbreitung, auf das 2,5-MHz-System UB880. Es werden aber alle notwendigen Zusammenhänge (Formeln, Parameter) angegeben, so dass unkompliziert auf die Verhältnisse im 4-MHz-System UA880 geschlossen werden kann. |
2. Aufgabe und Bedeutung des Interruptsystems |
![]() |
![]() |
![]() |
![]() |
Für die Bearbeitung von
Unterbrechungsanforderungen sind bei der CPU U880 zwei Interrupteingänge
vorhanden. Diese unterscheiden sich durch Priorität und Maskierbarkeit. Der
NMI (nicht maskierbarer Interrupt) besitzt die höchste Interruptpriorität
und kann per Programm nicht gesperrt werden, so dass die CPU unbedingt ihr
laufendes Programm unterbricht, wenn irgendeine periphere Einheit diesen
Interrupt anfordert. Im allgemeinen ist dieser Interrupt für sehr wichtige
Ereignisse, z. B. Ausfälle, Havarien und andere nichtvorhersehbare
Geschehnisse, reserviert. Der INT (maskierbarer Interrupt) kann per Programm gezielt gesperrt und freigegeben werden. Das kann z. B. notwendig sein, wenn zwar eine Interruptserviceroutine niedriger Priorität abläuft, aber eine Unterbrechung bestimmter Programmteile aufgrund des geforderten Echtzeitverhaltens nicht tragbar ist. Dann wird gerade dieser Programmteil durch Sperrung des maskierbaren Interrupts geschützt. Freigabe bzw. Sperrung werden in einem Flipflop zwischengespeichert. Durch die Befehle EI (ermögliche Interrupt) und DI (sperre Interrupt) wird dieses Flipflop entsprechend gesetzt bzw. rückgesetzt. |
![]() |
Der Prozessor U880 reagiert auf externe Anforderungen zur Unterbrechung
der laufenden Programmfolge mit der nachfolgend dargestellten Priorität:
Die Anforderung des Prozessorbusses durch das Steuersignal BUSRQ dient zur Ausführung einer DMA-Operation (siehe dazu Abschnitt DMAC). Dieser direkte Speicherzugriff kann nach jedem abgearbeiteten Maschinenzyklus in die Programmbearbeitung eingeschoben werden, wenn das interne BUSRQ-Flipflop zuvor gesetzt wurde. Der Zustand dieses Flipflops wird in Abhängigkeit vom Signal am BUSRQ-Eingang der CPU während der steigenden Flanke des letzten Taktes eines jeden Maschinenzyklus ermittelt. Im Gegensatz hierzu erfolgt die Auswertung der Zustände der Interruptflipflops (NMI-Flipflop, INT-Flipflop) nur am Ende des letzten Maschinenzyklus eines vollständig abgearbeiteten Befehls. Falls zu diesem Zeitpunkt ebenfalls eine Busanforderung vorliegt, wird diese vorrangig abgearbeitet. |
![]() |
Das Setzen des NMI-Flipflops erfolgt zustandsgesteuert durch das Aktivwerden des entsprechenden Signals am NMI-Eingang des Prozessors. Zum Anmelden eines nichtmaskierbaren Interrupts ist somit nur ein Impuls mit einer bestimmten Impulsbreite als NMI-Signal notwendig. Der Zustand des INT-Flipflops wird dagegen durch Auswertung des INT-Eingangs mit der letzten steigenden Systemtaktflanke des letzten Maschinenzyklusjedes Befehls bestimmt, da die Interruptanmeldung nochmals durch die peripheren Systemelemente zwischengespeichert wird. Die CPU-interne Auswertung der Interruptflipflops erfolgt ebenfalls nur zu diesem Zeitpunkt und bewirkt bei einer erkannten Anmeldung das Einschieben der entsprechenden Interruptquittierungszyklen. Die Maskierung des INT-Eingangs erfolgt durch die beiden CPU-internen Interruptfreigabeflipflops IFF1 und IFF2. Das Freigabeflipflop IFF1 wirkt hierbei als Maskierungsflipflop, und Flipflop IFF2 dient zur Protokollierung des Zustands von IFF1 in NMI-Serviceroutinen. Beide Flipflops können softwaremäßig durch die CPU-Befehle EI und DI gesetzt bzw. rückgesetzt werden. |
3. Interrupt-Verhalten der Z80-CPU |
![]() |
![]() |
![]() |
![]() |
Neben den beiden
Interrupteingängen besitzt die CPU U880 den
BUSRQ-Steuereingang für die
Busfreigabesteuerung, der insbesondere bei DMA-Betrieb zur Anwendung kommt.
Die CPU reagiert auf Unterbrechungsforderungen über diese drei
Steuereingänge (NMI,
INT,
BUSRQ) mit folgender
Rangfolge:
|
![]() |
Eine Busanforderung kann hierbei von der CPU am Ende eines jeden
Maschinenzyklus bestätigt werden. Demgegenüber erfolgt die Abfrage der
Interruptlinien NMI und
INT nur jeweils am Ende jedes
letzten Maschinenzyklus eines Befehls. Bei der Bestätigung einer
Interruptforderung (NMI bzw.
INT) fügt der Prozessor einen
Quittierungszyklus in die Befehlsbearbeitung ein. Die hierbei durchgeführten
Aktivitäten sind am Ende der Tafel unten aufgeführt. Bild unten zeigt
zusammenfassend das CPU-Verhalten bei Unterbrechungsforderungen im Flussbild. Das Zeitverhalten des Prozessors bei einer Busanforderung ist im Bild unten dargestellt. Die Einbeziehung des DMA-Betriebs in das Gesamtsystem ist im Abschnitt enthalten. Die CPU-Aktivitäten bei den Interruptbetriebsarten sind nachfolgend zusammengefasst. |
![]() |
|
![]() |
Nichtmaskierbarer Interrupt. Ein nichtmaskierbarer Interrupt wird jederzeit durch die CPU anerkannt. Der NMI kann asynchron angemeldet werden. Damit wird intern ein Auffangflipflop gesetzt. Die zeitlichen Darstellungen entsprechen in den Relationen zum Takt ansonsten dem INT und sind auf das Auffangflipflop bezogen. Wenn ein NMI anerkannt wird, führt die CPU statt der geholten Instruktion einen Rückstart zur Adresse 0066H aus. Dieser Rückstart entspricht einem implizit adressierten Unterprogrammaufruf auf spezifische Adressen der Seite 0 des Speichers. Man beachte, dass aber keine der sonst vorhandenen acht Rückstartadressen eingesetzt wird. |
4. Non Mascable Interrupt |
![]() |
![]() |
![]() |
![]() |
Der "Non Mascable Interrupt" - also der "nicht maskierbare Interrupt" von im Sinne: "nicht sperrbar", ist die Operation mit absolutem Vorrang vor allen anderen Signalen sowie auch Befehlen. Er wird nach Beendigung des letzten laufenden Befehls in jedem falle ausgeführt. |
![]() |
keinerlei softwaretechnische Vorbereitung notwendig, außer dass auf Adresse 0066H ein sinnvolles Programmstück oder ein Sprung zu selbigem existiert, welches mit ED 45H (RETN) abgeschlossen wird |
![]() |
Die Ausführung einer NMI-Anmeldung kann programmäßig nicht verhindert
werden. Die laufende Programmabarbeitung wird nach Setzen des internen
NMI-Flipflops sofort im nächsten Befehl durch die Quittierung des Interrupts
unterbrochen, vorausgesetzt, es lag keine BUSRQ-Anmeldung vor. Die Anwendung
dieser höchstwertigen Interruptanmeldung ist deshalb für Rechnerfunktionen
vorbehalten, die eine sehr schnelle Reaktion des Prozessors erfordern.
Beispiele hierfür sind das Reagieren auf bevorstehende Ausfälle der
Rechnerversorgungsspannung und die Bearbeitung von vorrangigen Informationen
aus der Peripherie (z. B. Alarmsignale). Nach Annahme einer NMI-Anmeldung schiebt der Prozessor einen NMI-Quittierungszyklus in die Befehlsabarbeitung ein. Das entsprechende Zeitverhalten an der CPU ist im Bild unten dargestellt. Der Prozessor rettet in diesem Quittierungszyklus den aktuellen Programmzählerstand (PC), verhindert automatisch die Anmeldung von maskierbaren Interrupts und setzt den Programmzähler auf die Restartadresse 0066H. Im M1-Zyklus der NMI-Quittierung erfolgt auf dem Adressbus die Ausgabedes letzten, aktuellen Programmzählerstands. Der dadurch im Hauptspeicher adressierte Befehlskode wird aber nicht mehr durch den Datenbus des Prozessors übernommen. Der Befehlsholezyklus (op-code fetch) wird somit von der CPU ignoriert. Anstelle dieses nicht bearbeiteten Befehls wird prozessorintern ein Restartbefehl zur Programmspeicherzelle 0066H ausgeführt. In den beiden nachfolgenden Maschinenzyklen (Speicherscbreibzyklen M2, M3) erfolgt deshalb die Auslagerung des zuvor ausgesendeten aktuellen Programmzählerstands (PC) in den Stackbereich des Hauptspeichers. Als neuer PC-Stand wird die Restartadresse 0066H gebildet, die im Befehlsholezyklus des nachfolgenden Befehls auf dem Adressbus ausgegeben wird. Gleichzeitig erfolgt im NMI-Quittierungszyklus die Rücksetzung des CPU-internen Interruptfreigabeflipflops IFF1, um die Anmeldung und Ausführung von maskierbaren Interrupts zu verhindern. Der Zustand des Freigabeflipflops IFF2 wird hierbei nicht verändert. Dieses Flipflop dient zur Speicherung des Zustands, den IFF1 vor der NMI-Anmeldung einnahm. Der Zustand des Freigabeflipflops IFF2 kann softwaremäßig durch Ausführung entweder des Befehls LD A, I oder des Befehls LD A, R ermittelt werden. Nach Abarbeitung eines dieser Befehle beinhaltet der Wert des Paritätsflags (Bit F2) den Zustand von IFF2. |
![]() |
|
![]() |
Die Rückkehr aus der NMI-Bearbeitungsroutine (ISR) in die unterbrochene
Programmbearbeitung erfolgt durch den Befehl RETN. Das CPU-Zeitverhalten bei
der Ausführung dieses Befehls ist im Bild 4.2.2 dargestellt. Der Prozessor
stellt bei der RETN-Befehlsabarbeitung in Hinsicht auf die Inhalte des
Programmzählers und des Stackpointers sowie auf den
Interruptbearbeitungszustand der CPU den Programmbearbeitungszustand wieder
her, der vor Anmeldung und Ausführung des nichtmaskierbaren Interrupts
vorlag. Hierzu speichert er den vor der NMI-Anmeldung aktuellen
Programmzählerstand aus dem Stackbereich des Hauptspeichers in die CPU
zurück. Durch zweimaliges Inkrementieren des Stackpointers wird ebenfalls
der ursprüngliche Wert des SP erreicht. Der PC-Stand in der
NMI-Serviceroutine geht verloren. Der Inhalt des Interruptfreigabeflipflops
IFF2 wird in das Flipflop IFF1 kopiert. Da das Freigabeflipflop IFF2 durch
die Ausführung der NMI-Quittierung und -Bearbeitung nicht automatisch
verändert wird, ergibt sich der Interruptbearbeitungszustand, der in der
unterbrochenen Programmfolge aktuell war. Voraussetzung hierfür ist jedoch,
daß in der NMI-Serviceroutine kein EI- bzw. DI-Befehl erfolgte, da diese
Befehle beide Freigabeflipflops beeinflussen. Zur erneuten Freigabe der
NMI-Anmeldeleitung erfolgt außerdem die Rücksetzung des CPU-internen
NMI-Flipflops. Die NMI-Bearbeitung ist zusammenfassend im Bild ganz unten als Flussbild dargestellt. |
![]() |
|
![]() |
5. Maskierbare Interrupts - Mode IM0 bis IM2 |
![]() |
![]() |
![]() |
![]() |
Die Ausführung einer durch
einen maskierbaren Interrupt (INT) angeforderten Programmunterbrechung kann
programmäßig gesperrt werden. Diese Maskierung geschieht durch Beeinflussung
der CPU-internen Interruptfreigabeflipflops IFF1 und IFF2. Beide
Freigabeflipflops werden durch den Befehl EI gesetzt und erlauben somit die
Ausfübrung der am INT-Eingang
des Prozessors anstehenden Interruptanmeldung. Das Rücksetzen der Flipflops
kann softwaremäßig durch den Befehl DI erfolgen. Während der Abarbeitung
dieser beiden Befehle wird prozessorintern die Interruptfreigabe gesperrt.
Das bedeutet, dass nach Ausführung dieser Befehle kein
Interruptquittierungszyklus in die Programmfolge eingeschoben werden kann.
Der Sinn dieser Maßnahme besteht darin, dass nach Interruptfreigabe (Befehl
EI) am Ende eines Unterprogramms (z. B. ISR) noch der nachfolgende
Rücksprungbefehl (RET, RETI oder RETN) zum höheren Programmniveau ausgeführt
wird. Eine etwaige Interruptanmeldung wird dann erst in diesem Programmteil
wirksam. Dadurch werden Verschachtelungen der Interruptbedienroutinen
vermieden und der Stackbereich des Speichers weniger belastet. Die Programmunterbrechung erfolgt ansonsten bei Interruptfreigabe sofort nach dem Befehl, an dessen Ende die Interruptanmeldung vom Prozessor erkannt wurde. Die CPU reagiert daraufhin durch Einschieben eines Interruptquittierungszyklus. Voraussetzung hierfür ist, dass keine Bus- oder NMI-Anforderung vorliegt, die sonst zuvor bearbeitet werden. Der Prozessor U880 kann in drei Interruptbetriebsarten (IMO, IM1, IM2) arbeiten, die sich im wesentlichen durch unterschiedliche Wirkung und Leistungsfähigkeit unterscheiden. |
||
![]() |
Die Awendung des INT-Interruptsystems ist vor allem für die schnelle und leistungsfähige Bedienung der peripheren Systemelemente vorgesehen. Die Systemelemente (PIO, SIO, CTC, DMAC) sind hardwaremäßig für die Interruptbearbeitung zugeschnitten. Sie beinhalten eine automatische Interruptprioritätenauswahl und erzeugen für die Bearbeitung in der leistungsfähigsten Interruptmode (IM2) einen Interruptvektor. Für die Interruptverarbeitung von Mikrorechnern, die ohne die peripheren Systemelemente realisiert werden, besitzt der Prozessor U880 zwei weitere Interruptbetriebsarten (IMO, IM1). Diese Interruptmoden sind insbesondere für die Verwendung spezieller Interruptschaltkreise (interrupt Controller) bzw. für die Anwendung in kleinen, sehr speziellen Mikrorechnern vorgesehen. | ||
![]() |
Die Annahme einer Interruptanforderung über die INT-Linie erfolgt durch den Prozessor, wenn das interne Interruptfreigabeflipflop IFF1 gesetzt ist und wenn an der CPU keine NMI- oder Busanforderung ansteht. Die Bearbeitung eines DMA-Betriebs oder einer nichtmaskierbaren Interruptanmeldung wird ansonsten zuvor durchgeführt. Der Prozessor U880 unterbricht nach dem Erkennen der Interruptanmeldung unter den genannten Bedingungen sofort die Programmbearbeitung und schiebt einen Interruptquittierungszyklus in die Befehlsfolge ein. Hierbei erfolgt automatisch das Rücksetzen der CPU-Freigabeflipflops (IFF1 und IFF2) und somit die Sperrung weiterer Interruptforderungen der Peripherie. Der erste Maschinenzyklus der Interruptquittierung ist durch das gleichzeitige Auftreten aktiver M1- und IORQ-Signale gekennzeichnet und wird so von dem üblichen CPU-Maschinenzyklus der Befehlsbearbeitung unterschieden. Die peripheren Elemente können somit die Interruptquittierung erkennen und entsprechend reagieren (die Systemelemente setzen das interne Interruptbearbeitungsflipflop und senden einen Interruptvektor aus). Die CPU fügt in diesen Maschinenzyklus der Quittierung automatisch zwei WAIT-Zustände ein, die ein verzögertes Aussenden des IORQ-Signals bewirken. Hierdurch wird erreicht, dass in der Peripherie eine hardwaremäßig realisierte Interruptprioritätenkette bei Auftreten des Signals IORQ einen eingeschwungenen Zustand erreicht. In Abhängigkeit vom Auftreten dieses Signals im Interruptquittierungszyklus erfolgt vom ausgewählten, priorisierten Systemelement das Belegen des Datenbusses mit dem Interruptvektor. Bei anders realisierten Peripherieelementen kann in Abhängigkeit vom IORQ-Signal ebenfalls die Übernahme des Datenbusses vorgenommen werden. Die Voraussetzung für die Belegung des Datenbusses ist aber, dass durch alle peripheren Elemente bei aktivem M1-Signal der Interruptanmeldungszustand nicht verändert werden darf. Die weitere Reaktion des Prozessors U880 in diesem Zyklus ist nun von der vorgewählten Interruptbetriebsart abhängig. Diese Interruptmoden können softwaremäßig durch die Befehle IMO, IM1 und IM2 gewählt werden. Nach Anlegen eines RESET-Signals an die CPU nimmt die IS U880 automatisch die Betriebsart IM0 ein. Das Einstellen der Interruptbetriebsart erfolgt üblicherweise im Initialisierungsteil des Programms. Aufgrund der unterschiedlichen CPU-Reaktion und der spezifischen Peripherie bei den verschiedenen Interruptmoden kann i. allg. die Interruptbetriebsart im Programmablauf nicht geändert werden. | ||
![]() |
Die Interruptbetriebsart IM0 der CPU U880 dient zur Ausführung eines Befehlskodes, den das interruptanmeldende periphere Element im Interruptquittierungszyklus auf den Datenbus legt. Das erste Byte (op-code fetch) der Instruktion wird hierbei in dem durch aktive M1- und IORQ-Signale gekennzeichneten Maschinenzyklus der Interruptquittierung vom Datenbus übernommen. Erfordert die Befehlsausführung weitere Befehls- bzw. Datenzyklen, werden diese als gewöhnliche Maschinenzyklen (memory read, memory write, input, output) ausgeführt. Sie haben jedoch die Besonderheit, dass der Befehlszählerstand (PC) jeweils nicht erhöht wird. Der PC-Stand vor der Interruptanmeldung bleibt somit erhalten. Da dieser ungültige Programmzählerstand auf dem Adressbus ausgegeben wird, muss hardwaremäßig abgesichert werden, dass keine Fehlreaktionen im Hauptspeicher bzw. in der Peripherie ausgelöst werden. Bei Anwendung dieser Interruptbetriebsart bietet sich der RST-Befehl (restart) zur Ausführung besonders an, da er ein sehr leistungsfähiger Einbytebefehl ist. Bei hardwaremäßiger Realisierung der Datenbusübernahme im Interruptquittierungszyklus bleibt bei Verwendung dieses Befehls der Aufwand in Grenzen. Zudem können durch Spezifizierung der Bits D3, D4 und D5 des Befehlskodes acht unterschiedliche Unterprogrammstartadressen (0000H, 0008H, 0010H, 0018H, 0020H, 0028H, 0030H, 0038H) aufgerufen werden. Die Interruptbearbeitung in dieser Mode (IM0) ist zusammenfassend im Bild unten dargestellt. Sie wirkt ähnlich wie die Interruptbearbeitung des Prozessors U808. Diese Interruptbetriebsart ermöglicht deshalb die Nutzung evtl. vorhandener peripherer Einheiten des Systems U808. | ||
![]() |
|||
![]() |
Die Interruptbetriebsart IM1 des Prozessors U880 realisiert eine einfache, ohne periphere Unterstützung wirkende Interruptbearbeitung durch Ausführen eines Programmrücksprungs zur Speicherplatzadresse 0038H. Hierbei wird automatisch der aktuelle Programmzählerstand durch Laden in den Stackbereich des Speichers gerettet. Im Bild unten ist das Zeitverhalten des Interruptquittierungszyklus in dieser Interruptbetriebsart dargestellt. Der Prozessor reagiert in der Mode IM 1 ähnlich wie bei der Bearbeitung einer NMI-Anforderung. Der Programmzähler wird jedoch auf den Wert PC = 0038H gesetzt. Die Anwendung dieser Interruptbetriebsart ist deshalb in Mikrorechnern denkbar, die ohne periphere Systemelemente realisiert werden und die nur zwei Interruptebenen benötigen. Als erste Ebene könnte dann der nichtmaskierbare Interrupt verwendet werden, während der in der Mode IM1 betriebene maskierbare Interrupt die zweite Interruptebene darstellt. Die Interruptbearbeitung in der Betriebsart IM 1 ist zusammenfassend im Bild unten dargestellt. | ||
![]() |
|
||
![]() |
Die Interruptbetriebsart IM2 der CPU U880 ist die leistungsfähigste der drei genannten Moden. Sie führt einen indirekt adressierten CALL-Befehl zu einer beliebigen Programmspeicherzelle im Adressierungsraum aus. Der zur indirekten Adressierung benötigte 16-bit-Pointer wird hierbei aus dem I-Register der CPU (H-Byte) und einem Interruptvektor (L-Byte) gebildet. Dieser Interruptvektor wird im M1-Maschinenzyklus der Interruptquittierung vom Prozessor gelesen. Er muss deshalb zu diesem Zeitpunkt von dem priorisierten, interruptanmeldenden peripheren Gerät auf den Systemdatenbus gelegt werden. Das entsprechende Zeitverhalten ist im Bild unten dargestellt. Die Leistungsfähigkeit dieser Interruptmode ist vor allem dadurch gegeben, dass die peripheren Systemelemente Z80-PIO, Z80-SIO, Z80-CTC, Z80-DMAC den angeforderten Interruptvektor automatisch bei der Quittierung ihrer Interruptanmeldungen aussenden. Somit ist hierfür kein zusätzlicher Hardwareaufwand notwendig. Des weiteren gestattet die Interruptmode IM2 die Zuordnung von Interruptbearbeitungsroutinen (ISR) zu den einzelnen interruptfähigen peripheren Systemelementen. Wegen der Spezifizierung der Interruptvektoren durch die Peripherie können in einem Rechnersystem bei unverändertem I-Register der CPU bis zu 128 verschiedene ISR aufgerufen werden. Hierdurch wird Programmaufwand zur Feststellung des interruptanmeldenden Geräts vermieden. Die Reaktion des Prozessors auf die Interruptanmeldung erfolgt deshalb sehr schnell und leistungsfähig. Die Bearbeitung dieser Interruptbetriebsart durch die CPU ist zusammenfassend im Bild unten rechts als Flussbild dargestellt. Da die effektive Anwendung der Interruptmode IM2 durch die Reaktionen der Systemperipherie unterstützt wird, werden die Haupteigenschaften der peripheren Elemente bei der Interruptbearbeitung in dieser Interruptbetriebsart im nachfolgenden Abschnitt näher beschrieben. | ||
![]() |
|
6. Interruptprioritätenkette |
![]() |
![]() |
![]() |
![]() |
Die Interruptstrukturen aller peripheren Systemelemente beinhalten eine automatisch wirkende Logik zur Auswahl der höchstwertigen Interruptanforderung. Hierzu werden sämtliche interruptfähige Peripherieelemente mit Hilfe ihrer IEI- und IEO-Anschlüsse in Reihe geschaltet. In dieser Kaskadierungskette (daisy chain) erhält das vorderste Element H-Pegel am IEI-Eingang direkt von der Versorgungsspannung. Dieser Pegel setzt sich in der gesamten Kette fort, vorausgesetzt, dass kein peripheres Gerät eine Interruptforderung aus der Peripherie empfängt. Sinngemäß besteht die Kaskadierungskette auch intern in den peripheren Systemelementen, indem die einzelnen Kanäle über eine IEI-IEO-Linie in Reihe geschaltet sind. Die Priorität der peripheren Systemelemente bzw. deren Kanäle ist in der IEI-IEO-Kette somit durch die Lage dieser Elemente festgelegt. Weiter vorn liegende Geräte haben immer die höhere Anmeldepriorität. Der höchstwertige Kanal (Port A bei PIO und SIO, Kanal 0 des CTC) des ersten Elements in der Kette kann durch eine freigegebene Interruptanforderung die gesamte Prioritätenkette blockieren, da sein IEI-Eingang immer an H-Potential liegt. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
Die Kaskadierungskette wirkt H-aktiv. Somit kann ein peripheres Systemelement, das am IEI-Eingang einen H-Pegel empfängt, eine anstehende Interruptforderung bei gesetztem Interruptfreigabeflipflop des Elements an die CPU weiterleiten. Es aktiviert seinen INT-Ausgang. Der IEO-Ausgang wird gleichzeitig inaktiv und bewirkt das Durchschleifen des L-Pegels in der nachfolgenden Kette. Dieser L-Pegel bewirkt nun bei den nachfolgenden Peripherieelementen, dass eine anstehende Interruptforderung nicht zum Prozessor weitergeleitet wird. Nichtpriorisierte Elemente können somit Programmabläufe (ISR) von höherwertigen Peripherieelementen nicht unterbrechen. Die Interruptquittierungslogik der peripheren Systemelemente wirkt abhängig vom Interruptanmelde- und Interruptquittierungszustand des jeweiligen Geräts. Ein interruptanmeldendes niederwertigeres Element wird durch die Interruptanforderung eines höherwertigeren Peripherieelements veranlasst, seine Anmeldung zurückzunehmen. Die Interruptanmeldung des in der Prioritätenkette weiter vorn liegenden Geräts wird bei Interruptfreigabe des Prozessors wirksam; die CPU schiebt die zugehörige ISR in den Programmablauf ein. Nach Rückkehr des Prozessors aus dieser Routine in das zuvor aktuelle Programmniveau erfolgt dann die erneute Anmeldung des niederwertigeren (zwischengespeicherten) Geräteinterrupts, da der Programmbearbeitungszustand des priorisierten Elements rückgesetzt wurde. Das niederwertigere Peripherieelement empfängt H-Pegel am Freigabeeingang IEI. Andererseits kann ein höherwertigeres peripheres Systemelement bei einer quittierten Interruptanmeldung eines niederwertigeren seine Interruptanmeldung an die CPU weitergeben und die Interruptprioritätenkette durch Durchschleifen eines L-Signals blockieren. Diese höherpriorisierte Interruptanmeldung kann aber nur wirksam werden, wenn in der bearbeiteten ISR die Interruptfreigabe des Prozessors vorgenommen wurde (durch Befehl EI). In diesem Fall wird die ISR des höherwertigeren Peripherieelements in den Programmablauf eingeschoben. Es erfolgt eine Verschachtelung der Interruptbearbeitungsroutinen. Nach Beendigung dieser (höherwertigen) ISR schließt sich die weitere Bearbeitung der unterbrochenen niederwertigeren Bearbeitungsroutine an. Anderenfalls aber (prozessorseitige Interruptsperrung in der ISR des niederwertigeren Geräts) wird zuerst die niederwertigere Serviceroutine beendet. Nach Rückkehr in die zuvor unterbrochene Programmabarbeitung kann bei dortiger Interruptfreigabe des Prozessors die nach wie vor anstehende Interruptanmeldung des höherwertigeren peripheren Elements wirksam werden. Damit in diesem Fall das niederwertigere Peripherieelement dennoch beim Rückkehrbefehl RETI als aktives, interruptbearbeitendes Element ermittelt werden kann, müssen höherpriorisierte Peripherieelemente mit nichtquittierten Interruptanmeldungen ihren IEO-Ausgang während der Ausführung des RETI-Befehls (Befehlsbytefolge EDH, 4DH) freigeben. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
Die Interruptkaskadierungskette dient also zur systemweiten Auswahl des jeweils höchstwertigen interruptanfordernden peripheren Systemelements. Hierbei ist dieses höchstwertige Element während der Interruptquittierung des Prozessors durch die Signalverhältnisse am IEI-Eingang (H-Pegel) und am IEO-Ausgang (L-Pegel) gekennzeichnet. Von diesen Pegelverhältnissen wird im Interruptquittierungszyklus das Setzen des Interruptbearbeitungsflipflops des Systemelements abgeleitet sowie die Aussendung des Interruptvektors ausgelöst. Bei der Rückkehr aus der Interruptbearbeitungsroutine wird mit Hilfe der Kaskadierungskette das höchstwertige in der Interruptbearbeitung befindliche (Interruptbearbeitungsflipflop gesetzt) Peripherieelement ermittelt. Dieses Element ist während der Abarbeitung des RETI-Befehls durch H-Pegel am IEI-Eingang und L-Pegel am IEO-Ausgang gekennzeichnet. Es kann somit seinen Bearbeitungszustand zurücksetzen und die nachfolgende IEI-IEO-Linie freigeben. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
In Mikrorechnern mit vielen peripheren Systemelementen (mehr als vier)
treten beim Einschwingvorgang der Kaskadierungskette im
Interruptquittierungszyklus Zeitprobleme auf. Für das Einschwingen der Kette
steht die Zeit zwischen dem Aktivwerden des Ml-Signals und dem Aktivwerden
des IORQ-Signals zur Verfügung. Die Zeit zwischen dem Aktivwerden beträgt im
System UB880 bei der maximalen Systemtaktfrequenz (fc = 2,5 MHz) und unter
Worst-case-Bedingungen tn = 870 ns (mögliche Verzögerung durch
Steuerbustreiber nicht berücksichtigt). Demgegenüber tritt an einem
Peripherieelement, das interruptmäßig passiv ist (keine Anmeldung, keine
Bearbeitung), beim Durchschleifen eines L-Pegels von IEI nach IEO eine
Verzögerungszeit von tDL(IO) = 190 ns auf. Beim interruptanmeldenden
peripheren Element kann weiterhin das Rücksetzen seines
Interruptfreigabeausgangs IEO gegenüber dem Aktivwerden des
M1 -Signals um
maximal tDL(IO) = 300 ns verzögert werden, wenn die Interruptforderung
gerade kurz vor Eintreffen des Ml-Signals im Element ausgelöst wurde. Des
weiteren ist eine Voreinstellzeit am Eingang IEI des letzten peripheren
Systemelements in der Kette vor Eintreffen des aktivierten
IORQ-Signals zu
berücksichtigen, damit eine evtl. anliegende niederwertigere
Interruptforderung dieses Elements noch gesperrt werden kann. Diese
Voreinstellzeit beträgt ts(IEI) = 140 ns. Die wirksame Zeit für den
Einschwingvorgang an den passiven Peripherieelementen beträgt deshalb nur
t
= 430 ns. In dieser Zeit muss das Durchschleifen des L-Pegels durch n - 2
Elemente (n Anzahl aller in der Kette liegenden Peripherieelemente des
Mikrorechners) gesichert werden. Für große Mikrorechner muss deshalb eine
Hardwarelösung geschaffen werden, die ein korrektes Einschwingen der
IEI-IEO-Linie gewährleistet. Prinzipiell kann hierbei entweder die wirksame
Zeit für den Einschwingvorgang vergrößert werden, oder die Verzögerungszeit
der peripheren Elemente muss verringert werden. Im Bild unten ist die Logik
eines WAIT-Generators dargestellt, der im
M1-Maschinenzyklus der Interruptquittierung durch Hardwareprogrammierung (Brücken) bis zu acht
WAIT-Zustände erzeugt. Gleichzeitig wird durch Torung ein
IORQ-Signal für
die Peripherie gebildet, das gegenüber dem CPU-Signal
IORQ um tD = 400 bis
3200 ns (bei Systemtaktfrequenz fc = 2,5 MHz) verzögert wird. Die Zeit für
den Einschwingvorgang der Kaskadierungskette kann somit entsprechend der
vorhandenen Anzahl von Peripheriebauelementen erweitert werden. In Tafel
unten ist der Zusammenhang zwischen Lage der Brücken, Zahl der hierdurch
erzeugten WAIT-Zustände und Anzahl der einzusetzenden interruptfähigen
Peripherieelemente ausgewiesen. Der Vorteil der im Bild unten dargestellten
Hardwaremodifikation besteht darin, dass der notwendige Schaltungsaufwand
nur einmal, üblicherweise auf der CPU-Leiterkarte eines Rechners, für das
gesamte System erforderlich ist. Die Einfügung der WAIT-Zustände beeinflusst
die Leistungsfähigkeit des Mikrorechners selbst bei vielen peripheren
Systemelementen und bei vielen Interruptreaktionen i. allg. nur wenig. Bild
ganz unten zeigt das Zeitverhalten des angepassten M1-Zyklus der Interruptquittierung. Die alternative Lösung für die Absicherung des Einschwingvorgangs der Interruptkaskadierungskette besteht in der Verminderung der Durchlaufzeiten des L-Pegels bei den peripheren Elementen. Da die Kette H-aktiv wirkt, muss zur „vorausschauenden" Weitergabe des L-Pegels die AND-Verknüpfung zwischen den IEI- und IEO-Linien angewendet werden. Im Bild ganz unten ist diese einfachste Möglichkeit der Realisierung einer Umgehungslogik (look ahead logic) dargestellt. Die Verzögerungszeit beim Durchschleifen des L-Pegels wird nur noch durch die Durchlaufzeiten der Gatter bestimmt und beträgt tD = 30 ns (1 Gatter D 100, 1 Inverter D204) bzw. tD = 35 ns (2 Gatter D 100). Bei der Systemtaktfrequenz fc = 2,5 MHz können also hierbei ohne Anwendung weiterer Maßnahmen bis zu 16 Peripherieelemente eingesetzt werden (14 bei Verwendung von ½ D 100). Im Bild ganz unten ist eine etwas veränderte Schaltungsanordnung der Umgehungslogik angegeben, die den Einsatz von maximal 29 Systemelementen erlaubt. Die Schaltungsverzögerung wird durch die Zusammenfassung der Elemente in Vierergruppen verringert. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
WAIT-Generator zur Verlängerung der Einschwingzeit der Interrup-Prioritätenkette |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
TW - durch die Logik nach Bild oben erzeugte (nicht automatisch eingefügte) WAIT-Zustände Tafel Wertigkeit der Brücken in der WAIT-Logik nach Bild oben |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
Bei der praktischen Realisierung eines Mikrorechners bzw. eines -rechnersystems ist unter diesen Gesichtspunkten abzuschätzen, wie viele periphere Elemente eingesetzt werden müssen. Hierbei ist zu berücksichtigen, dass z. B. die Zusammenfassung der Elemente in Vierergruppen meist nicht sinnvoll ist. Im Vordergrund steht die funktionelle Zusammenfassung der Elemente, da wegen der Verdrahtungsstruktur der Mikrorechner (Busstruktur; einheitliche gedruckte Rückseitenverdrahtung od. dgl.) für Steckeinheiten je ein IEI- und IEO-Anschluss vorteilhaft ist. Der Einsatz einer kombinierten Hardwarelösung ist deshalb beim Aufbau sehr großer Mikrorechner ebenfalls denkbar. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
|
7. Interrupt-Anmeldung und -quittierung |
![]() |
![]() |
![]() |
![]() |
Ein peripheres Systemelement setzt bei einer Interruptforderung ein internes Anmeldeflipflop. Der aktive Zustand dieses Flipflops wird unter Interruptfreigabebedingungen des Elements (Interruptfreigabeflipflop des Peripherieelements gesetzt, IEI-Linie aktiviert) über die Interruptanmeldeleitung INT an den Prozessor weitergeleitet. Bei Interruptfreigabe der CPU erfolgt die Auswertung des INT-Eingangs am Ende des in Bearbeitung befindlichen Befehls. Daraufhin wird ein Interruptquittierungszyklus in den Befehlsablauf eingeschoben. In der Zeit zwischen Auswertung der INT-Linie durch die CPU (steigende Systemtaktflanke des letzten T-Zustands) und dem Aktivwerden des M1Signals des Quittierungszyklus (s. Bild unten) können aber noch weitere periphere Elemente eine Interruptanmeldung an die CPU aussenden. Die den Quittierungszyklus anfordernde und die in diesem Zyklus quittierte Interruptanmeldung müssen daher nicht identisch sein. Die Auswahl, welche Anmeldung quittiert wird, erfolgt durch Feststellung der Priorität in der Kaskadierungskette. Beim Aktivwerden des IORQ-Steuersignals der Interruptquittierung hat diese Prioritätenkette einen eingeschwungenen Zustand. Das höchstwertige, interruptanmeldende Peripherieelement weist die Signalkonfiguration IEI = H und IEO = L auf. Diese Konfiguration bewirkt im Quittierungszyklus, dass das Element die Interruptanmeldung auf der INT-Linie zurücknimmt, ein internes Interruptbearbeitungsflipflop setzt und das entsprechende Interruptvektorregister auf den Datenbus schaltet. |
||
![]() |
Anmeldung und Quittierung Die Freigabe der INT-Anmeldelinie durch das quittierte Peripherieelement geschieht durch Rücksetzung des internen Interruptanmeldeflipflops. Das erneute Setzen dieses Flipflops wird aber im Element für die Zeitdauer verhindert, in der es sich im Interruptbearbeitungszustand befindet, also sein Bearbeitungsflipflop gesetzt ist. Somit wird verhindert, dass ein Peripherieelement bei einer erneuten Interruptforderung nicht die eigene ISR unterbrechen kann (vorausgesetzt, der Befehl EI erfolgte in dieser ISR). Es sind nur Verschachtelungen der ISR durch interruptmäßig höherpriorisierte Elemente möglich. Erst nach Verlassen des Interruptbearbeitungszustands kann ein peripheres Systemelement eine anhängige Interruptforderung wieder durch.Setzen des Anmeldeflipflops an den CPU-Eingang INT weitergeben. Es erfolgt bei Interruptfreigabe des Prozessors dann ein erneutes Einschieben eines Interruptquittierungszyklus. Ist das betrachtete Element nach wie vor das höchstwertige, so erfolgt wiederum der Aufruf seiner ISR. |
||
![]() |
Das Setzen des internen Interruptbearbeitungsflipflops bei der
Interruptquittierung des priorisierten Peripherieelements bewirkt somit eine
Sperrung neuer anhängiger Interruptforderungen dieses Elements. Gleichzeitig
wird vom Zustand dieses Flipflops das Aussenden des L-Pegels am
Freigabeausgang IEO abgeleitet. Dieser Pegel bleibt für die gesamte Dauer
der Interruptbearbeitung des Elements erhalten. Eine weitere Funktion des Interruptquittierungszyklus der CPU besteht darin, den Interruptvektor des anmeldenden und des quittierten Systemelements anzufordern. Das Element (Signalkonfiguration IEI = H, IEO = L) sendet den Vektor nach Empfang des aktiven IORQ-Signals auf dem Datenbus aus. Die prozessorseitige Auswertung der Busbelegung geschieht mit der steigenden Flanke des T3-Systemtaktzustands im M1-Maschinenzyklus der Quittierung (Bild unten). Da in großen Mikrorechnern üblicherweise sowohl CPU-seitig als auch peripherieseitig Datenbustreiber eingesetzt werden, muss eine ordnungsgemäße Richtungsumschaltung dieser Treiber im Interruptquittierungszyklus vorgesehen werden. Treten bei dieser entsprechenden Selektierung Zeitprobleme auf, so kann das Lesen des Vektors durch den Prozessor verzögert werden, indem ein WAIT-Zustand (bzw. mehrere Zustände) im Interruptquittierungszyklus eingefügt wird. Bild unten zeigt einen entsprechenden Schaltungsvorschlag. |
||
![]() |
Nach dem Lesen des Interruptvektors im Ml-Maschinenzyklus der
Interruptquittierung führt die CPU die Rette-Aktion des Programmzählerstands
aus. Hierzu arbeitet sie zwei Speicherschreibzyklen (M2, M3) ab, in denen H-
und L-Byte des PC in den durch SP-1 und SP-2 adressierten Stackbereich des
Schreib/Lese-Speichers abgelegt werden. Im weiteren Ablauf des Quittierungszyklus folgen dann zwei weitere Maschinenzyklen (M4, M5; Speicherlesezyklen), die zur Bildung der Unterprogrammstartadresse dienen. In diesen M-Zyklen liest der Prozessor L- und H-Byte der ISR-Startadresse. Zur Adressierung dieser beiden Speicherzellen sendet die CPU im M4-Zyklus auf dem niederwertigeren Adreßbus (A0 ... A7) den Interruptvektor und auf dem höherwertigeren Bus (A8 bis A15) den Inhalt des I-Registers aus. Im nachfolgenden Zyklus (M5) erfolgt die Aussendung des inkrementierten Pointers. Prinzipiell wirkt also der Interruptquittierungszyklus wie ein CALL-Befehl, mit der Ausnahme, dass der neugebildete Stand indirekt adressiert wird. Mit diesem Programmzählerstand erfolgt dann das Lesen des nächsten Befehlsbytes. Die ISR des interruptauslösenden peripheren Systemelements wird bearbeitet. |
||
![]() |
Rückkehr aus Bearbeitung
Nach Abarbeitung der Interruptbearbeitungsroutine (ISR) eines peripheren
Systemelements erfolgt der Rücksprung in das zuvor unterbrochene
Programmniveau durch Ausführung des Befehls RETI. Prozessorseitig wird
hierdurch der aktuelle, vor der Programmunterbrechung gültige
Programmzählerstand (PC) aus dem Stackbereich des Schreib/Lese-Speichers
rückgespeichert. Der Programmbearbeitungszustand vor Einschachtelung der ISR
wird somit bezüglich PC- und SP-Stand wiederhergestellt. Das entsprechende
CPU-Zeitverhalten hierbei ist im Bild unten. dargestellt. Die Ausführung des
RETI-Befehls hat also für den Prozessor die gleiche Wirkung wie die
Abarbeitung des Rückkehrbefehls RET. Die Unterschiede der beiden Befehle
sind die verschiedenen OpKode und die Befehlsausführung (Einbytebefehl RET,
Zweibytebefehl RETI). |
||
![]() |
AIT-Generator zur Verlängerung des Lesezyklus des Interruptvektors | ||
![]() |
Nach Dekodierung der korrekten
Bytefolge des RETI-Befehls wird das Interruptbearbeitungsflipflop des
höchstwertigen sich in Bearbeitung befindlichen peripheren Systemelements
rückgesetzt. Die während der Interruptbearbeitung blockierte IEO-Linie wird
hierdurch vom Element freigegeben, d. h., der logische Pegel an IEO folgt
dem Pegel am Freigabeeingang IEI. In der Peripherie erfolgt die Auswahl,
welches Peripherieelement während der RETI-Ausführung den höchstwertigen
Interruptbearbeitungszustand aufweist, ähnlich wie bei der
Interruptquittierung durch einen Einschwingvorgang der
IEIIEO-Prioritätenkette. Hierbei muss dieses höchstwertige bearbeitete
Systemelement wieder die Signalkonfiguration IEI = H und IEO = L aufweisen. In der durch den RETI-Befehl abgeschlossenen ISR bestand aber die Möglichkeit, dass höchstwertigere periphere Elemente Interruptanmeldungen an die CPU weitergeben, die nicht quittiert wurden und somit keine weiteren Programmverschachtelungen bewirkten. |
||
![]() |
|||
![]() |
Diese höherwertigeren Anmeldungen werden vom Prozessor dann nicht quittiert, wenn die Interruptsperrung der CPU noch vorliegt (Befehl EI erfolgte nicht) oder, anderen-, falls, wenn die Interruptforderung erst kurz vor dem RETI-Befehl (nach der letzten steigenden Systemtaktflanke des letzten Befehls vor RETI) an der CPU eintraf. Derartige "nichtquittierte Interruptanmeldungen" sperren aber die nachfolgende Prioritätenkette, und das höchstwertige quittierte Peripherieelement empfängt L-Pegel am Freigabeeingang IEI. Damit nun dieses Element am Ende des RETI-Befehls die korrekte Signalkonfiguration (IEI = H, IEO = L) empfangen und seinen Interruptbearbeitungszustand verlassen kann, müssen alle nichtquittierten interruptfordernden Systemelemente die IEII-EO-Prioritätenkette für die Dauer von RETI freigeben. Der aktive H-Pegel kann dann in der Kette bis zum IEI-Eingang des höchstwertigen quittierten Elements durchgeschaltet werden. Damit für diesen Einschwingvorgang der Kette Zeit gewonnen wird, geschieht die Freigabe der Prioritätenkette durch die nichtquittierten interruptfordernden Elemente nach Erkennen des RETI-Steuerbytes EDH. Da weitere U880-Befehle dieses Steuerbyte aufweisen, erfolgt der H-Einschwingvorgang nicht nur bei Ausführung des RETI-Befehls. Nach Auswertung des nachfolgenden (von EDH verschiedenen) Befehlsbytes werden die Freigabeausgänge der nichtquittierten Elemente wieder auf L-Pegel geschaltet. Das zugehörige Zeitverhalten ist im Bild unten dargestellt. Folgt auf das Steuerbyte EDH das Befehlsbyte 4DH, so verlässt das höchstwertige, quittierte Systemelement den Interruptbearbeitungszustand, indem sein internes Interruptbearbeitungsflipflop zurückgesetzt wird. Das Zeitverhalten der peripheren Systemelemente bei Rückkehr aus der Interruptbearbeitung zeigt Bild unten. | ||
![]() |
|
||
![]() |
In Mikrorechnern mit mehreren interruptfähigen peripheren Systemelementen können Zeitprobleme des Einschwingvorgangs der Prioritätenkette bei Verlassen des Interruptbearbeitungszustands auftreten. Für den Fall, dass höherwertigere Peripherieelemente nichtquittierte Interruptforderungen aufweisen, müssen diese Elemente nach Empfang des ersten RETI-Bytes EDH die Blockierung ihrer IEO-Freigabeausgänge aufheben. Der aktive H-Pegel kann sich daraufhin bis zum Eingang IEI des höchstwertigen quittierten Elements fortsetzen. Dieses sich noch in Interruptbearbeitung befindende Systemelement muß aber das Signal IEI = H spätestens kurz vor der internen Dekodierung des zweiten RETI-Bytes 4DH empfangen, damit es als höchstwertiges bearbeitetes Element gekennzeichnet ist und sein Bearbeitungsflipflop rücksetzt. Die zulässige Zeit für den IEI-IEOEinschwingvorgang bei RETI beträgt im System UB880 unter Worst-case-Bedingungen tw2 = 1000 ns. Sie setzt sich nach Gleichung unten aus der Zeitdifferenz zwischen der elementeinternen Dekodierung der beiden RETI-Bytes, der Verzögerungszeit des IEO-Signals am Ausgang des nichtquittierten Elements und der Voreinstellzeit des eintreffenden Prioritätssignals am Freigabeeingang IEI des bearbeiteten Peripherieelements zusammen: | ||
![]() |
tw2
= (4 + m) tC - tDH2
- ts2
Diese Einschwingzeit reicht je nach Realisierung des L-Einschwingens der Prioritätenkette (bei Interruptquittierung) und abhängig vom Typ der eingesetzten peripheren Systemelemente für Kettenlängen bis sechs Peripherieelemente aus. Diese Anzahl der im Mikrorechner ohne Zusatzlogik einsetzbaren Elemente kann mit Gl.(4.2.2) ermittelt werden tw2 > (n - 2) (tDH(IO) -}' tDTTL); n Anzahl der Elemente in der IEI-IEO-Kette tDH(Io) IEO-Verzögerungszeit auf H von IEI (tDH(ID) = 210 ns bei UB855, UB857, UB858; tDH(1() = 250 ns bei UB856) tDTTL TTL-Verzögerungszeit bei Verwendung einer Umgehungslogik (tDTTL = 30... 35 ns) tw2 Zeit für H-Einschwingvorgang. |
||
![]() |
Beim Einsatz einer größeren Anzahl
peripherer Elemente in U880-Mikrorechnern ist somit eine Zusatzlogik
erforderlich, die ein korrektes Einschwingen der Prioritätenkette bei der
Rücksetzung der Interruptbearbeitung gewährleistet. Prinzipiell können
Schaltungen angewendet werden, die entweder die zulässige H-Einschwingzeit
der Kette vergrößern oder die Durchlaufzeiten in den höherwertigeren
Systemelementen vermindern. Bei dem peripheren Systemelement SIO besteht
neben der dargestellten systemeigenen Interruptrückkehr durch den
RETI-Befehl eine weitere, spezifische Rückkehrmöglichkeit. Diese besteht
darin, dass in der speziellen der jeweiligen SIO zugehörigen ISR ein
Steuerbefehl an dieses Element ausgesendet wird, der unabhängig vom Zustand
des IEI-Eingangs der SIO, aber in Auswertung der SIO-internen
Prioritätenkette das höchstwertige gesetzte Interruptbearbeitungsflipflop
rücksetzt. Die Programmrückkehr muß danach durch den RET-Befehl erfolgen.
Voraussetzung für diese Art der Interruptrückkehr ist aber, daß die CPU in
Mode IM2 betrieben wird, da gerätezugehörige ISR (zumindest bei der SIO)
erforderlich sind (vektorierte Interrupts). Die Anwendung dieser
SIO-spezifischen Rückkehr kann den Hardwareaufwand in mittleren
Mikrorechnern verringern, wenn insgesamt weniger als sechs PIO- bzw.
CTC-Elemente eingesetzt werden. Der DMAC bietet eine ähnliche Möglichkeit, anhängige oder sich in Bearbeitung befindliche Interrupts mit Hilfe von Kommandosequenzen rückzusetzen. |
8. Verwandte Themen |
![]() |
![]() |
![]() |
|
Was ist alles mit dem Betriebssystem eines Microcomputers verwandt? Antwort: faktisch der gesamte Bereich der Digitalelektronik und sowieso die gesamte Technik der Software-Technologie der Vergangenheit, Gegenwart sowie zumindest der nächsten Zukunft. | ||||||||||||||||||
![]() |
|
![]() zur Hauptseite |
© Samuel-von-Pufendorf-Gymnasium Flöha | © Frank Rost im Mai 2007 |
... dieser Text wurde nach den Regeln irgendeiner Rechtschreibreform verfasst - ich hab' irgendwann einmal beschlossen, an diesem Zirkus nicht mehr teilzunehmen ;-) „Dieses Land braucht eine Steuerreform, dieses Land braucht eine Rentenreform - wir schreiben Schiffahrt mit drei „f“!“ Diddi Hallervorden, dt. Komiker und Kabarettist |