Interrupts. Funktionsprinzip. Funktionsprinzip. Beispiel in C



Ähnliche Dokumente
Tag 2 Eingabe und Interrupts

Zählen von Objekten einer bestimmten Klasse

1 Einleitung. Lernziele. automatische Antworten bei Abwesenheit senden. Einstellungen für automatische Antworten Lerndauer. 4 Minuten.

Kontakte Dorfstrasse 143 CH Kilchberg Telefon 01 / Telefax 01 / info@hp-engineering.com

Statuten in leichter Sprache

Interrupt-Programmierung

Einführung in die Programmierung

Einführung in die Welt der Microcontroller

II. Daten sichern und wiederherstellen 1. Daten sichern

CMS.R. Bedienungsanleitung. Modul Cron. Copyright CMS.R Revision 1

Grundlagen der Theoretischen Informatik, SoSe 2008

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Lehrer: Einschreibemethoden

Was unterscheidet Microcontroller von einem PC ( Laptop ) oder einem Handy

3.14 Die Programmieroberfläche Programmierung

Erstellen von x-y-diagrammen in OpenOffice.calc

Atmel AVR für Dummies

Delegatesund Ereignisse

1 Vom Problem zum Programm

Benutzerhandbuch - Elterliche Kontrolle

Professionelle Seminare im Bereich MS-Office

Arbeiten mit UMLed und Delphi

MORE Profile. Pass- und Lizenzverwaltungssystem. Stand: MORE Projects GmbH

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Datenexport aus JS - Software

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Der Gabelstapler: Wie? Was? Wer? Wo?

Drucken/Kopieren/Scannen und Störungen am Gerät im Hochschulnetz

Bedienung des Web-Portales der Sportbergbetriebe

Mit dem sogenannten Seriendruck können Etiketten und Briefe mit einer Adressdatei (z. B. Excel) verknüpft werden.

1. Adressen für den Serienversand (Briefe Katalogdruck Werbung/Anfrage ) auswählen. Die Auswahl kann gespeichert werden.

Wie Sie mit Mastern arbeiten

Lieferschein Dorfstrasse 143 CH Kilchberg Telefon 01 / Telefax 01 / info@hp-engineering.com

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1

FH-SY Chapter Version 3 - FH-SY.NET - FAQ -

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Word 2010 Schnellbausteine

Bekannte Effekte bei Soft- und Hardware der ESTEC Datenlogger sowie der PC Auswertesoftware

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

Feiertage in Marvin hinterlegen

Einzel- s und unpersönliche Massen-Mails versenden

Barcodedatei importieren

Workshop. Zeitmanagement Hamburg, 24. November 2004

1. EINLEITUNG 2. GLOBALE GRUPPEN Globale Gruppen anlegen

teamsync Kurzanleitung

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Welche Bereiche gibt es auf der Internetseite vom Bundes-Aufsichtsamt für Flugsicherung?

Erfahrungen mit Hartz IV- Empfängern

Zwischenablage (Bilder, Texte,...)

MSXFORUM - Exchange Server 2003 > SMTP Konfiguration von Exchange 2003

DALI-16B Features ab Firmware V2.31

R. Brinkmann Seite Schriftliche Übung Mathematik Stochastik II (Nachschreiber) Jan. 2007

Professionelle Seminare im Bereich MS-Office

Inventur. Bemerkung. / Inventur

Programmierung Weichenmodul S/D Tafel 1

Microcontroller Kurs Programmieren Microcontroller Kurs/Johannes Fuchs 1

Programme im Griff Was bringt Ihnen dieses Kapitel?

Übung - Konfigurieren einer Windows 7-Firewall

Die Tabellenvorlage im Katalog für Tabellen speichern... 2 Weiteres zu Schnellbausteinkatalogen EDV + Didaktik - Dr. Viola Vockrodt-Scholz

Ein Buch entsteht. Ein langer Weg

Viele Bilder auf der FA-Homepage

Der Kundenmanager. Der Kundenmanager der Firma AED-SICAD ist ein Bestandteil des Web Order System (WOS) und unterscheidet zwischen folgenden Kunden:

Anleitung Postfachsystem Inhalt

Anleitung über den Umgang mit Schildern

Password Depot für ios

MC-Hx 006. Einbindung des MC-Hx Modul als MODBus TCP Slave. MB DataTec GmbH. Stand:

Browsereinstellungen für moneycheck24 in Explorer unter Windows

Handbuch ECDL 2003 Professional Modul 3: Kommunikation Kalender freigeben und andere Kalender aufrufen

Hochschule München, FK 03 FA SS Ingenieurinformatik

Hinweise zur Datensicherung für die - Prüfmittelverwaltung - Inhalt

V o r w o r t. A n l e i t u n g

STORES2. Operation Manual Version Warenretoure mit Zustimmung des Headquarter

Schnellanleitung: Verbuchung von Studien- und Prüfungsleistungen

Broadcasting mit. WhatsApp. Ein neues Tool für die Jugendarbeit.

Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Der Task-Manager

b) Gegeben sei folgende Enumeration: enum SPRACHE {Deutsch, Englisch, Russisch};

Adobe Photoshop CS2, CS3, CS4, CS5 mit Auto-SoftProof-Ansicht

Hohe Kontraste zwischen Himmel und Landschaft abmildern

Sage Treuhandaustausch onesage Version 2.2

Handbuch. Artologik EZ-Equip. Plug-in für EZbooking version 3.2. Artisan Global Software

Hilfedatei der Oden$-Börse Stand Juni 2014

Stepperfocuser 2.0 mit Bootloader

Handbuch ECDL 2003 Basic Modul 6: Präsentation Diagramm auf einer Folie erstellen

Geld Verdienen im Internet leicht gemacht

Anleitung für die Teilnahme an den Platzvergaben "Studio II, Studio IV und Studio VI" im Studiengang Bachelor Architektur SS15

Stand: Adressnummern ändern Modulbeschreibung

Informationen zum Ambulant Betreuten Wohnen in leichter Sprache

Häufig gestellte Fragen

Angaben zu einem Kontakt...1 So können Sie einen Kontakt erfassen...4 Was Sie mit einem Kontakt tun können...7

15.3 Bedingte Wahrscheinlichkeit und Unabhängigkeit

Arbeitsgruppen innerhalb der Website FINSOZ e.v.

Anleitung zur Erstellung von Serienbriefen (Word 2003) unter Berücksichtigung von Titeln (wie Dr., Dr. med. usw.)

Ist Fernsehen schädlich für die eigene Meinung oder fördert es unabhängig zu denken?

Bedienungsanleitung Albumdesigner. Neues Projekt: Bestehendes Projekt öffnen:

Handbuch Fischertechnik-Einzelteiltabelle V3.7.3

ecaros2 Installer procar informatik AG 1 Stand: FS 09/2012 Eschenweg Weiterstadt

Daten sammeln, darstellen, auswerten

Funktionsbeschreibung Website-Generator

Transkript:

Interrupts Funktionsprinzip Interrupts bei ATmega128 Beispiel in C Funktionsprinzip 1

Was ist ein Interrupt? C muss auf Ereignisse reagieren können, z.b.: - jemand drückt eine Taste - USART hat Daten empfangen - im ADC steht ein Wandlungsergebnis bereit Möglichkeiten des C: - aktiv auf ein Ereignis warten (Polling) Nachteil: C kann nichts anderes machen und muss nacheinander auf Ereignisse warten - von einem Ereignis benachrichtigt werden (Interrupt) C bearbeitet ein Programm, unterbricht bei eingehender Benachrichtigung die Bearbeitung, reagiert auf das Ereignis und nimmt danach die Bearbeitung des ursprünglichen Programms an der gleichen Stelle wieder auf Vorteil: C kann andere Aufgaben bearbeiten und mehrere Quellen können in beliebiger Reihenfolge Ereignisse auslösen Funktionsprinzip C PC IRQ IACK Datenbus 1 2 3 6 ROM 4 5 Interrupt- Service- Routine ISR1 0 Adresse IACK IRQ Datenbus IACK IRQ Datenbus ISR0 Adresse Interrupt-Vektor 0 Interrupt-Vektor 1 1 ISR1 2 Adresse Interrupt-Quellen (ext. Geräte, interne IO-Komponenten, Timer,...) ISR2 3 Adresse ISR3 Interrupt-Vektor- Tabelle 2

