Interrupt. Externe Interrupts 0 und 1

Ähnliche Dokumente
2

Interruptverarbeitung

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

Mikrocomputertechnik

Hardwareaufbau der Mikrocontroller der 51er -Familie

Hardwareaufbau der Mikrocontroller der 51er -Familie

Interruptverarbeitung. 7. Interruptverarbeitung. 7.1 Ablauf einer Programmunterbrechung

Praktikum Mikrorechner 11 (Timer 1)

Mikrocomputertechnik. 6. Exceptionhandling ( Ausnahmebearbeitung)

Ein- / Ausgabe- Ports

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

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

MikroController der 8051-Familie

Name : Klasse : Punkte : Note :

E Mikrocontroller-Programmierung

Zusammenfassung der Assemblerbefehle des 8051

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

$NOMOD51 $INCLUDE (reg515.inc) ; Ein Zeichen auf Tastendruck S1 senden...

Zähler- und Zeitgeber-Baugruppen

Konzepte von Betriebssystem- Komponenten Ausnahme- / Unterbrechungsbehandlung

Aufgabe 2 - Erweiterung um PIC und Interrupts

Maschinenorientierte Programmierung

2.1 Atmega-Peripherie/Interrupts

Proseminar: Konzepte von Betriebsystem-Komponenten (KVBK)

Aufgabe 2 - Erweiterung um PIC und Interrupts

4.0 Der Atmel AT89LPx052 Mikrocontroller

Architektur der Intel 8051 Familie und Grundlegende Programmierung Reto Gurtner 2005

Praktikum Mikrorechner 9 (serielle Schnittstelle)

Speicheraufbau des AT89C5131

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

i386 Interrupt-Deskriptortabelle (IDT)

11. Die PC-Schnittstelle

8051-Mikrocontroller-Familie

DHBW Stuttgart Mikrocomputertechnik Labor KEIL Entwicklungsumgebung. Projektstruktur

Name : Klasse : Punkte : Note :

Übung zu Betriebssystembau (Ü BS)

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

Konzepte von Betriebssystem-Komponenten. Ausnahme- / Unterbrechungsbehandlung

MOP: Befehlsliste für den Mikrocontroller 8051

Serielle Schnittstelle

Komponenten eines Mikrocontrollers

Kap.2 Befehlsschnittstelle. Prozessoren, externe Sicht

Rainbow-OS Architekturseminar Thema: Interrupt-Controller

16-Bit PCA Timer/Counter

Mikrocomputertechnik. Thema: Serielle Schnittstelle / UART

Adressierungsarten des 6809 (Forts.)

Praktikum Mikrorechner 4 (Bitmanipulation und Spezialregister)

Unterprogramme mittels Stack (Forts.)

AVR-Mikrocontroller in BASCOM programmieren, Teil 2

EDT-REFERAT Adressierungsarten

Applikationen zur Mikrocontroller-Familie

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

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

myavr Programmierung in C

Mikrocomputertechnik. Unterprogramm

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

Timer. Funktionsprinzip

Befehlssatz der Mikrocontroller der 51er -Familie

Forth-Vokabular. Vokabular für Attiny2313-Forth Stand: A: Assembler-Wort F: Forth-Wort C: Compiler-Wort

LCD-Display am MVUS (nur einfachste Betriebsweise im Text Display Modus - ausführliche Beschreibung )

Befehlssatz der Mikrocontroller der 51er -Familie

Just-In-Time-Compiler (2)

16C62 A-D Wandler und Interruptfunktionen Ziel Benutzung des A/D-Wandlers zur Messung eines analoges Eingangssignales.

PIC16 Programmierung in HITECH-C

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

Microcontroller Selbststudium Semesterwoche 9

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

MODUL 6 TIMER UND COUNTER

Lehrveranstaltung: PR Rechnerorganisation Blatt 8. Thomas Aichholzer

