2

Ähnliche Dokumente
11. Die PC-Schnittstelle

Name: ES2 Klausur Thema: ARM Name: Punkte: Note:

Interrupts. Funktionsprinzip. Funktionsprinzip. Beispiel in C

Name: ES2 Klausur Thema: ARM Name: Punkte: Note:

Mikrocomputertechnik. 6. Exceptionhandling ( Ausnahmebearbeitung)

E Mikrocontroller-Programmierung

EXF2 TF2 IEX6 IEX5 IEX4 IEX3 IEX2 IADC 0C0H T2PS I3FR I2FR T2R1 T2R0 T2CM T2I1 T2I0 0C8H. AFH AEH ADH ACH ABH AAH A9H A8H Bitdresse

B1 Stapelspeicher (stack)

AVR-Mikrocontroller in BASCOM programmieren, Teil 2

Teil 6: PIC Studiengang Technische Informatik (TI) Prof. Dr.-Ing. Alfred Rożek. nur für Lehrzwecke Vervielfältigung nicht gestattet

Atmega Interrupts. Rachid Abdallah Gruppe 3 Betreuer : Benjamin Bös

Betriebssysteme 1. Thomas Kolarz. Folie 1

MikroController der 8051-Familie

Interruptverarbeitung. 7. Interruptverarbeitung. 7.1 Ablauf einer Programmunterbrechung

Mikrocomputertechnik. Thema: Der Aufbau des XC888-Mikrocontrollers -Teil 1 -

Hardwareaufbau der Mikrocontroller der 51er -Familie

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Implementierung von Interruptbehandlungen. Interrupts

Rechnerarchitektur Atmega Vortrag Atmega 32. Von Urs Müller und Marion Knoth. Urs Müller Seite 1 von 7

Aufgabe 2 - Erweiterung um PIC und Interrupts

Aufgabe 2 - Erweiterung um PIC und Interrupts

Konzepte von Betriebssystem- Komponenten Ausnahme- / Unterbrechungsbehandlung

Übung zu Betriebssystembau (Ü BS)

Unter einem Interrupt kann man sich einen durch Hardware ausgelösten Unterprogrammaufruf vorstellen.

Architektur der Intel 8051 Familie und Grundlegende Programmierung Reto Gurtner 2005

Zähler- und Zeitgeber-Baugruppen

8. Beschreibung des Prozessors MSP 430

EDT-REFERAT Adressierungsarten

Operationsmodi des Timers Modus 0 : Ausschalten des Zählers

Hardware Logik-Analysatoren

M-AX-16/C1 (Typ 37) Inhaltsverzeichnis M-AX-16/C1

Betriebssysteme Kap B: Hardwaremechanismen

Ein- und Ausgabegeräte

Zusammenfassung der Assemblerbefehle des 8051

Kap.2 Befehlsschnittstelle. Prozessoren, externe Sicht

Betriebssystembau. 3. Übung. Michael Engel Arbeitsgruppe Eingebettete Systemsoftware. Lehrstuhl für Informatik 12 TU Dortmund

Tag 2 Eingabe und Interrupts

Funktions-Blockschaltbild des Mikroprozessors 8085

U5 Fortgeschrittene AVR-Programmierung

U5-2 Register beim AVR-µC

Interruptsystem AVR. Interrupt-Quellen: Extern, Timer, ADC, USART usw. (siehe IVT im Anhang) Rücksprungadresse automatisch am Stack.

Mikroprozessortechnik Grundlagen 1

Maschinenorientierte Programmierung

16-Bit PCA Timer/Counter

PIC16 Programmierung in HITECH-C

E. Fehlermeldungen von PC-Bibliotheken

Grundlagen Rechnerarchitektur und Betriebssysteme


Remote-Objekt-Überwachung. von Jan Schäfer und Matthias Merk

Tag 3 Timer, ADC und PWM

Einführung in AVR Assembler

1. Kontinuierliche Datenerfassung Aufgabenstellung Voraussetzungen. Datei: AN046.DOC (5 Seiten)

Mikrocomputertechnik. Thema: Serielle Schnittstelle / UART

