Artikel pedia
| Home | Kontakt | Artikel einreichen | Oberseite 50 artikel | Oberseite 50 autors
 
 


Artikel kategorien
Letztes fugte hinzu
    Ms-access

   Instrumentation + schnittstellen

   Pc tuning - volle kraft voraus für ihr system

   Informatorische grundlagen

   Javascript

   Interne sortieralgorithmen - der kern der sache

   Plotter und sonstige drucker

   Frage 20 (rössl priska)

   Internet - programmierung

   Monitore

   Semesterarbeit und spezialgebiet für informatik

   Erörterungs zum thema

   Inhaltsverzeichnis

   Einführung in die entwicklung ganzheitlicher informationssysteme:

   Titel dokument
alle kategorien

  Erlnov95__enthält weitere informationen

Interrupts              1 Allgemein 2 1.1 Polling 2 1.2 Interrupts 2 1.3 Abarbeiten einer Unterbrechung 2 1.3.1 Abfragetechnik 3 1.

3.2 Daisy-chain Technik 3 1.3.3 Interruptvektoren 3 1.3.4 Interruptcontroller 3 1.

4 Interruptantwort eines 8085 Prozessor 4 1.5 Interruptantwort eines 8086 Prozessors 5 2 Interruptquellen der 8051 Familie 5 2.1 Externe Interrupts INT0, INT1 6 2.2 Timer 0 bzw. Timer 1 Overflow 6 2.3 Serielles Port SIO0 7 3 Interrupt Verarbeitung 8 3.

1 Interrupt Response Time 8 3.2 Interruptablaufdiagramm 10 4 Interruptanwendungen 11 4.1 Einzelschrittbetrieb 11 4.2 Simulieren eines dritten Prioritätslevels 11 5 Interrupt Arbeitsblatt 12 6 Erläuterungen zur Interrupt Logik 13                                               Allgemein Prinzipiell gibt es zwei Möglichkeiten um ein Peripheriegerät zu bedienen. Entweder durch Polling, d.h.

ständiges Abfragen der Geräte, oder durch einen Interrupt, bei dem sich das Gerät selbst meldet, wenn es bedient werden muß.   POLLING Die Abfragetechnik oder Polling hat zwei Einschränkungen: Prozessorzeit wird verschwendet beim unnötigen Durchtesten des Status aller peripheren Einheiten in jedem Durchlauf. Sie ist vom Prinzip her langsam, da der Status aller E/A-Einheiten getestet werden muß, bevor man zur Abarbeitung einer bestimmten Anfrage kommt. Das kann in einem Echtzeitsystem, in dem man eine Peripherieeinheit, in einem festgelegtem Zeitabschnitt bearbeitet werden muß, echte Schwierigkeiten bereiten. Insbesondere, wenn schnelle Peripherieeinheiten an das System angeschlossen sind, kann die Abfragetechnik einfach nicht schnell genug sein, um noch eine rechtzeitige Bearbeitung der Anfrage zu gewährleisten. Die Abfragetechnik ist ein synchroner Mechanismus, bei dem die einzelnen Einheiten nacheinander bearbeitet werden.

  INTERRUPTS Programmunterbrechungen, kurz Unterbrechungen (Interrupts), sind ein asynchroner Mechanismus. Jede E/A-Einheit oder ihr Steuerbaustein ist an eine Unterbrechungsleitung angeschlossen. Diese Leitung überträgt eine Unterbrechungsanforderung (interrupt request) an den Mikroprozessor. Jedesmal, wenn eine der E/A-Einheiten bedient werden muß, erzeugt sie einen Impuls oder einen bestimmten Pegel auf dieser Leitung, um den Mikroprozessor auf sich aufmerksam zu machen. Ein Mikroprozessor testet am Ende jedes Befehlszyklus, ob eine Unterbrechungsanfrage vorliegt. Ist dies der Fall, wird die Unterbrechung durchgeführt.