Bedienmodule OM 2032 und OM 2008

U5-2 Register beim AVR-µC

14.3 Kontrollogik. Allgemeines: Kontrollogik wird in 3 Stufen realisiert: Clock - Erzeugung. 2 Uhrzeit. PALs. /ck. Kontrollsignale.

Just-In-Time-Compiler (2)

Übung 7. Mikroprozessor & Eingebettete Systeme 1

Unterprogramme. Unterprogramme

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

Mikrocomputertechnik mit dem Controller C167

8. Beschreibung des Prozessors MSP 430

Embedded Systems 1 C167 Einführung


Inhaltsverzeichnis 1 Ein-Bit-Rechner Mikrorechentechnik-Grundlagen Das Mikrocontrollersystem ein Überblick am Beispiel MSP430F1232

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

Mikroprozessoren Grundlagen AVR-Controller Input / Output (I/O) Interrupt Mathematische Operationen

Einführung in AVR Assembler

Interrupts. Funktionsprinzip. Funktionsprinzip. Beispiel in C

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

Übung zu Betriebssysteme

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

U2 Fortgeschrittene AVR-Programmierung. U2-1 Externe Interrupts des AVR-μC. 1 Flanken-/Pegel-Steuerung. 1 Flanken-/Pegel-Steuerung (2) 2 Maskieren

Mikrocomputertechnik

Technische Informatik 1 Übung 5: Eingabe/Ausgabe (Computerübung) Georgia Giannopoulou, ETZ G & 18.

Einführung in das Mikrocontroller-System 80(C)515/80(C)535

Betriebssysteme 1. Thomas Kolarz. Folie 1

Übung zu Betriebssysteme

U5 Fortgeschrittene AVR-Programmierung

Kap.2 Befehlsschnittstelle. Prozessoren, externe Sicht

Mikrocontrollertechnik

Automatisierungstechnik I Mini-Betriebssystem Theorie

Mikrocontrollertechnik

Transkript:

Interrupt In vielen Applikationen müssen Mikrocontrollersysteme auf nicht vorhersehbare Ereignisse schnell reagieren (Echtzeitanwendungen). Diese Forderung erfüllt die Interruptschaltung. Ein durch ein internes oder externes Ereignis ausgelöster Interrupt unterbricht das gerade laufende Programm. Es verzweigt auf die dem aktuellen Interrupt zugeordnete Adresse und von dort auf den dem Interrupt zugeordneten Programmteil (ISR: Interrupt-Service-Routine). Ist das Interruptprogramm abgearbeitet, wird das Programm an der zuvor unterbrochenen Stelle fortgesetzt. Ein gerade laufendes Interruptprogramm kann seinerseits durch einen Interrupt aus einer weiteren Stelle unterbrochen werden, wenn der neue Interrupt über eine höhere Unterbrechungspriorität verfügt. Bei gleicher oder niedrigerer Priorität muss der neue Interrupt so lange warten, bis der aktuelle Interrupt abgearbeitet ist. Erst dann wird er wirksam. Ein Interrupt wird durch Setzen des Interrupt-Request-Flags (Anforderungs-Flag) ausgelöst. Bei einigen Typen löscht die Hardware diese Flags bei der Ausführung des Interrupts. In anderen Fällen müssen diese Flags durch die Software gelöscht werden. Die Interruptschaltung des 8051 umfasst fünf Quellen und zwei Prioritätsebenen. Die Tabelle 1.13 enthält die Interrupt-Quellen mit den entsprechenden Einsprungadressen im Programmspeicher. Das Bild 1.27 zeigt die Interruptquellen und Interrupt-Request-Flags. Die Tabellen 1.14, 1.15 und 1.16 beschreiben das Interrupt-Enable-Register (IE), die Prioritätsstruktur und das Interrupt- Prioritätsregister (IP). Das Bild 1.28 zeigt das Interrupt-Zeitdiagramm. Alle Interrupts können separat über entsprechende Bits im Interrupt-Enable-Register IE freigegeben (enabled) oder gesperrt (disabled) werden. Das Bit EA in (IE.7) kann alle Interrupts gemeinsam sperren. Nach einem Reset sind ebenfalls alle Interrupts gesperrt. Tabelle 1.13: Interrupt-Quellen und -Einsprungadressen Externe Interrupts 0 und 1 Eine negative Flanke oder ein LOW-Pegel an P3.2 (/INT0) bzw. P3.3 (/INT1) aktiviert diese Interrupts. Sind die Bits IT0 bzw. IT1 (TCON.0 bzw. TCON.2) auf 1 gesetzt, ist die fallende Flanke das den Interrupt auslösende Moment, andernfalls der LOW-Pegel. Siehe dazu die Beschreibung des TCON-Registers in der Tabelle 1.10. Die Interrupt-Eingangssignale setzen die Interrupt-Request-Bits IE0 bzw. IE1 (TCON.1 bzw. TCON.3), wenn sie durch 1 in den Interrupt-Enable-Bits EX0 (IE.0) bzw. EX1 (IE.2) und EA (IE.7) freigegeben waren, und lösen dadurch den Interrupt aus. Die Bits le0 und IE1 werden bei der Verzweigung auf die Interrupt-Service-Routine durch die Hardware gelöscht, falls es sich um Prof. Dr.-Ing. Alfred Rożek MC65-Teil6.doc 1/10

