E Mikrocontroller-Programmierung E.1 Überblick

E Mikrocontroller-Programmierung
E Mikrocontroller-Programmierung
E.1 Überblick
■ Mikrocontroller-Umgebung
➤ Prozessor am Beispiel AVR-Mikrocontroller
➤ Speicher
➤ Peripherie
■ Programmausführung
➤ Programm laden
➤ starten
➤ Fehler zur Laufzeit
■ Interrupts
SPiC
➤ Grundkonzepte
➤ Nebenläufigkeit
➤ Umgang mit Nebenläufigkeit
Systemnahe Programmierung in C
 Jürgen Kleinöder • Universität Erlangen-Nürnberg • Informatik 4, 2009
E-Mikrocontroller.fm 2009-05-06 09.35
E.1
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
E.1 Überblick
1 Mikrocontroller-Umgebung
■ Programm läuft "nackt" auf der Hardware
➥ Compiler und Binder müssen ein vollständiges Programm erzeugen
➤ keine Betriebssystemunterstützung zur Laufzeit
◆ Funktionalität muss entweder vom Anwender programmiert werden oder in
Form von Funktionsbibliotheken zum Programm dazugebunden werden
◆ Umgang mit "lästigen Programmierdetails" (z. B. bestimmte Bits setzen) wird
durch Makros erleichtert
■ Es wird genau ein Programm ausgeführt
➤ Programm kann zur Laufzeit "niemanden stören"
➤ Fehler betreffen nur das Programm selbst
➤ keine Schutzmechanismen notwendig
SPiC
➥ ABER: Fehler ohne direkte Auswirkung werden leichter übersehen
Systemnahe Programmierung in C
 Jürgen Kleinöder • Universität Erlangen-Nürnberg • Informatik 4, 2009
E-Mikrocontroller.fm 2009-05-06 09.35
E.2
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
E.2 Beispiel: AVR-Mikrocontroller (ATmega-Serie)
E.2 Beispiel: AVR-Mikrocontroller (ATmega-Serie)
1 Architektur
32 Register 00 - 1F
64 I/O Register 20 - 5F
160 Ext. I/O Reg. 60 - FF
00 - 44
Interrupt-Vektor
0x0046 main-Funktion
...
Speicher für
AnwendungsCode
Recheneinheit
Interner Speicher
0100
10FF
1100
Externer Speicher
0xFFFF
Boot-Code
Programmadressraum
(8 - 128 kB)
2 Byte pro Adresse
FFFF
Datenadressraum
(8 - 128 kB)
SPiC
■ Getrennter Speicher für Programm (Flash-Speicher) und Daten (SRAM)
■ Register des Prozessors und Register für Ein-/Ausgabe-Schnittstellen
sind in Adressbereich des Datenspeichers eingebettet
Systemnahe Programmierung in C
 Jürgen Kleinöder • Universität Erlangen-Nürnberg • Informatik 4, 2009
E-Mikrocontroller.fm 2009-05-06 09.35
E.3
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
E.2 Beispiel: AVR-Mikrocontroller (ATmega-Serie)
1 Architektur(2)
■ Peripherie-Bausteine werden über I/O-Register angesprochen
bzw. gesteuert (Befehle werden in den Bits eines I/O-Registers kodiert)
➤ mehrere Timer
(Zähler, deren Geschwindigkeit einstellbar ist und die bei einem
bestimmten Wert einen Interrupt auslösen)
➤ Ports
(Gruppen von jeweils 8 Anschlüssen, die auf 0V oder Vcc gesetzt, bzw.
deren Zustand abgefragt werden kann)
➤ Output Compare Modulator (OCM)
(zur Pulsweitenmodulation)
➤ Serial Peripheral Interface (SPI)
➤ Synchrone/Asynchrone serielle Schnittstelle (USART)
➤ Analog-Comparator
SPiC
➤ A/D-Wandler
➤ EEPROM
(zur Speicherung von Konfigurationsdaten)
Systemnahe Programmierung in C
 Jürgen Kleinöder • Universität Erlangen-Nürnberg • Informatik 4, 2009
E-Mikrocontroller.fm 2009-05-06 09.35
E.4
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
E.2 Beispiel: AVR-Mikrocontroller (ATmega-Serie)
2 In Speicher eingebettete Register
(memory mapped registers)
■ Je nach Prozessor sind Zugriffe auf I/O-Register auf zwei Arten realisiert:
◆ spezielle Befehle (z. B. in, out bei x86)
◆ in den Adressraum eingebettet, Zugriff mittels Speicheroperationen
■ Bei den meisten Mikrocontrollern sind die Register in den
Speicheradressraum eingebettet
■ Zugriffe auf die entsprechende Adresse werden auf das entsprechende
Register umgeleitet
SPiC
➥ sehr einfacher und komfortabler Zugriff
Systemnahe Programmierung in C
 Jürgen Kleinöder • Universität Erlangen-Nürnberg • Informatik 4, 2009