Ist keine Anfrage vorhanden, wird der nächste Befehl übernommen. Dies ist in untenstehendem Flußdiagramm dargestellt. Werden kritische Prozesse bearbeitet, muß sichergestellt sein, daß die Programmabarbeitung nicht durch eine Unterbrechung gestört wird. Jedesmal, wenn das Maskierungsbit eingeschaltet ist, werden die Unterbrechungsanforderungen nicht beachtet. Die „Maskierungsfähigkeit“ wird oft als „Aktivierung“ (enable) bezeichnet. Eine Unterbrechung ist aktiviert, d.

h. ermöglicht, wenn sie nicht maskiert ist.     ABARBEITEN EINER UNTERBRECHUNG Wenn die Unterbrechungsanforderung empfangen und entgegengenommen ist, muß die zugehörige Einheit bedient werden. Um dies zu tun, arbeitet der Mikroprozessor eine spezielle Bedienungsroutine (Interrupt Service Routine) ab. Dabei ergeben sich zwei Probleme: Zum einen muß der Status des gerade abzuarbeitenden Programms zum Zeitpunkt, in dem die Unterbrechungsanforderung entgegengenommen wurde, gerettet werden. Das beinhaltet, daß alle Registerinhalte im Mikroprozessor abgesichert werden müssen.

Diese Register werden auf dem Stapel (stack) abgespeichert. Zumindest muß der Programmzähler auf den Stapel gebracht werden, da an seine Stelle die Anfangsadresse der Unterbrechungsroutine gesetzt werden muß. Das Retten der restlichen Register kann mittels Hardware geschehen oder liegt in der Hand der Interrupt Service Routine. Wenn der Programmzähler (und eventuell die anderen Register) auf den Stapel gebracht ist, springt der Mikroprozessor zu der Unterbrechungsroutine. An dieser Stelle ergibt sich das zweite Problem: Eine ganze Reihe von E/A-Einheiten kann an dieselbe Unterbrechungsleitung angeschlossen sein. Wohin soll der Mikroprozessor springen, um die richtige Einheit zu bedienen? Das Problem liegt darin, die Einheit, die die Unterbrechung anforderte, ausfindig zu machen.


Diese Ermittlung kann durch Hardware, durch Software oder eine Kombination von beidem geschehen.             ABFRAGETECHNIK Ist die vom Hardwarestandpunkt einfachste Routine. Hier ist eine Softwareroutine nötig, um die Einheit herauszufinden, die die Unterbrechung anforderte. Hierbei wird die Abfragetechnik benutzt. Die Identifizierungsroutine fragt jede an das System angeschlossene Einheit ab. Eine Möglichkeit wäre, daß jede Einheit einen Porteingang am mC hat, daß bedeutet aber das bei vielen Interrupts viele Eingänge belegt sind.

Durch die Reihenfolge der Abfrage ergibt sich eine bestimmte Priorität. In solchen Systemen wird der Vorrang einer Einheit durch Software festgestellt (software-priority scheme), falls mehrere Einheiten zugleich eine Unterbrechung angefordert haben. Ein Nachteil dieser Methode ist natürlich die lange Reaktionszeit auf einen Interrupt.   DAISY-CHAIN TECHNIK Eine zweite softwareorientierte Methode arbeitet mit Hardwareunterstützung und ist deutlich schneller. Hier wird, wie unten dargestellt, ein Bestätigungssignal (ACK) für die Unterbrechung durch die verschiedenen Einheiten durchgeschleift, die sogenannte daisy-chain (Gänse-blümchenkette). Alle Einheiten hängen auf einer Interruptleitung.

Wenn eine Einheit einen Interrupt anfordert, so öffnet sie den Schalter und sendet auf der Interruptleitung die Interrupt-anforderung. Der Prozessor muß bei Eintreffen der Interruptanforderung zumindest den Programmzähler am Stapel absichern. Danach erzeugt der Mikroprozessor ein besonderes Bestätigungssignal (acknowledge auch INTA, d.h. Interrupt Acknowledge) genannt), daß er die Unterbrechung entgegengenommen hat. Dieses Bestätigungssignal erreicht nun die Einheit, die den Interrupt angefordert hat.