die flankenempfindlichen Interrupts gehandelt hat. Bei pegelempfindlichen Interrupts enthalten diese Bits den negierten Pegel des jeweiligen Eingangspins. Erfolgt während der Bearbeitungszeit einer ISR eine weitere externe Interruptanforderungen, dann wird diese Anfrage im pegelgetriggerten Fall ignoriert. Bei der flankengetriggerten Betriebsart dagegen wird diese Anfrage gespeichert und die zugehörige ISR später ausgeführt. Die Interrrupt- Latenz- bzw. Interrupt-Response-Zeit verlängert sich entsprechend. In Bild 1.27a wird dieser Vorgang illustriert. Bild 1.27a: Externe Interrupts [10] Bild 1.27b: Interrupt-Quellen, -Request-Flags und Prioritätseinstellungen [10] Prof. Dr.-Ing. Alfred Rożek MC65-Teil6.doc 2/10

Zähler/Zeitgeber 0 und 1 Interrupts Laufen die Zähler/Zeitgeber über, setzen sie die Interrupt-Request-Flags TF0 (TCON.5) bzw. TF1 (TCON.7) und lösen dadurch den Timer 0 bzw. 1 Interrupt aus, vorausgesetzt, dass sie im Interrupt-Enable-Register durch die Bits EA (IE.7) und ET0 (IE.1) bzw. ET1 (IE.3) freigegeben waren. TF0 und TF1 werden bei der Verzweigung auf die Interrupt-Service-Routine durch die Hardware gelöscht. IE (Interrupt-Enable-Register) bitadressierbar Resetwert: 00H (IEN0 beim C515C) Tabelle 1.14: IE (Interrupt-Enable-Register) bitadressierbar Prof. Dr.-Ing. Alfred Rożek MC65-Teil6.doc 3/10