E-Mikrocontroller.fm 2009-05-06 09.35
E.5
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
E.2 Beispiel: AVR-Mikrocontroller (ATmega-Serie)
3 I/O-Ports
■ Ein I/O-Port ist eine Gruppe von meist 8 Anschluss-Pins und dient zum
Anschluss von digitalen Peripheriegeräten
■ Die Pins können entweder als Eingang oder als Ausgang dienen
◆ als Ausgang konfiguriert, kann man festlegen, ob sie eine logische "1" oder
eine logische "0" darstellen sollen
➤ Ausgang wird dann entsprechend auf VCC oder GND gesetzt
◆ als Eingang konfiguriert, kann man den Zustand abfragen
■ Manche I/O Pins können dazu genutzt werden, einen Interrupt
(IRQ = Interrupt Request) auszulösen (externe Interrupt-Quelle)
■ Die meisten Pins können alternativ eine Spezialfunktion übernehmen, da
sie einem integrierten Gerät als Ein- oder Ausgabe dienen können
SPiC
◆ z. B. dienen die Pins 0 und 1 von Port E (ATmega128) entweder als
allgemeine I/O-Ports oder als RxD und TxD der seriellen Schnittstelle
Systemnahe Programmierung in C
 Jürgen Kleinöder • Universität Erlangen-Nürnberg • Informatik 4, 2009
E-Mikrocontroller.fm 2009-05-06 09.35
E.6
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
E.2 Beispiel: AVR-Mikrocontroller (ATmega-Serie)
4 Programme laden
■ generell bei Mikrocontrollern mehrere Möglichkeiten
▲ Programm ist schon da (ROM)
▲ Bootloader-Programm ist da, liest Anwendung über serielle Schnittstelle
ein und speichert sie im Programmspeicher ab
▲ spezielle Hardware-Schnittstelle
➤ "jemand anderes" kann auf Speicher zugreifen
➤ Beispiel: JTAG
SPiC
spezielle Hardware-Komponente im AVR-Chip, die Zugriff auf die
Speicher hat und mit der man über spezielle PINs kommunizieren kann
Systemnahe Programmierung in C
 Jürgen Kleinöder • Universität Erlangen-Nürnberg • Informatik 4, 2009
E-Mikrocontroller.fm 2009-05-06 09.35
E.7
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
E.2 Beispiel: AVR-Mikrocontroller (ATmega-Serie)
5 Programm starten
■ Reset bewirkt Ausführung des Befehls an Adresse 0x0000
➤ dort steht ein Sprungbefehl auf die Speicheradresse einer start-Funktion,
die nach einer Initialisierungsphase die main-Funktion aufruft
➤ alternativ: Sprungbefehl auf Adresse des Bootloader-Programms,
Bootloader lädt Anwendung, initialisiert die Umgebung und springt dann
auf main-Adresse
6 Fehler zur Laufzeit
■ Zugriff auf ungültige Adresse
◆ es passiert nichts:
➤ Schreiben geht in’s Leere
➤ Lesen ergibt zufälliges Ergebnis
SPiC
■ ungültige Operation auf nur-lesbare / nur-schreibbare Register/Speicher
➤ hat keine Auswirkung
Systemnahe Programmierung in C
 Jürgen Kleinöder • Universität Erlangen-Nürnberg • Informatik 4, 2009
E-Mikrocontroller.fm 2009-05-06 09.35
E.8
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
E.3 Interrupts
E.3 Interrupts
1 Motivation
■ An einer Peripherie-Schnittstelle tritt ein Ereignis auf
➤ Spannung wird angelegt
➤ Zähler ist abgelaufen
➤ Gerät hat Aufgabe erledigt (z. B. serielle Schnittstelle hat Byte übertragen,
A/D-Wandler hat neuen Wert vorliegen)
➤ Gerät hat Daten für die Anwendung bereit stehen (z. B. serielle
Schnittstelle hat Byte empfangen)
? wie bekommt das Programm das mit?
➤ Zustand der Schnittstelle regelmäßig überprüfen (= Polling)
➤ Schnittstelle meldet sich von sich aus beim Prozessor und unterbricht den
SPiC
Programmablauf (= Interrupt)
Systemnahe Programmierung in C
 Jürgen Kleinöder • Universität Erlangen-Nürnberg • Informatik 4, 2009