Datentechnik. Prinzipieller Aufbau eines Schnittstellenbausteins

Tutorial. Microcontroller. Grundlagen µc. Kapitel 1

Mikrocomputertechnik

Verwendung des EASY Mode mit Demo FB für SIMATIC Step7

Vorlesung Programmieren

Timer. Funktionsprinzip

GdI2 - Systemnahe Programmierung in C Übungen Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2006 U4.fm

Einführung in die Welt der Microcontroller

GTP444. GSM-SMS-Fernschaltund Alarmmodul 4-Kanal. Programmierbar am PC mit Software. Kurzanleitung 1/2017. Seite 1 von 7

Die Mikroprogrammebene eines Rechners

Atmel AVR für Dummies

Musterlösungen Technische Informatik 2 (T2) Prof. Dr.-Ing. D. P. F. Möller

Übungscomputer mit Prozessor Bedienungsanleitung

Microcomputertechnik

Übungen für die Einführung in die Assemblerprogrammierung mit dem Prozessor c515c

Assembler und Hochsprachen

Speicheraufbau des AT89C5131

Dateien, die nicht in das Projekt eingebunden sind, werden ohne Syntax highlight dargestellt. MiCoWi und µvision Seite 1 Uwe Wittenfeld

8051Speicherorganistaion. SFR u. oberer Datenspeicherbereich teilen sich den SPECIAL FUNCTION REGISTER. gleichen Adreßbereich. indirekt adressierbar

Prinzipieller Aufbau und Funktionsweise eines Prozessors

Elektronische Grundlagen (Praktikum)

Projektlabor. LCD Ansteuerung

Einleitung Die Pins alphabetisch Kapitel 1 Programmierung des ATmega8 und des ATmega

Fachhochschule Kaiserslautern Fachbereich Angewandte Ingenieurwissenschaften WS2010/11. Zeitpunkt der Prüfung: Beginn: 10.

Ein- / Ausgabe- Ports

Analog-Digital-Converter

Herzlich Willkommen. Beschreibung der Zähler-, Integrator- und Betriebszeitzählerfunktion des LOGOSCREEN 500 cf Dipl.-Ing. Manfred Schleicher

Teil VIII Von Neumann Rechner 1

Geräteentwurf mit Mikroprozessoren 1

MOP: Befehlsliste für den Mikrocontroller 8051

Inhalt. Übungen zu Systemnahe Programmierung in C (SPiC) Interrupts. Inhalt. Interrupts. Synchronisation

Einführung. Saalübung Informatik II SS Einführung. Einführung

Mikrocomputertechnik

Versuchsreihe 7. Registerfile. Registerfile + Programmzähler. HaPra Versuchsreihe 7 - Registerfile + Programmzähler. 32 Register à 32 Bit

Mikrocontrollertechnik C2 Timer. Einführung

Einführung in AVR-Assembler

Echtzeitbetriebssysteme

BIP-MANAGER V4. zum Datenmanagement der Netzüberwachungsbausteine. UBN/UPM/MFT, Zähler BZi40 PK1, MDVH und anderen Modbus Geräten

5 Kernaufgaben eines Betriebssystems (BS)

Transkript:

TINF Interrupts EDT-Referat Jürgen Schwarzbauer 2ANB 1995/96 Inhalt : Was ist ein Interrupt? Zweck von Interrupts Maskierbare und nicht maskierbare Interrupts Aufruf eines Interrupts Anwendung von Interrupts Interruptquellen Steuerregister Prioritätsvergabe Single-Step-Betrieb 1

2

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 Ähnlichem. 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 3

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 4

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 5

Die Interrupt-Quellen des 80C51 können durch 3 Steuerregister gesteuert werden. 1: 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) 6

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 7

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: 1) Ein Interrupt gleicher oder höherer Priorität wird gerade abgearbeitet. 2) Der gegenwärtige, der Zuordnung einer Priorität dienende Maschinenzyklus ist nicht der letzte bei der Ausführung des gerade laufenden Befehls. 3) 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. 8

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 I 2 C-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. 9