Funktionsprinzip (Erläuterung) 1. Interrupt-Quelle schickt einen Interrupt-Request über die IRQ- Leitung an C (Ereignis) C schickt über IACK-Leitung ein Interrupt- Acknowledge (ok) an die Quelle, falls der Interrupt zugelassen ist 3. Interrupt-Quelle legt ihren Interrupt-Vektor (eindeutige Kennung der Quelle) auf den Datenbus C sucht aus der Interrupt-Vektortabelle die Adresse der zum Interrupt-Vektor zugehörigen Interrupt-Service-Routine heraus (ISR, spezielles Unterprogramm zur Reaktion auf das Ereignis) C legt den aktuellen Inhalt des Program Counter (PC) auf den Stack und lädt den PC mit der Adresse der ISR C arbeitet die ISR ab (unterbricht Abarbeitung des aktuellen Programms) Nach Abarbeitung der ISR wird der alte Inhalt des PC wieder vom Stack geholt und der C bearbeitet das ursprüngliche Programm weiter Interrupt-Management Interrupt-Vektoren werden priorisiert - Priorität des Interrupt-Vektors entscheidet bei gleichzeitigem Eintreffen mehrerer Interrupts, welcher zuerst bearbeitet wird - bei Atmel-Controllern gilt: der Interrupt-Vektor mit der kleineren Nummer (niedrigeren Adresse) hat die höhere Priorität - die "unterlegene" Interrupt-Quelle hält ihren Interrupt-Request aufrecht und C bearbeitet IRQ später nicht-maskierbare Interrupts können jederzeit auftreten (z.b. bei Reset, schwerem Fehler) maskierbare Interrupts können zugelassen oder nicht zugelassen werden - um z.b. zu verhindern, dass die Bearbeitung einer ISR durch einen neuen IRQ unterbrochen wird - globales Erlauben/Verbieten von Interrupts (I-Flag im Status- Register) - quellenspezifisches Erlauben/Verbieten von Interrupts (xien-bits in Steuerregistern von Interrupt-Quellen) 3

Wann tritt ein Interrupt auf? wenn: I-Flag = 1 (SREG): Interrupts C-weit erlaubt sind und quellenspezifisches Interrupt-Enable-Bit (xie) für entsprechendes Ereignis gesetzt ist, z.b. - USART-Interrupt (Enable Bits): Receive Complete (RXCIE), Transmit Complete (TXCIE), Data Register Empty (UDRIE) - ADC -Interrupt (Enable Bit): ADIE (Conversion complete) und Quelle einen Interrupt-Request sendet Interrupts bei ATmega128 4

Programmieren mit Interrupts ATmega128 Interrupts erlauben I-Flag in SREG setzen Befehl C: sei(); //set enable interrupt quellespezifischen Interrupt freischalten Maskenbits setzen z.b. ADC: ADIE... Conversion complete Interrupt Enable ISR einbinden Die ISR muss an der Adresse im ROM zu finden sein, die im Datenblatt (Interrupt-Vektortabelle) für den speziellen Interrupt definiert ist C: in \io\interrupt.h t ist ein Makro ISR(interrupt_vektor) definiert, das die ISR richtig einbindet ISR programmieren ISR einbinden Interrupt-Vektor-Tabelle datasheet. ATmega128.pdf S. 60/61 Adressen sind als Konstanten definiert (in avr\interrupt.h) C: interruptvektorname= Name_aus_dieser_Tabelle + _vect z.b. ADC_vect, USART0_TX_vect, TIMER0_OVF_vect 5