Diese Einheit setzt nun eine Erkennungsnummer auf den Datenbus, von dem sie der Mikroprozessor einliest. Anhand dieser Erkennungsnummer weiß der mP, welche Interrupt Service Routine er ausführen muß. Wenn mehrere Einheiten einen Interrupt angefordert haben, dann ergibt sich durch die Verbindung vom Acknowledge Signal für jede Einheit eine bestimmte Priorität. Diese Technik kommt z.B. bei der 8080/8085 Familie zur Anwendung.

Da es sich bei der 8051 Familie um Mikrocontroller handelt sind die meisten früheren externen Interruptquellen (Timer od. serielle Schnittstelle) bereits integriert und werden über Interruptvektoren behandelt.   INTERRUPTVEKTOREN Die schnellste Methode arbeitet mit Unterbrechungszeigern und wird daher als vectored interrupt bezeichnet. Hier hat die E/A-Einheit die Aufgabe, sowohl die Unterbrechungsanforderung zu erzeugen und die Sprungadresse zu der Bedienungsroutine zur Verfügung zu stellen. Wenn die entsprechende Steuerung nur eine Identifikationsnummer zur Verfügung stellt, ist es eine einfache Sache der Software, in einer Tabelle die zugehörige Sprungadresse zu finden. Das ist vom Hardwarestandpunkt aus einfacher, aber ergibt nicht die größtmögliche Leistung.

Die größte Leistung erhält man folgendermaßen: Wenn der Mikroprozessor die Unterbrechungsanforderung erhält, muß er den Programmzähler auf dem Stapel absichern und dann ein Acknowledge Signal aussenden. Danach muß die EA-Einheit die Interrupt Vektor Adresse auf den Adressbus legen, von wo sie der mP einliest und in den Programmzähler schreibt. Dadurch kann der mP unmittelbar zu der Speicherzelle springen und mit der Bedienung der Einheit anfangen.   INTERRUPTCONTROLLER Ein Interruptcontroller ist ein Baustein, der aus einem Interrupteingang am mP mehrere Interrupteingänge macht. Er hat für jede E/A-Einheit einen eigenen Interrupteingang. Deshalb weiß der Interruptcontroller sofort, welche Einheit die Unterbrechung angefordert hat und kann dann eine Interrupt Vektor Adresse auf den Datenbus legen.

Der Vorteil gegenüber der Daisy-Chain Technik ist, daß hier nur der Interruptcontroller „intelligent“ sein muß. Bei der Daisy-Chain Technik muß jede Peripherieeinheit eine Logik eingebaut haben, die es ermöglicht die Interrupt Vektor Adresse auf den Datenbus zu legen.         INTERRUPTANTWORT EINES 8085 PROZESSOR Nachdem der Interrupt erkannt wird, startet der Mikroprozessor einen speziellen Befehlszyklus, den Interrupt Acknowledge Machine Cycle (INA). Das spezielle an diesem Befehlszyklus ist, daß anstelle von /RD /INTA ausgesendet wird. Am Adreßbus wird trotzdem der Inhalt des Programmzählers gelegt, dies bewirkt jedoch nichts. Wenn /INTA ausgesendet wird, muß die externe Logik den Opcode des auszuführenden Befehls auf den Datenbus legen.

