REFERAT-MenüDeutschGeographieGeschichteChemieBiographienElektronik
 EnglischEpochenFranzösischBiologieInformatikItalienisch
 KunstLateinLiteraturMathematikMusikPhilosophie
 PhysikPolitikPsychologieRechtSonstigeSpanisch
 SportTechnikWirtschaftWirtschaftskunde  



Referat Interrupts

Interrupts


Eine Interrupt-Routine ist eine spezielle Form eines Unterprogramms. Sie unterscheidet sich von einem gewöhnlichen Unterprogramm dadurch, daß der Aussprung aus dem laufenden Programm nicht durch einen Sprungbefehl ausgelöst wird, der an einer bestimmten Stelle des Programms steht, sondern aufgrund eines externen Steuersignals jederzeit ausgelöst werden kann. Dies kann sowohl Hardware- als auch softwaremäßig erfolgen. Jeder Interruptquelle ist eine Adresse (=Vektor) im Programmspeicher zugeordnet, auf welche beim Auftreten eines Interrupts gesprungen wird. Das Reset-Signal kann als besonderer Interrupt angesehen werden. Beim Auftreten des Reset-Signals wird automatisch auf die Adresse 0000h gesprungen.


Der Sinn eines Interrupts liegt in der Fehlererkennung und -behandlung, sowie zum Beispiel zum Bearbeiten von Tastatureingaben oder zum Überwachen eines Timers oder Ahnlichem.



Man unterscheidet maskierbare und nicht maskierbare Interrupts (NMI- Non maskable interrupts). NMI´s können nicht unterdrückt werden, man muß daher darauf achten, daß immer eine Interrupt Service Routine (ISR) an der dem Interrupt zugeordneten Adresse vorzufinden ist, da ansonsten eine sinnlose Fortsetzung des Programmes an der Sprungadresse erfolgen würde (Absturz).

Eine ISR sollte grundsätzlich so kurz wie möglich geschrieben werden, da sie das Hauptprogramm unterbricht und auf diese Weise Zeitschleifen oder andere zeitkritische Befehle verzögern könnte.

Alle Speicherstellen, die der Interrupt benötigt, müssen gesichert und nach dem Abarbeiten der ISR wieder restauriert werden. Dies geschieht auf dem Stapelspeicher, dem sogenannten Stack. Dieser Speicher arbeitet nach dem LIFO-Prinzip (Last in - first out). Wie bei einem Papierstapel kann man immer nur das oberste Blatt gesehen werden und muß als erstes abgearbeitet werden.



An einer beliebigen Stelle des Hauptprogramms tritt der IRQ (Interrupt Request, auch ISR (Interrupt Service Request) genannt) auf. Der gegenwärtige Befehl wird fertig abgearbeitet. Der Program Counter (PC) wird automatisch auf dem Stack gespeichert und die Interrupt Service Routine wird aufgerufen. Sämtliche anderen benötigten Speicherstellen müssen vom Programmierer selbst gesichert und wieder restauriert werden. Nach Abarbeitung des Interrupts wird automatisch wieder an die vom Program Counter gezeigte Adresse gesprungen und das Programm fortgesetzt. Vorsicht! Man muß achtgeben, daß man, wenn man den Stack verändert hat , ihn wieder zurücksetzt, da ansonsten eine andere Adresse im Stack steht und das Programm irgendwo fortgesetzt wird. Der Stack sieht wieder gleich aus wie vor dem Aufruf der Interrupt-Routine. Mit dem Befehl PUSH kann auf dem Stack gespeichert werden, mit dem Befehl POP wird vom Stack geladen.



Anwendung von Interrupts


Beim 8051 sind die Interrupt-Sprungadressen in Abständen von 4 Byte angeordnet. Kurze Interruptroutinen können daher sofort dort hingeschrieben werden. Beim 80C552 sind sie jedoch in Abständen von 8 Byte angeordnet.

Der 8051 besitzt fünf Interruptquellen, wobei hingegen der 80C552 zusätzlich zu diesen 5 noch 10 Interruptquellen besitzt.











Anwendung von Interrupts:


Ein Interrupt niedriger Priorität kann durch einen Interrupt hoher Priorität unterbrochen werden, jedoch nicht durch einen anderen Interrupt gleicher Priorität.Falls Interrupt-Anforderungen verschiedener Prioritätsstufen gleichzeitig auftreten, wird die Interrupt-Anforderung der höheren Prioritätsstufe zuerst abgearbeitet. Treten jedoch Interrupt-Anforderungen gleicher Prioritätsstufe gleichzeitig auf, so wird Interrupt mit der niedrigeren Adresse zuerst abgearbeitet. Gleichzeitiges Auftreten bedeutet, daß beide Anforderungen innerhalb eines Takts auftreten.

Prioritätsskala :

Externer Interrupt 0

Überlauf am Zeitgeber/Zähler

Externer Interrupt 1

Überlauf am Zeitgeber/Zähler 1

Serieller Port


Die Interrupt-Quellen des 80C51 können durch 3 Steuerregister gesteuert werden.


Register TCON (Kontrollregister)


Die externen Interrupts INT0 und INT1 können entweder pegel- oder flankenaktiv sein, was von den Bits IT0 und IT1 im Register TCON abhängig ist. Wenn IT0 bzw. IT1 gleich 0 ist, wird der Interrupt bei LOW-Pegel ausgelöst. Dieser Pegel muß so lange von der externen Quelle erzeugt werden, bis der angeforderte Interrupt ausgelöst worden ist. Die Anforderung muß in der Interrupt-Routine wieder zurückgesetzt werden, da sonst der Interrupt immer wieder ausgelöst wird.

Ist IT0 bzw. IT1 gleich 1, so wird der Interrupt bei Erkennen einer negativen Flanke ausgelöst, wenn das Kennzeichnungsbit IEx gesetzt wird.



2: IE-Register (Freigaberegister)


Mit dem IE-Register kann von jedem der 5 Interruptquellen ein Interrupt erlaubt bzw. gesperrt werden.

Bei Setzen der Bits ES (serielle Schnittstelle), ET1 (Timer 1), EX1 (externe IR-Quelle 1), ET0 (Timer 0), EX0 (externe IR-Quelle 0) wird der entsprechende Interrupt freigegeben. Mit dem Bit EA können alle Interrupts gesperrt werden (EA=0).


3. IP-Register (Prioritätsregister)


Mit diesem Register kann die Priorität der einzelnen Interruptquellen festgelegt werden. Durch Setzen der Bits PS, PT1, PX1, PT0, oder PX0 wird den jeweiligen Interruptquellen eine höhere Priorität zugewiesen. Der 8051 kennt eine hohe und eine niedrige Priorität. Je nachdem, wie wichtig die einzelnen Interrupts bewertet werden sollen, können die einzelnen Bits gesetzt werden.












Interrupt - Verarbeitung:


Die Interrupt-Kennzeichnungsbits werden während S5P2 eines jeden Maschinenzyklus abgefragt und die Ergebnisse während des nächsten Maschinenzyklus einer Priorität zugeordnet. War während des erstgenannten Zyklus eines der Kennzeichnungsbits gesetzt, so wird dies im zweiten erkannt, und das Interrupt-System erzeugt den Befehl LCALL für die entsprechende Subroutine-Adresse, vorausgesetzt, daß die Abarbeitung des durch Hardware erzeugten Befehls LCALL nicht durch eine der folgenden Bedingungen gesperrt ist:


Ein Interrupt gleicher oder höherer Priorität wird gerade abgearbeitet.


Der gegenwärtige, der Zuordnung einer Priorität dienende Maschinenzyklus ist nicht der letzte bei der Ausführung des gerade laufenden Befehls.


Der gerade auszuführende Befehl ist RETI oder stellt einen Zugriff auf das spezielle Funktionsregister dar, oder er ist ein RD/WR Befehl.