ISR einbinden in C AVR-Lib stellt Funktionalität zum Interrupt-Handling zur Verfügung - Einbinden von avr/interrupt.h Makro sorgt für Einbindung der Interrupt-Service- Routine ISR(interruptvektorname_vect) { // tu was, aber fass Dich kurz interrupt_vektorname t - ist eindeutig für jede mögliche Interrupt-Quelle - kann dem Datenblatt (siehe Ausschnitt auf Folie Interrupt- Vektor-Tabelle) entnommen werden - ACHTUNG! Compiler warnt, wenn Name falsch geschrieben ISR einbinden Beispiel in C Interrupt-Service-Routine für ADC - sieht aus wie eine Funktion ohne Parameter und Rückgabewert - wird aufgerufen, sobald der ADC eine Wandlung fertig hat (Messwert steht zur Verfügung) #include <avr/interrupt.h> // I-Flag in SREG setzen sei(); // Interrupt für ADC // einschalten ADCSRA = (1 << ADIE); // Interrupt-Serviceroutine (ISR) ISR(ADC_vect) { // tu was Interrupts erlauben quellespezifischen Interrupt freischalten ISR einbinden ISR programmieren 6

Eigenschaften ISR unterbricht an beliebigen bi Stellen das Hauptprogramm! darf keine Register verändern (in ASM Registerinhalte auf Stack retten und wiederherstellen!) darf das Statusregister nicht verändern (in ASM SREG auf Stack retten und wiederherstellen!) muss so kurz wie möglich sein - keine aufwändigen Schleifen! Race-conditions müssen vermieden werden! ISR programmieren in C Register und SREG werden automatisch beim Eintritt in die ISR gesichert und hinterher wiederhergestellt Interrupts werden bei Eintritt in die ISR automatisch verboten (I-Flag) auf 0 und hinterher wieder erlaubt sollen Daten mit dem Hauptprogramm ausgetauscht werden, erfolgt das über globale Variablen (ISR hat keinen Rückgabewert) volatile unsigned char g_value=0; int main(void){... while(1){ PORTB = ~g_value; ISR und Hauptprogramm haben Zugriff auf ISR(ADC_vect){ g_value= ADCH; die globale Variable, welche außerhalb jedes Blocks deklariert wird -> Datenaustausch zwischen ISR und main (oder Funktionen) ist möglich 7

Race-Condition-Problem tritt auf, wenn mehrere Interrupt-Quellen Interrupts auslösen können falls die ISR voneinander abhängig sind, kann es zur Race- Condition kommen, z.b. : 1. Zähler Z=0 -> SRAM 2. ISR1: liest Z=0 aus SRAM, inkrementiert Z -> Z=Z+1, speichert Z =1 3. ISR2: liest Z=1 aus SRAM, inkrementiert Z um 2 -> Z=Z+2, speichert Z=3 4. ISR1:... wenn ISR2 ISR1 unterbricht: 1. Zähler Z=0 -> SRAM 2. ISR1: liest Z=0 aus SRAM, inkrementiert Z -> Z=Z+1 3. ISR2: liest Z=0 aus SRAM, inkrementiert Z -> Z=Z+2, speichert Z=2 4. ISR1: speichert Z -> Z=1 Abhilfe: Critical section Critical Section Geschützter Bereich ISR(xx1_vect) { cli(); //Interrupts t verbieten Z=Z+1; sei(); //Interrupts erlauben bei ATMEL-Prozessoren wird das I-Flag automatisch be o esso e d das ag auto at sc bei Eintritt in die ISR gelöscht (alle Interrupts verboten) und bei Austritt aus der ISR wieder gesetzt Race-Conditions sind hier nur möglich, wenn man Interrupts in der ISR bewusst zulässt 8

Beispiele in C (mit ADC) Beispiel1: - Interrupt-Service-Routine: Messung der Spannung am Poti und Ausgabe der Binärwerte (höchstwertige 8 Bit) auf LEDs - Hauptschleife im main: tut nichts Beispiel2: - Interrupt-Service-Routine: startet Messung, misst die Spannung am Poti (7 höchstwertige Bit) und berechnet einen Wert, der die 8. LED nach x Messungen toggelt - Hauptschleife im main: setzt Messwert und Toggle-Wert zusammen und gibt sie auf die LEDs aus 9