Wenn der Opcode das erste Byte eines Mehrbyte-Befehls ist, dann werden zusätzliche /INTA Impulse erzeugt. Ein logischer Befehl wäre z.B. ein Call Befehl, da der Prozessor bei diesem Befehl den Programmzähler am Stapel absichert, bevor er zur angegebenen Adresse springt. Dieser Call-Befehl könnte vom 8259A, einem programmierbarem Interruptcontroller (im 85er mode programmiert) angelegt werden.   Signale M2 (MR) M1 (INA) M2 (INA) M3 (INA) M4 (MW) M5 (MW) M1 (OF) T2 T3 T1 T2 T3 T4 T5 T6 T1 T2 T3 T1 T2 T3 T1 T2 T3 T1 T2 T3 T1 T2   CLK                                                 INTR                                                 /INTA                                               (1,1,1) (0,0,1) (0,1,1) (0,0,1) (1,1,1) (1,1,1) (0,1,0)   IO /M, S1,S0                                                       OUT OUT OUT OUT OUT OUT OUT OUT IN IN IN IN PCH(B3) (SP-1)H (SP-2)H PCH PCH PCH (PC-1)H   A8-A15                                                   D0-D7 (PCL) D0-D7 (PCH) D0-D7 (B3) B2 (SP-2)L (SP-1)L PCL D0-D7 (B2) PCL D0-D7 (Call) PCL D0-D7   AD0-AD7                                                 ALE                                                 /RD                                                 /WR                                               Timing Diagramm bei Verwendung eines 8085 Prozessors und eines 8259A InterruptcontrollersNachdem der Prozessor den Opcode erhalten hat, beschließt er in unserem Fall, daß der Call-Befehl 2 weitere Bytes benötigt.

Deshalb sind die nächsten Befehlszyklen 2 weitere INA-Zyklen, um das zweite und dritte Byte des Befehls zu lesen. Da nun der gesamte Befehl eingelesen ist, wird dieser ausgeführt. Als Befehl kann jeder beliebige Befehl außer enable oder disable Interrupt verwendet werden. Die logischsten Befehle wäre ein RESTART oder CALL Befehl, da hier der Programmzähler automatisch abgesichert wird. Innerhalb der 3 INA Zyklen wurde ein erhöhen des Programmzählers verhindert, d.h.

der korrekte Wert kann während M4 und M5 abgesichert werden. Während M4 und M5 führt die CPU Memory Write machine cycles aus, um das höher- und niederwertigere Byte des Programmzählers abzusichern. Danach werden die zwei Bytes, die in M2 und M3 eingelesen wurden in den Programmzähler geschrieben. Das hat den gleichen Effekt, wie ein Sprung zu dieser Adresse.   INTERRUPTANTWORT EINES 8086 PROZESSORS Bei Verwendung eines 8086 Prozessors wird bei einem Interrupt im Prozessor intern ein Call-Befehl ausgelöst. Der Interrupt-Controller legt beim zweiten /INTA Impuls eine 8bit Vektor Adresse auf den Datenbus, die mit der positiven Flanke übernommen wird und den Sprung zur Interrupt Service Routine bewirkt.

Signale               INTR                 /INTA                 Datenbus               Timing Diagramm bei Verwendung eines 8086 Prozessors und eines 8259A Interruptcontrollers  Interruptquellen der 8051 Familie Der 80552 besitzt 15 verschiedene Interruptquellen. Die Interrupts können einer Prioritätsebene zugeordnet werden (0 oder 1). Innerhalb einer Prioritätsebene gelten bei gleichzeitig auftretenden Interrupts folgende Prioritäten:   Interruptquelle Name Vector Address Priorität innerhalb Prioritätsebene Externer Interrupt 0 X0 0003h SIO1 (I²C) S1 002Bh ADC completion ADC 0053h Timer 0 overflow T0 000Bh Timer 2 capture 0 CT0 0033h Timer 2 compare 0 CM0 005Bh Externer Interrupt 1 X1 0013h Timer 2 capture 1 CT1 003Bh Timer 2 compare 1 CM1 0063h Timer 1 overflow T1 001Bh Timer 2 capture 2 CT2 0043h Timer 2 compare 2 CM2 006Bh SIO0 (UART) S0 0023h Timer 2 capture 3 CT3 004Bh Timer T2 overflow T2 0073h grau unterlegt: auch beim 8051 vorhanden; Vektor Adressen identisch                 EXTERNE INTERRUPTS INT0, INT1   TCON 8F 8E 8D 8C 8B 8A 89 88 88h TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0   Timer Control Register TCON IEN0 AF AE AD AC AB AA A9 A8 A8h EA EAD ES1 ES0 ET1 EX1 ET0 EX0   Interrupt Enable Register IEN0 IP0 BF BE BD BC BB BA B9 B8 B8h - PAD PS1 PS0 PT1 PX1 PT0 PX0   Interrupt Priority Register IP0 Externer Interr upt 0   Die externen Interrupts /INT0 und /INT1 werden über EX0 und EX1 enabled bzw. disabled. Mit IT0 und IT1 kann zwischen pegelaktiv und flankenaktiv ausgewählt werden. Wenn ITx 1 ist, dann reagiert der mP auf eine negative Flanke; wenn ITx 0 ist, dann reagiert der mP auf einen Low-Pegel.