Jede dieser 3 Bedingungen blockiert den Befehl LCALL für die Interrupt-Routine. Bedingung 2 stellt sicher, daß der gerade laufende Befehl vollständig abgearbeitet wird, bevor irgendeine Subroutine angesprungen wird. Durch Bedingung 3 ist folgendes gewährleistet: Wenn der gerade auszuführende Befehl RETI ist oder einen Zugriff auf IE oder IP darstellt, wird wenigstens noch ein weiterer Befehl ausgeführt, bevor die Durchführung des Interrupts beginnt.



Die Zuordnung zu einer Priorität wird in jedem Maschinenzyklus wiederholt, und die verglichenen Werte sind diejenigen, die währen S5P2 des vorangegangenen Maschinenzyklus vorhanden waren. Ist ein Interrupt -Kennzeichnungsbit gesetzt, das aber wegen der obigen Sperrbedingung nicht bedient werden kann, und ist es bei Aufhebung der Sperrbedingung 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ätszuordnug erfolgt, muß in diesem Sinn für sich betrachtet werden.


Externe Interrupts:


Externe Quellen können einen Interrupt entweder durch den Pegel LOW oder durch eine Flanke von HIGH nach LOW ( pegelaktivierte oder flankenaktivierte Interrupts ) auslösen, was durch programmieren, d.h. durch Setzen oder Löschen von IT1 oder IT0 im Register TCON, festgelegt wird. Ist ITx =0, so wird ein externer Interrupt x durch erkennen des Pegels LOW am Anschluß INTx eingeleitet, ist dagegen ITx =1, so erfolgt die Interrupt-Auslösung durch Erkennen einer Flanke des Pegels. In diesem Fall wird , wenn aufeinanderfolgende Abfragen von INTx den Pegel HIGH in einem Zyklus ergeben haben, das Kennzeichnungsbit für externe Interrupt-Anforderungen Iex in TCON gesetzt. Dies löst dann den Interrupt aus.


Da die externen Interrupt-Anschlüsse während eines jeden Maschinenzyklus einmal abgefragt werden, sollte ein Eingangssignal ( HIGH oder LOW ) wenigstens 12 Oszillatorperioden am Eingang anliegen, um eine Sinnvolle Abfrage zu gewährleisten. Wenn daher der externe Interrupt flankenaktiviert ist, muß die externe Quelle wenigstens einen Zyklus den Pegel HIGH am entsprechenden Anschluß stehen lassen und danach wenigstens einen Zyklus den Pegel LOW, damit die Flanke erkannt und das Kennzeichnungsbit für externe Interrupt-Anforderungen IEx gesetzt werden kann. IEx wird durch die Zentraleinheit automatisch gelöscht, wenn die Interrupt-Routine aufgerufen ist.


Ist der externe Interrupt pegelaktiviert, muß die externe Quelle die Anforderung so lange aufrechterhalten, bis der angeforderte Interrupt tatsächlich erzeugt worden ist. Danach muß er die Anforderung desaktivieren, bevor die Interrupt-Routine abgearbeitet ist; andernfalls wird ein weiterer Interrupt erzeugt.



Zusätzliche Interrupts des 80C552:


Die 8 T2 Interrupts werden von Flags gesetzt. Bis auf den ADC Interrupt werden die anderen 9 zusätzlichen, nicht von der Hardware gelöscht, und sie müssen von der Software rückgesetzt werden, um die Wiederholung von Interrupts zu vermeiden. Der ADC Interrupt wird vom ADCI-Flag im ADC Control-Register ( ADCON) gesetzt. Das Flag wird gesetzt, wenn eine ADC _Umwandlung bereit ist gelesen zu werden. Es wird nicht von der HW gelöscht und muß von der SW rückgesetzt werden, um die Wiederholung zu vermeiden.

Der I2C-Interrupt wird vom SI-Flag im SI01 Controlregister (S1CON) gesetzt. Das Flag wird gesetzt, wenn S1STA mit einem gültigen Status-Code geladen wird.

Das ADCI-Flaag kann man mit der SW rücksetzen, aber nicht damit setzen. Alle anderen Flags die Interrupts auslösen, können sowohl gesetzt und rückgesetzt werden, durch die SW, und es hat die selben Auswirkungen wie mit er HW.







Haupt | Fügen Sie Referat | Kontakt | Impressum | Nutzungsbedingungen