Interrupt der seriellen Schnittstelle Dieser Interrupt wird entweder durch das RI- (SCON.0) oder das TI-Bit (SCON.1) ausgelöst, vorausgesetzt, die Freigabebits EA (IE.7) und ES (IE.4) waren auf 1 gesetzt. Siehe dazu die Beschreibung des SCON-Registers Tabelle 1.11. Die Hardware setzt diese Bits nicht zurück. Normalerweise muss die Software durch Abfragen die Interrupt-Quelle (Rl oder TI) ermitteln und anschließend löschen. Software-Interrupts Alle Interrupt-Request-Bits können mit gleichem Resultat durch Software gelöscht und gesetzt werden. D.h., alle Interrupts sind auch durch Software auszulösen bzw. zu beenden. Ausnahmen sind die pegelempfindlichen Interrupts 0 und 1. Hier erscheint der negierte Pegel im Request-Bit. In diesem Fall sind die Software-Interrupts 0 und 1 durch Schreiben in die Portregister /INT0 (P3.2) und /INT1 (P3.3) zu generieren. Interrupt-Prioritätsstruktur Der 8051 verfügt über zwei Interrupt-Prioritätsebenen. Stehen mehrere Interrupts gleichzeitig an, entscheidet die eingestellte Priorität über die Reihenfolge, in der sie abgearbeitet werden. Ist für alle Interrupts die gleiche Prioritätsebene programmiert, arbeitet die Schaltung die Interrupts ebenfalls nach einer vorgegebenen Reihenfolge ab. Ein Interrupt hoher Priorität kann einen gerade aktiven Interrupt mit niederer Priorität unterbrechen, jedoch nicht umgekehrt. Interrupts gleicher Priorität unterbrechen sich nicht. Die Tabelle 1.15 gibt die fest eingestellte Reihenfolge der Abarbeitung an, wenn mehrere Interrupts gleicher Priorität gleichzeitig anstehen. Die Tabelle 1.16 veranschaulicht die Behandlung der Prioritätsebenen über das Register IP. Stehen mehrere Interrupts gleichzeitig an, hat die in der Tabelle an höherer Stelle aufgelistete Interrupt-Quelle die größere Priorität. Tabelle 1.15: Prioritätsebenen für C515C (Superset des 8051) Die Tabelle 1.15 zeigt alle Interruptquellen des 80C515C. Dieser Baustein verarbeitet insgesamt 17 Interruptquellen (serieller Interrupt wird zweimal gezählt), die auf vier Prioritätsebenen verteilt werden können. Prof. Dr.-Ing. Alfred Rożek MC65-Teil6.doc 4/10

Interruptbehandlung Wird ein Interrupt erkannt, generiert das Interruptsystem einen Aufruf der entsprechenden Interrupt-Service-Routine (ISR), vorausgesetzt, dies ist nicht durch eine der folgenden Bedingungen blockiert: Ein Interrupt gleicher oder höherer Priorität ist aktiv, der gerade laufende Befehl ist noch nicht abgearbeitet, der gerade aktive Befehl ist ein RETI, oder es findet gerade ein Zugriff auf eines der Register IE oder IP statt. 7 6 5 4 3 2 1 0 -- -- -- BCH BBH BAH B9H B8H -- -- -- PS PT1 PX1 PT0 PX0 Bit Adresse IP (B8H) Tabelle 1.16: IP (Interrupt-Prioritäts-Register) bitadressierbar Prof. Dr.-Ing. Alfred Rożek MC65-Teil6.doc 5/10

Timing Die Interruptschaltung fragt in jedem Maschinenzyklus einmal alle Interrupt-Quellen ab, ob eine Anforderung ansteht. Ist ein anstehender Interrupt durch eine der genannten Bedingungen blockiert, muss das Signal so lange anliegen, bis es bedient werden kann. Das Bild 1.28 zeigt das Interrupt-Zeitdiagramm. Die Interrupt-Service-Routine wird durch den Befehl RETI (Return from Interrupt) abgeschlossen. Der Stand des Befehlszählers vor der Interruptverzweigung wird aus dem Stack in den PC geholt. Dadurch wird das Programm an der ursprünglich unterbrochenen Adresse fortgesetzt. Im Unterschied zum RETI bewirkt der RET den Rücksprung aus einem Unterprogramm. Diese kann nur mit dem CALL angesprungen werden. Bild 1.28: Interrupt-Zeitdiagramm Prof. Dr.-Ing. Alfred Rożek MC65-Teil6.doc 6/10