IE0 und IE1 sind die Interrupt Request Flags, die gesetzt werden, wenn ein Interrupt aufgetreten ist. Da die externen Interrupts nach jedem Maschinenzyklus abgefragt werden, sollte ein High- oder Low-Signal mindestens 12 Oszillator Perioden gehalten werden, um sicherzustellen, daß das Signal richtig erkannt wird. Flankenaktiv: Damit der Interrupt erkannt wird, muß die externe Spannungsquelle den Interrupt Request Pin für mindestens einen Zyklus auf 1 und für mindestens einen Zyklus auf 0 halten, damit der Übergang von 1 auf 0 erkannt wird. IEx wird automatisch gelöscht, wenn die ISR aufgerufen wird. Pegelaktiv: Hier muß der Interrupt Request Pin mindestens einen Maschinenzyklus auf 0 gehalten werden, damit er erkannt wird. Wenn der Interrupt aus irgendeinem Grund erst später behandelt werden kann (siehe 3.

1 Interrupt Response Time), dann kann es passieren, daß der Interrupt verloren geht. Die externe Logik bzw. die Interrupt Service Routine müssen dafür sorgen, daß die Interruptanforderung zumindest bis zum Sprung in die Interrupt Service Routine und höchstens bis zum beenden der ISR aktiv bleibt.   Die Bits PX0 und PX1 legen die Priorität des Interrupts fest (0-low priority; 1-high priority).   TIMER 0 BZW. TIMER 1 OVERFLOW   TCON 8F 8E 8D 8C 8B 8A 89 88 88h TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0   Timer Control Register TCON IEN0 AF AE AD AC AB AA A9 A8 A8h EA EAD ES1 ES0 ET1 EX1 ET0 EX0   Interrupt Enable Register IEN0 IP0 BF BE BD BC BB BA B9 B8 B8h - PAD PS1 PS0 PT1 PX1 PT0 PX0   Interrupt Priority Register IP0   Timer 1 Overflow Interrupt   TF0 und TF1 werden bei einem Überlauf von Timer 0 bzw.

Timer 1 gesetzt (außer bei Timer 0 Mode 3), sie werden bei Aufruf der Interrupt Service Routine wieder rückgesetzt. Die Priorität der Interrupts wird über PT0 und PT1 gesetzt. Über ET0 und ET1 können die Interrupts enabled bzw. disabled werden.                         SERIELLES PORT SIO0   S0CON 9F 9E 9D 9C 9B 9A 99 98 98h SM0 SM1 SM2 REN TB8 RB8 TI RI   Serial Port Control Register S0CON IEN0 AF AE AD AC AB AA A9 A8 A8h EA EAD ES1 ES0 ET1 EX1 ET0 EX0   Interrupt Enable Register IEN0 IP0 BF BE BD BC BB BA B9 B8 B8h - PAD PS1 PS0 PT1 PX1 PT0 PX0   Interrupt Priority Register IP0   SIO 0 Interrupt   Der Interrupt wird durch eine ODER-Verknüpfung von RI (Receive Interrupt) und TI (Transmit Interrupt) ausgelöst, d.h.