E-Mikrocontroller.fm 2009-05-06 09.35
E.9
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
E.3 Interrupts
1 Motivation (2)
■ Polling vs. Interrupts: Vor und Nachteile
◆ Polling
+ Pollen erfolgt synchron zum Programmablauf,
Programm ist in dem Moment auf das Ereignis vorbereitet
– Interrupts unterbrechen den Programmablauf irgendwo
(asynchron),
sie könnten in dem Augenblick stören
➥ durch die Interrupt-Bearbeitungentsteht Nebenläufigkeit
SPiC
– Pollen erfolgt explizit im Programm und meistens umsonst —
Rechenzeit wird verschwendet
Systemnahe Programmierung in C
 Jürgen Kleinöder • Universität Erlangen-Nürnberg • Informatik 4, 2009
E-Mikrocontroller.fm 2009-05-06 09.35
E.10
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
E.3 Interrupts
1 Motivation (3)
■ Polling vs. Interrupts: Vor und Nachteile
◆ Interrrupts
+ Interrupts melden sich nur, wenn tatsächlich etwas zu erledigen ist
+ Interrupt-Bearbeitung ist in einer Funktion kompakt
zusammengefasst
SPiC
– Polling-Funktionalität ist in den normalen Pragrammablauf
eingestreut — und hat mit der "eigentlichen" Funktionalität dort meist
nichts zu tun
Systemnahe Programmierung in C
 Jürgen Kleinöder • Universität Erlangen-Nürnberg • Informatik 4, 2009
E-Mikrocontroller.fm 2009-05-06 09.35
E.11
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
E.3 Interrupts
2 Implementierung
■ typischerweise mehrere Interrupt-Quellen
■ Interrupt-Vektor
◆ Speicherbereich (Tabelle), der für jeden Interrupt Informationen zur
Bearbeitung enthält
➤ Maschinenbefehl
(typischerweise ein Sprungbefehl auf eine Adresse, an der eine
Bearbeitungsfunktion steht)
oder
➤ Adresse einer Funktion (Interrupt-Handler)
◆ feste Position im Speicher — ist im Prozessorhandbuch nachzulesen
■ Maskieren von Interrupts
➤ Bit im Prozessor-Statusregister schaltet den Empfang aller Interrupts ab
SPiC
➤ zwischenzeitlich eintreffende Interrupts werden gepuffert (nur einer!)
➤ die Erzeugung einzelner Interrupts kann am jeweiligen Gerät unterbunden
werden
Systemnahe Programmierung in C
 Jürgen Kleinöder • Universität Erlangen-Nürnberg • Informatik 4, 2009
E-Mikrocontroller.fm 2009-05-06 09.35
E.12
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
E.3 Interrupts
3 Ablauf
➁ weitere Interrupts werden deaktiviert
➀
➁
➂ aktuelle Position im Programm und Registerinhalte
werden im Datenspeicher gesichert
➃ Eintrag im Interrupt-Vektor ermitteln
➄ Befehl wird ausgeführt bzw.
Funktion aufrufen
➂ ➃
Interrupt-Handler
➀ Gerät löst Interrupt aus,
Ablauf des Anwendungsprogramms wird
unmittelbar unterbrochen
➄
➅
SPiC
➅ am Ende der Bearbeitungsfunktion bewirkt ein
Befehl "Return from Interrupt" die Fortsetzung des
Anwendungsprogramms und die Reaktivierung der
Interrupts
Systemnahe Programmierung in C
 Jürgen Kleinöder • Universität Erlangen-Nürnberg • Informatik 4, 2009
E-Mikrocontroller.fm 2009-05-06 09.35
E.13
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
E.3 Interrupts
4 Pegel- und Flanken-gesteuerte Interrupts
■ Beispiel: Signal eines Tasters
Vcc
GND
Taster drücken
loslassen
■ Flanken-gesteuert
➤ Interupt wird durch die Flanke (= Wechsel des Pegels) ausgelöst
➤ welche Flanke einen Interrupt auslöst kann bei manchen Prozessoren
konfiguriert werden
■ Pegel-gesteuert
➤ solange ein bestimmter Pegel anliegt (hier Pegel = GND) wird immer
SPiC
wieder ein Interrupt ausgelöst
Systemnahe Programmierung in C
 Jürgen Kleinöder • Universität Erlangen-Nürnberg • Informatik 4, 2009
E-Mikrocontroller.fm 2009-05-06 09.35
E.14
Reproduktion jeder Art oder Verwendung dieser Unterlage, außer zu Lehrzwecken an der Universität Erlangen-Nürnberg, bedarf der Zustimmung des Autors.
Download PDF