Interrupt-Antwortzeit Wird ein Interrupt aktiv, wird das entsprechende Request-Flag gesetzt. Der darauffolgende Maschinenzyklus fragt das Request-Flag ab. Falls keine der vorher angegebenen Bedingungen dies verhindert, folgt der Aufruf der Interrupt-Service-Routine. Dieser Aufruf selbst dauert zwei Maschinenzyklen (LCALL). Es vergehen also minimal drei Maschinenzyklen zwischen Aktivierung eines Interrupts und der Ausführung des ersten Befehls der zugehörigen Interrupt-Service- Routine. Siehe dazu auch das Bild 1.28. Eine längere Antwortzeit ergibt sich, wenn eine der oben genannten Blockierungen vorliegt. Ist ein Interrupt gleicher oder höherer Priorität aktiv, wird die Wartezeit von der Laufzeit der laufenden Interrupt-Service-Routine bestimmt. Ist der gerade ablaufende Befehl noch nicht zu Ende, so beträgt die zusätzliche Wartezeit höchstens 3 Zyklen, da die längsten Befehle (MUL/DIV) 4 Maschinenzyklen benötigen. Läuft gerade ein RETI oder ein Zugriff auf die Register IE oder IP ab, wird immer noch der nächste Befehl ausgeführt. Deshalb kann dann die zusätzliche Wartezeit höchstens 5 Zyklen betragen (1 Zyklus für den gerade laufenden Befehl und 4 Zyklen für einen der längstmöglichen Befehle (MUL/DIV)). Die Antwortzeit beträgt dann also immer mehr als 3 und weniger als 9 Zyklen, wenn kein Interrupt mit gleicher oder mit höherer Priorität aktiv ist. t Task Interrupt Task CPU-Kontext sichern ISR-Kernel Entry function ISR- Kernel Exitfunction Interrupt- Service- Routine (ISR) Interrupt- Latenz Dispatch Anwender-Code der Interrupt Service Routine Interrupt- Recovery Bild 1.29: Systemverhalten und -zeiten bei einem Kontextwechsel Prof. Dr.-Ing. Alfred Rożek MC65-Teil6.doc 7/10

Single-Step In der Testphase und bei der Fehlersuche ist der Single-Step-Betrieb oft unentbehrlich. Der Single-Step ist beim 8051 mit wenig Softwareaufwand realisierbar. Wie im vorherigen Abschnitt beschrieben, wird eine Interruptanforderung so lange nicht bedient, wie ein Interrupt gleicher oder höherer Priorität anliegt, oder bis nach dem RETI-Befehl wenigstens ein weiterer Befehl ausgeführt wurde. Somit kann ein Interrupt frühestens wieder aktiv werden, nachdem wenigstens ein Befehl des Hauptprogramms ausgeführt wurde. Für den Single-Step-Betrieb programmiert man einen der externen Interrupts, beispielsweise den /INT0 auf Pegeltriggerung. Die dazugehörende Interrupt-Service-Routine wird dann durch die folgenden Befehle abgeschlossen: JNB P3.2, $ ; Warte bis /INT0 HIGH ist JB P3.2, $ ; Warte bis /INT0 LOW ist RETI ; Springe zurück und führe einen Befehl aus Es wird also nach jedem negativen Impuls an /INT0 (P3.2) ein Befehl des Hauptprogramms ausgeführt. In der Interrupt-Service-Routine können beliebige Testprogramme ablaufen, beispielsweise die Ausgabe bestimmter Registerinhalte über die serielle Schnittstelle, usw. Eine grafische Darstellung der Interruptstruktur des C515C finden sie im Siemens Users Manual 11.97 auf den Seiten 7-2, 7-3 und 7-4. Prof. Dr.-Ing. Alfred Rożek MC65-Teil6.doc 8/10