der Prozessor „weiß“ beim Sprung in die Interrupt Service Routine nicht, durch was der Interrupt ausgelöst wurde. In der ISR müssen RI und TI überprüft und rückgesetzt werden, da sonst bei beenden der ISR ein neuer Interrupt ausgelöst werden würde.                                                                                           Interrupt Verarbeitung INTERRUPT RESPONSE TIME Zum Zeitpunkt S5P2 in jedem Maschinenzyklus werden die Interrupts abgefragt und in ein Latch gespeichert. Nachdem der Interrupt anerkannt wurde, ist der nächste Befehl ein Call-Befehl zur Interrupt Service Routine. Dieser Call Befehl benötigt selbst 2 Maschinenzyklen. Das heißt, bis der erste Befehl der Interrupt Service Routine ausgeführt wird vergehen mindestens 3 Maschinenzyklen.

Kürzeste Reaktionszeit auf einen Interrupt, wenn C2 der letzte Befehlszyklus eines Befehls außer RETI oder eines Zugriffes auf IE oder IP ist [7p39]Die Interrupts werden in jedem Maschinenzyklus während S5P2 gelatched, die gelatchten Zustände werden aber erst im darauffolgenden Maschinenzyklus abgefragt. Dann erst kann der Prozessor entsprechend den im vorigen Zyklus gelatchten Zuständen reagieren. Anm.: Da in jedem Zyklus gelatched und die alten Werte vom vorigen Zyklus gepolled werden, müssen die Werte doppelt gespeichert werden, oder vor S5P2 gepolled werden.   Wiederholung: Taktperiode (T-State, Phase) / Schritt (State, besteht aus 2 Taktperioden P1, P2) / Maschinenzyklus (cycle, besteht aus 6 States) / Befehlszyklus (instruction cycle, besteht aus 1 bis 4 cycles) Þ 12 MHz Takt – 1 Maschinenzyklus = 1 ms   Eine längere Reaktionszeit kann aus mehreren Gründen vorkommen: Wenn ein Interrupt gleicher oder höherer Priorität gerade in Arbeit ist, dann hängt die Reaktionszeit von der Interrupt Service Routine des anderen Interrupts ab. Wenn der gerade ausgeführte Befehl im Augenblick des Pollings nicht den letzten Maschinenzyklus ausführt, dann kann die zusätzliche Verzögerung maximal 3 Zyklen sein, da die längsten Befehle (MUL und DIV) 4 Zyklen lang sind.

Bei einem Zugriff auf IE oder IP oder beim Befehl RETI wird, bevor die Interrupt Service Routine gestartet wird noch ein zusätzlicher Befehl ausgeführt, da möglicherweise gerade der Interrupt gesperrt worden ist und deshalb die Interrupts neu gepollt werden müssen. Dadurch ergibt sich eine zusätzliche Wartezeit von maximal 5 Maschinenzyklen (bei MUL oder DIV Befehl). Aus diesen Gründen beträgt die Interrupt Response Time immer mehr als 3, aber immer weniger als 9 Maschinenzyklen (falls gerade kein anderer Interrupt abgearbeitet wird). Die Zuordnung zu einer Priorität wird in jedem Maschinenzyklus wiederholt, und die verglichenen Werte sind diejenigen, die während S5P2 des vorangegangenen Maschinenzyklus vorhanden waren. Ist ein Interrupt-Kennzeichnungsbit gesetzt, das aber wegen einer der obigen Sperrbedingungen nicht bedient werden kann, und ist es bei Aufhebung der Sperrbedingungen nicht mehr gesetzt, so wird der zurückgewiesene Interrupt nicht mehr ausgeführt. Mit anderen Worten: Das System erinnert sich nicht daran, daß das Kennzeichnungsbit gesetzt war, aber nicht bedient wurde.

Jeder Zyklus, in dem eine Prioritätenzuordnung erfolgt, muß in diesem Sinn für sich betrachtet werden.   Genaue Zusammenfassung der Interruptreaktionszeit:   3 Perioden + letzter Zyklus eines Befehls + 2 Zyklen CALL-Befehl = Min. Zeit. 3 Perioden + 3 Zyklen ≙ 3.25 ms   3 Perioden + ( bis 3 + 1 Zyklen) + 2 Zyklen Polling nicht während letzem Maschinenzyklus eines Befehls 3 Perioden + 4-6 Zyklen ≙ 4.25-6.

25 ms   Spezialfall: 3 Perioden + 2 Zyklen RETI + 4 Zyklen (MUL/DIV) + 2 Zyklen CALL = 3 Perioden + 8 Zyklen ≙ 8.25 ms   Eine beliebige Zeit kann noch hinzukommen, wenn gerade ein Interrupt gleicher oder höherer Priorität abgearbeitet wird, da dieser nicht unterbrochen werden kann. Dies läßt sich durch den Einbau eines zusätzlichen Prioritätslevel verhindern (siehe 4.2 Simulieren eines dritten Prioritätslevels)   Anm.: Die hier berechnete Reaktionszeit geht immer von dem Zeitpunkt aus, in dem der Interrupt eingelatched wird.   INTERRUPTABLAUFDIAGRAMM zeitbezogen programm (adreß) bezogen           ì   ì   ë   ë   ì   ë       INT-1   INT-2   ISR2RETI   ISR1RETI   INT-3   ISR3RETI SP - SP   SP   SP   SP       SP   «               «       «         RA-1 low   RA-1 low   RA-1 low       RA-3 low         « RA-1 high   RA-1 high « RA-1 high     « RA-3 high               RA-2 low                         « RA-2 high                                               HP.

..Hauptprogramm Interruptannahme: 1 Setzen des IIP-FF ( Interrupt In Progress ) 2 Retten der Rücksprungadresse auf Stack [ PUSH (PC)] 3 Sprung entsprechend aktuellem Interruptvektor (Sprung zur Interrupt Service Routine ISR ) Rückkehr von der ISR: ( Ausgelöst d. RETI am Ende der ISR ) 1 IIP-FF rücksetzen 2 Rücksprungadresse vom Stack holen [ POP (PC) ] 3 und Programm das vom INT unterbrochen wurde fortsetzen A) Tritt während Interrupt in Progress ein Interrupt der selben Prioritätsebe auf, so kann dieser ( selbst wenn er innerhalb dieser Prioritätsebene eine höhere Priorität besitzt ) den laufenden Interrupt nicht unterbrechen. Erst nachdem der laufende Interrupt fertig abgearbeitet ist, reagiert das System auf den Interrupt. Dabei muß ein Befehl des Programmes, das durch den vorigen Interrupt unterbrochen wurde ausgeführt werden.

In obigem Ablaufdiagramm tritt dieser Fall bei der Reaktion auf INT-3 (TIMER1OFL) auf. Man erkennt, daß die Reaktionszeit auf einen Interrupt relativ groß sein kann. Vor allem ist sie nicht vorhersagbar, da man nicht weiß, wieviele Interrupts höherer Priorität schon warten. Schnelle vorhersagbare Reaktion ist nur mit dem Interrupt höchster Priorität möglich.           Interruptanwendungen EINZELSCHRITTBETRIEB Die Interrupt-Struktur des 8051 gestattet Einzelschrittbetrieb mit sehr geringem zusätzlichem Software-Aufwand. Wie bereits oben dargelegt, wird eine Interrupt-Anforderung solange nicht bedient, wie ein Interrupt gleicher oder höherer Priorität läuft, oder bis nach einem Befehl RETI wenigstens ein weiterer Befehl ausgeführt worden ist.

Somit kann, sobald eine Interrupt Service Routine begonnen hat, sie nicht erneut einsetzen, bevor nicht wenigstens ein Befehl des unterbrochenen Programms ausgeführt wurde. Eine Möglichkeit, diese Tatsache für den Einzelschrittbetrieb zu nutzen besteht darin, einen der externen Interrupt-Anschlüsse (z.B. /INT) so zu programmieren, daß er pegelaktiviert ist. Die Interrupt-Routine wird dann mit folgender Codierung abgeschlossen:   JNB P3.2,$ ;Warte hier, bis INT0 high ist JB P3.