Interrupt-Vektoren des C515C Nr. Adresse Interruptquelle Request Flags Reset -- 0000H Startadresse nach einem Reset -- 0 0003H Externer Interrupt 0 (auch Eingang für Wake up!) IE0 HW 1 000BH Timer 0 Overflow Interrupt TF0 HW 2 0013H Externer Interrupt 1 IE1 HW 3 001BH Timer 1 Overflow Interrupt TF1 HW 4 0023H Serieller Schnittstellen-Interrupt RI / TI SW 5 002BH Timer 2 Overflow / externer Reload-Interrupt TF2 / EXF2 SW 8 0043H A/D-Converter Interrupt IADC SW 9 004BH Externer Interrupt 2 IEX2 HW 10 0053H Externer Interrupt 3 / Compare Ereignis mit CRC IEX3 HW 11 005BH Externer Interrupt 4 / Compare Ereignis mit CC1 IEX4 HW 12 0063H Externer Interrupt 5 / Compare Ereignis mit CC2 IEX5 HW 13 006BH Externer Interrupt 6 / Compare Ereignis mit CC3 IEX6 HW 15 007BH Wake-up vom Software Power Down Interrupt -- 17 008BH CAN-Controller Interrupt -- 18 0093H Synchroner serieller Kanal Interrupt (SSC) TC / WCOL 20 00A3H Externer Interrupt 7 -- 21 00ABH Externer Interrupt 8 -- Tabelle 1.17: Interrupt-Nummern mit zugehörigen Adressen in der Vektortabelle Eine Interrupt-Funktionsdeklaration sieht z.b. so aus: _interrupt(1) _using(2) void timer(void); Mehr Informationen hierzu gibt es im Tasking C-Compiler Manual M_CC51.pdf (Kapitel 3.16) auf der CDROM. Damit der C-Compiler den richtigen Interruptvektor erzeugen kann, wird die Interrupt-Nummer n (Interrupt_ID) verwendet. Der Platz für den Interruptvektor wird dann über folgende Formel berechnet: Vektor_Addresse = 8 * n + 3 oder n = (Vektor_Adresse - 3)/8 Prof. Dr.-Ing. Alfred Rożek MC65-Teil6.doc 9/10

Programmbeispiel 1: ISR mit Registerbankumschaltung ;***** Interruptroutine mit Registerbankumschaltung ***** ; Reg_Bank_0 equ 00000000b ;Registerbank für Hauptprogramm Reg_Bank_1 equ 00001000b ;Registerbank für Interrupts der Priorität 0 Reg_Bank_2 equ 00010000b ;Registerbank für Interrupts der Priorität 1 Reg_Bank_3 equ 00011000b ;frei ISR_x: ;Start der Interrupt-Service-Routine Push PSW ;PSW auf Stack retten Push ACC ;Accu auf Stack retten mov PSW,#Reg_Bank_1 ;ISR mit Priorität 0 ;***** Hier steht das Interrupt-Programm ;***** Ende der ISR -> Wiederherstellung der Registerinhalte pop ACC pop PSW reti Programmbeispiel 2: ISR (manuelle Register-Rettung) ;***** Interruptroutine die Register und SFR rettet ***** ; ISR_x: ;Start der Interrupt-Service-Routine push ACC ;Accu auf Stack retten push PSW ;PSW auf Stack retten mov PSW,#Reg_Bank_0 ;Auf Bank 0 umschalten push 01h ;Register R1 in Bank 0 retten push DPH ;DPTR-High-Byte retten push DPL ;DPTR-Low-Byte retten ;***** Hier beginnt das Interruptprogramm ;***** Ende der ISR -> Wiederherstellen der Register pop DPL ;Alle Register in umgekehrter pop DPH ;Reihenfolge wie sie gerettet wurden pop 01h ;wieder vom Stack holen pop PSW pop ACC reti Prof. Dr.-Ing. Alfred Rożek MC65-Teil6.doc 10/10