2,$ ;Warte jetzt hier, bis INT0 low ist RETI ;Springe zurück und führe einen Befehl aus   Wird jetzt der Anschluß /INT0 (gleich dem Anschluß P3.2) normalerweise auf LOW gehalten, so startet die Zentraleinheit die durch den externen Interrupt 0 ausgelöste Routine und bleibt so lange in dieser, bis INT0 gepulst wird (von LOW nach HIGH und von dort nach LOW). Dann führt die Zentraleinheit den Befehl RETI aus, geht ins Hauptprogramm zurück, führt dort einen einzigen Befehl aus und beginnt sofort erneut mit der Routine des externen Interrupts 0, um auf den nächsten Puls von P3.2 zu warten. Bei jedem Puls an P3.2 führt die Zentraleinheit einen Schritt des Hauptprogramms aus.

  SIMULIEREN EINES DRITTEN PRIORITÄTSLEVELS5 Manche Anwendungen benötigen mehr als 2 Prioritätslevel. In solchen Fällen kann eine relativ einfache Routine geschrieben werden um einen dritten Prioritätslevel zu simulieren. Zuerst müssen Interrupts, die eine höhere Priorität als 1 haben sollen im Interrupt Priority Register auf 1 gesetzt werden. Die Interrupt Service Routine für Priorität 1, die durch Interrupts der Priorität 2 unterbrochen werden kann muß folgenden Code enthalten:   PUSH IE MOV IE,#MASK CALL LABEL *************************** (Ausführung der Service Routine) *************************** POP IE RET LABEL: RETI   Sobald ein Interrupt der Priorität 1 auftritt werden alle Interrupts der Priorität 0 und 1 disabled. Der CALL to LABEL Befehl bewirkt die Ausführung des RETI Befehls und damit ein Löschen des Interrupt in Progress Flip Flop der Priorität 1. Zu diesem Zeitpunkt kann jeder Interrupt bedient werden, aber es sind nur Interrupts der Priorität 2 enabled POPing IE stellt das original Enable Byte wieder her.

Danach wird ein normaler RET Befehl (nicht RETI) verwendet um die Interrupt Service Routine abzuschließen. Diese zusätzliche Software verlängert die ISR von Interrupts der Priorität 1 um 10ms. Interrupt Arbeitsblatt                       Erläuterungen zur Interrupt Logik     Prioritäts-level Haupt- programm ISR 1 + 2 S1 R1 S0* R0 /Q1.S0 Q1 Q0 Interrupt-annahme                   0 0 0 0 0 0 0 0 Low                 0 0 1 1-0 0 1 0 1 1 High         1         1-0 0 1-0 0 0 1 1 1 Low                 1-0 0 1 0 0 1 1 1                   0 1 1 0 1 0 1 1                   0 0 1 1 1 0 0* 0                   0 0 1 0 1 0 1 1                   0 0 0 1 0 0 0 0                                           Prioritäts-level Haupt- programm ISR 1 + 2 S1 R1 S0* R0 /Q1.S0 Q1 Q0 Interrupt-annahme                     0 0 0 0 0 0 0 0 Low                 0 0 1 1-0 0 1 0 1 1 High         1         1-0 0 1-0 0 0 1 1 1 Low                 1-0 0 1 0 0 1 1 1                   0 1 1 0 1 0 1 1                   0 0 1 1 1 0 0* 0                   0 0 1 0 1 0 1 1                   0 0 0 1 0 0 0 0    

Suchen artikel im kategorien
Schlüsselwort
  
Kategorien
  
  
   Zusammenfassung Der Vorleser

   sachtextanalyse

   interpretation zwist

   Fabel interpretation

   literarische charakteristik

   interpretation bender heimkehr

   felix lateinbuch

   interpretation der taucher von schiller

   textbeschreibung

   charakterisierung eduard selicke
Anmerkungen:

* Name:

* Email:

URL:


* Diskussion: (NO HTML)




| impressum | datenschutz

© Copyright Artikelpedia.com