19
Institut f¨ ur Informatik Professur f¨ ur Eingebettete Systeme Praktikum Mikrocontroller und Eingebettete Systeme Wintersemester 2012/2013 Eingebettete Systeme Prof. Dr. Uwe Brinkschulte Dipl.-Inform. Daniel Lohn M. Sc. Benjamin Betting Dipl.-Inform. Michael Bauer

Praktikum Mikrocontroller und Eingebettete · PDF fileAllzweck-/Mehrzweck-Rechner abgrenzen wollen. ... Einige Eingebetteten Systeme k onnen also durchaus dieselbe Komplexit at wie

Embed Size (px)

Citation preview

Page 1: Praktikum Mikrocontroller und Eingebettete · PDF fileAllzweck-/Mehrzweck-Rechner abgrenzen wollen. ... Einige Eingebetteten Systeme k onnen also durchaus dieselbe Komplexit at wie

Institut fur InformatikProfessur fur Eingebettete Systeme

PraktikumMikrocontroller und Eingebettete Systeme

Wintersemester 2012/2013

Eingebettete Systeme

Prof. Dr. Uwe Brinkschulte

Dipl.-Inform. Daniel Lohn

M. Sc. Benjamin Betting

Dipl.-Inform. Michael Bauer

Page 2: Praktikum Mikrocontroller und Eingebettete · PDF fileAllzweck-/Mehrzweck-Rechner abgrenzen wollen. ... Einige Eingebetteten Systeme k onnen also durchaus dieselbe Komplexit at wie

Inhaltsverzeichnis

1 Einfuhrung 4

2 Das Praktikumsboard 5

3 JTAG ICE mkIII 83.1 Nutzen eines JTAG-Programmers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83.2 Anschluss des JTAG-Programmers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

4 Atmel-Studio 104.1 Anlegen eines neuen Projekts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114.2 Die Entwicklungsumgebung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124.3 Kompilieren und Ausfuhren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134.4 Debuggen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

5 Assemblerprogrammierung 165.1 Warum Assemblerprogrammierung? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165.2 Der AVR-Assembler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

5.2.1 Direktive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175.2.2 Mnemoniks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185.2.3 Ein Beispielprogramm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2

Page 3: Praktikum Mikrocontroller und Eingebettete · PDF fileAllzweck-/Mehrzweck-Rechner abgrenzen wollen. ... Einige Eingebetteten Systeme k onnen also durchaus dieselbe Komplexit at wie

Abbildungsverzeichnis

1 TQFP-Gehauseformat eines Mikrocontrollers. . . . . . . . . . . . . . . . . . . . . . . . . . 52 Die verschiedenen Anschlusse des STK600. . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Das Praktikumsboard mit angschlossenem JTAG-Programmer. . . . . . . . . . . . . . . . 94 Anlegen eines neuen Projekts im Atmel-Studio. . . . . . . . . . . . . . . . . . . . . . . . . 115 Auswahl der Zielplattform. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Die Entwicklungsumgebung des Atmel-Studios. . . . . . . . . . . . . . . . . . . . . . . . . 127 Einstellung von weiteren Projekteigenschaften. . . . . . . . . . . . . . . . . . . . . . . . . 138 Auswahl des Programmiergerats. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Debugging eines Projekts im Atmel-Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3

Page 4: Praktikum Mikrocontroller und Eingebettete · PDF fileAllzweck-/Mehrzweck-Rechner abgrenzen wollen. ... Einige Eingebetteten Systeme k onnen also durchaus dieselbe Komplexit at wie

1 Einfuhrung

Ziel dieses Praktikums ist ein vertiefter Einblick in die Funktionsweise eingebetteter Systeme.Im Mittelpunkt des Praktikums stehen Eingebette Systeme und deren Hardware. Um die speziellen

Anforderungen Eingebetteter Systeme an ihre Hardware zu verstehen muss deren Anwendungsgebiet vondem herkommlicher Rechensysteme abgegrenzt werden. Diese Abgrenzung liefert uns die Definition vonEingebetteten Systemen.

Eine haufig verwendete Definition nach Thaller lautet: ”Bei Eingebetteten Systemen handelt es sichum einen durch Software kontrollierten Computer oder Mikroprozessor, der Teil eines großeren Systemsist, dessen primare Funktion nicht rechenorientiert ist.”

Eine etwas anschaulicherer und ausfuhrlichere Definition findet sich auf Wikipedia: ”Der Ausdruckeingebettetes System (auch engl. embedded system) bezeichnet einen elektronischen Rechner oder auchComputer, der in einen technischen Kontext eingebunden (eingebettet) ist. Dabei hat der Rechner ent-weder die Aufgabe, das System, in das er eingebettet ist, zu steuern, zu regeln oder zu uberwachen.Oder der Rechner ist fur eine Form der Daten- bzw. Signalverarbeitung zustandig, beispielsweise Ver-/Entschlusseln, De-/Codieren oder Filtern.”

Beiden Definitionen ist gemeinsam, dass sie das Feld der Eingebetteten Systeme vom Bereich derAllzweck-/Mehrzweck-Rechner abgrenzen wollen. Dieser Ubergang gestaltet sich allerdings fließend: Konn-ten Handys zu ihrer Anfangszeit wenig mehr als Stimmen zu digitalisieren und Daten zu senden, konnensie heute dank Minibetriebssystemen und Java Applets beliebige Programme ausfuhren. Waren Spielekon-solen anfangs nur wenig komplexer als Taschenrechner, konnen sie heute mit Standardbetriebsystemenausgestattet werden und bleiben im Leistungsumfang kaum hinter Desktop Rechnern zuruck.

Einige Eingebetteten Systeme konnen also durchaus dieselbe Komplexitat wie Mehrzweckrechnererreichen und in manchen Fallen auch zu solchen werden.

In unserem Alltag begegnen wir allerdings am haufigsten einer anderen Art von Eingebetteten Sy-stemen. Einfache und deshalb auch billige Rechensysteme sind in Spulmaschinen, Kaffeeautomaten oderdigitalen Armbanduhren zu finden und damit beinahe allgegenwartig. Bei solchen Systemen reicht haufigschon ein einzelner Mikrocontroller ohne Betriebssystem aus, um die gewunschte Funktion zu realisieren.

Um einen hardwarenahen Einblick in das Gebiet der Eingebetten Systeme zu bieten, steht deshalb imPraktikum ein Versuchsboard mit integriertem ATmega128 Mikrocontroller und verschiedenen Periphe-rieanschlussen zu Verfugung. Der ATmega128 enthalt einen relativ einfachen 8-Bit RISC-Prozessorkern.Dies ermoglicht es auch unerfahrenen Anwendern Programme direkt in Assembler zu verfassen und so diewichtigsten Komponenten eines Mikrocontrollers kennenzulernen und direkt anzusteuern. Die Lernzieledes Praktikums lassen sich wie folgt zusammenfassen:

• Detaillierte Einfuhrung in Aufbau und Programmierung des ATmega128.

• Einsatz der parallelen und der seriellen Schnittstellen des Mikrocontrollers zur Kommunikation mitanderen Rechnern.

• Einsatz von Zahlern und Zeitgebern im Zusammenspiel mit Unterbrechungsbehandlung, um bei-spielsweise eine Pulsweitenmodulation zu realisieren.

• Anbindung eines externen Speichers an das Mikrocontrollerboard und Implementierung eines ein-fachen Treibers inklusive Funktionstest.

4

Page 5: Praktikum Mikrocontroller und Eingebettete · PDF fileAllzweck-/Mehrzweck-Rechner abgrenzen wollen. ... Einige Eingebetteten Systeme k onnen also durchaus dieselbe Komplexit at wie

2 Das Praktikumsboard

Ein Mikrocontroller stellt im Prinzip einem Mikrorechner auf einen Chip dar. Im Praktikum wird derMikrocontroller ATmega128 von Atmel verwendet. Auf diesem befindet sich ein Prozessorkern, Speicher,Ein-/Ausgabeschnittstellen und weitere Komponenten wie A/D-Wandler, Zahler-/Zeitgeber und die Un-terbrechungssteuerung. Die Schnittstellen fur alle Komponenten werden uber Pins an die Außenseite desControllers gefuhrt:

Abbildung 1: TQFP-Gehauseformat eines Mikrocontrollers.

Um an die Ein-/Ausgabeschnittstellen des ATmega128 Peripherie, wie Taster oder LEDs anzuschlie-ßen, oder um auf den Programmspeicher zugreifen zu konnen, muss der Mikrocontroller in eine großereSchaltung integriert werden. So lasst sich beispielsweise ein Nullmodemkabel naturlich nicht direkt an dieControllerpins fur die USART-Einheit anschließen. Zu diesem Zweck gibt es eine ganze Reihe unterschied-licher Experimentierboards, die sich in Umfang der integrierten Peripherie, Programmierschnittstellenund Erweiterungsmoglichkeiten unterscheiden.

Als Praktikumshardware hat man sich fur ein modulares Kit von Atmel entschieden. Das darin ent-haltene STK600 bietet gleich mehrere Vorteile:

• LEDs und Taster als Ansteuerungs- und Ausgabemoglichkeiten sind bereits auf dem Board inte-griert.

• Eine RS232-Schnittstelle zur seriellen Kommunikation mit anderen Boards oder einem PC.

• Ein JTAG-Anschluss zur Programmierung und Debugging zur Laufzeit ist integriert.

• Der Mikrocontroller ist nicht fest mit dem Board verlotet, sondern steckt in einer Federhalterung,so dass er problemlos durch einen anderen Mikrocontroller ersetzt werden kann.

5

Page 6: Praktikum Mikrocontroller und Eingebettete · PDF fileAllzweck-/Mehrzweck-Rechner abgrenzen wollen. ... Einige Eingebetteten Systeme k onnen also durchaus dieselbe Komplexit at wie

• Samtliche Pins des Mikrocontrollers sind auf dem Board auf solide Kontaktstecker gefuhrt undlassen sich so fur beliebige Peripheriegerate nutzen.

• Da der Platz am Gehause des Mikrocontrollers sehr begrenzt ist, sind viele der Leitungen gemul-tiplext. Abhangig davon, welche Komponente des Mikrocontrollers im Programm benotigt wird,lasst sich dies durch neue Steckverbindungen realisieren.

Der modulare Aufbau des Boards gestaltet zwar den Betrieb im Praktikum schwieriger, als bei einer festenVerdrahtung, erlaubt aber auch die Erweiterbarkeit um beliebige Zusatzperiperie und die Moglichkeitgemultipelexte Komponenten je nach Bedarf zu nutzen, ohne sich dauerhaft festlegen zu mussen.

Die wichtigsten Anschlusse des STK600 sind:

Abbildung 2: Die verschiedenen Anschlusse des STK600.

1. Die Stromversorgung fur das gesamte Board, einschließlich des Mikrocontrollers, der Taster, LEDsund Zusatzperipherie.

2. Schalter zum Ein- und Ausschalten der Stromversorgung des Boards.

3. Ein serieller Anschluss, der fur die Versuche mit der USART-Einheit benotigt wird.

4. In dieser Federhalterung befindet sich der ATmega128. Wird der obere Rahmen nach unten ge-druckt, offnet sich die Halterung fur die Pins und der Mikrocontroller kann entnommen oder gegeneinen anderen ausgetauscht werden.

6

Page 7: Praktikum Mikrocontroller und Eingebettete · PDF fileAllzweck-/Mehrzweck-Rechner abgrenzen wollen. ... Einige Eingebetteten Systeme k onnen also durchaus dieselbe Komplexit at wie

5. An den ATmega128 wird der JTAG-Programmer uber diese 10-polige Steckleiste angeschlossen. Pin1 und 2 sind sowohl auf dem STK600, als auch am Anschluss des JTAG-Programmers gesondertgekennzeichnet.

6. Verbindungsports zu den Pins des Mikrocontrollers.

7. Dies sind die acht Taster des Boards.

8. Der Anschluss fur die Taster des Boards. Sie konnen mit einem beliebigen Port des Mikrocontrollersverbunden werden.

9. Die acht LEDs des STK600

10. Der Anschluss fur die LEDs des Boards. Sie konnen mit einem beliebigen Port des Mikrocontrollersverbunden werden.

11. RXD- und TXD-Leitung der seriellen Schnittstelle.

7

Page 8: Praktikum Mikrocontroller und Eingebettete · PDF fileAllzweck-/Mehrzweck-Rechner abgrenzen wollen. ... Einige Eingebetteten Systeme k onnen also durchaus dieselbe Komplexit at wie

3 JTAG ICE mkIII

3.1 Nutzen eines JTAG-Programmers

Die JTAG-Schnittstelle wurde ursprunglich entwickelt, um die korrekte Funktion von Schaltungen nachder Endfertigung zu uberprufen. Dazu mussen die Integrierten Schaltungen (ICs) mit zusatzlichen JTAG-Testschaltkreisen versehen werden. Uber diese Zusatzschaltkreise lasst sich die eigentliche Schaltung aus-lesen und integrierte Speicherzellen beschreiben. So kann nach Fertigung und Einbau der ICs in großereSysteme die Funktionalitat mit Hilfe von Testprogrammen uberpruft und fehlerhafte Schaltkreise ausfin-dig gemacht werden.

Die Moglichkeiten, die sich durch das Auslesen und Beschreiben der Register und Speicherzellenergeben, sind weit großer, als das Testen auf korrekte Funktionalitat. Da der Zugriff auf die Schaltungennicht an spezielle Testsoftware auf dem Chip oder einen eingeschrankten Testmodus beschrankt ist, kannder ursprunglich nur zur Fertigungskontrolle gedachte JTAG-Anschluss auch dazu verwendet werden,den Mikrocontroller zu programmieren, also den kompilierten Quellcode in dem Programmspeicher desMikrocontrollers abzulegen.

Desweiteren bietet die JTAG-Schnittstelle eine komfortable Moglichkeit zum Debuggen zur LaufzeitDie Programmausfuhrung kann zu jeder Zeit unterbrochen werden und samtliche Register konnen aus-gelesen werden, oder mit neuen Werten uberschrieben werden.

Das im Praktikum verwendete Atmel-Studio bietet eine Ubersicht uber samtliche Komponenten undEinheiten des verwendeten Mikrocontrollers. Die vom Programmer uber die JTAG-Schnittstelle erhalte-nen Daten lassen sich so ubersichtlich und leicht verstandlich darstellen. Auf diese Weise bietet der JTAGICE mkIII im Zusammenspiel mit dem Atmel-Studio gleich mehrere Vorteile fur die Praktikumsteilneh-mer:

• Der Programmcode kann auf dem Prozessor schrittweise ausgefuhrt und auch angehalten werden.Registerinhalte und Speicherstellen konnen jederzeit wahrend der Programmausfuhrung gelesenund geschrieben werden. Dies erleichtert die Fehlersuche in Programmen enorm. Gerade fur inAssemblerprogrammierung unerfahrene Anwender ist dies ein nicht zu unterschatzender Vorteil.

• Da auch die Prozessorflags modifiziert werden konnen, lassen sich z.B. alternative Sprungrichtungenoder Programmverzweigungen auch dann testen, wenn die Bedingungen dafur eigentlich nicht erfulltsind.

• Da samtliche Kontrollregister wahrend des Programmablaufs einsehbar sind, lasst sich die Funkti-onsweise der Mikrocontrollerkomponenten einfacher nachvollziehen. Komponenten, wie die Zahler-/Zeitgebereinheiten, lassen sich uber ihre Kontrollregister jederzeit in einen gewunschten Zustandversetzen. Folgezustande und ausgeloste Interrupt Service Routinen lassen sich so Schritt fur Schrittabarbeiten und beobachten. Dies erleichtert das Verstandnis fur das Zusammenspiel zwischen Soft-ware und den Hardwareeinheiten sehr.

3.2 Anschluss des JTAG-Programmers

Der JTAG-Programmer wird zwischen Entwicklungs- und Zielplattform geschaltet. Er ubernimmt somitdie Kommunikation zwischen dem Atmel-Studio und dem Mikrocontroller.

8

Page 9: Praktikum Mikrocontroller und Eingebettete · PDF fileAllzweck-/Mehrzweck-Rechner abgrenzen wollen. ... Einige Eingebetteten Systeme k onnen also durchaus dieselbe Komplexit at wie

Abbildung 3: Das Praktikumsboard mit angschlossenem JTAG-Programmer.

An den PC wird der JTAG ICE mkIII uber ein USB-Kabel angeschlossen. Er wird automatisch erkanntund benotigt keine separate Stromversorgung.

An den Mikrocontroller wird der JTAG-Programmer uber eine 10-polige Steckleiste auf der Oberseitedes STK600 angeschlossen. Pin 1 und 2 sind sowohl auf dem STK600, als auch am JTAG ICE mkIII-Anschluss gesondert gekennzeichnet (die Schrift am Stecker des Programmers muss zum Rand des STK600zeigen).

Fur den Betrieb des JTAG ICE mkIII sind drei, auf der Oberseite befindliche LEDs wichtig. Dieseliefern Informationen uber den aktuellen Status des Programmers, der Verbindung und des Target Device.

• LED 1 leuchtet grun, wenn die Stromversorgung am Zielgerat steht. Bei der im Praktikum verwen-deten Hardware zeigt diese LED also an, ob der Mikrocontroller am STK600 richtig angeschlossenist und mit Spannung versorgt wird.

• LED 2 leuchtet rot, wenn die Stromversorgung des Programmers steht. Dies geschieht nach demEinschaltet des Arbeits-PCs auch ohne zusatzliches Stromkabel am JTAG ICE mkIII automatisch,da die Stromversorgung uber den USB-Anschluss ausreicht.

• LED 3 leuchtet grun, wenn Daten ubertragen werden, gelb bei Firmwareupdates und wahrend derInitialisierung und rot, wenn die Verbindung zum Atmel-Studio nicht steht. Die LED leuchtet nicht,wenn die Verbindung zum Atmel-Studio steht, aber keine Daten ubertragen werden.

9

Page 10: Praktikum Mikrocontroller und Eingebettete · PDF fileAllzweck-/Mehrzweck-Rechner abgrenzen wollen. ... Einige Eingebetteten Systeme k onnen also durchaus dieselbe Komplexit at wie

4 Atmel-Studio

Das wichtigste Softwaretool fur das Praktikum ist das Atmel-Studio. Es ubernimmt gleich mehrere Auf-gaben:

• Entwicklungsumgebung zum Erstellen, Verwalten und Kompilieren des Programmcodes.

• Kommunikation mit dem JTAG-Programmer zum Laden des Programmcodes in den ATmega128.

• Ubersicht uber alle Mikrocontrollerkompontenten, Register- und Speicherinhalte, auch wahrend derProgrammausfuhrung.

Von besonderer Bedeutung ist dabei die Kompatibilitat mit dem JTAG ICE mkIII. Das Einbinden desJTAG-Programmers in die Kommunikation mit dem ATmega128 vereinfacht nicht nur das Laden desProgrammcodes in den Mikrocontroller, sondern erlaubt auch Debugging zur Laufzeit. So kann das Pro-gramm, wahrend seiner Ausfuhrung auf dem Mikrocontroller, zu jeder Zeit im Atmel-Studio angehaltenwerden, um die Status-, Kontrollregister und Speicherbereiche auszulesen. Die Register und Speicherinhal-te lassen sich dabei durch die JTAG-Schaltung nicht nur auslesen, sondern auch beschreiben. So konnenzur Laufzeit neue Registerwerte eingegeben, Interruptflags gesetzt und die Sprungrichtung geandert wer-den.Das Atmel-Studio ist also nicht nur die Entwicklungsumgebung, sondern wird auch zum Laden des Pro-grammcodes in den ATmega128 und anschließendem Debuggen zur Laufzeit verwendet.

10

Page 11: Praktikum Mikrocontroller und Eingebettete · PDF fileAllzweck-/Mehrzweck-Rechner abgrenzen wollen. ... Einige Eingebetteten Systeme k onnen also durchaus dieselbe Komplexit at wie

4.1 Anlegen eines neuen Projekts

Nach dem Starten des Atmel-Studios konnen Sie ein neues Projekt anlegen (1), oder ein bereits bestehen-des laden (2). Wenn Sie ein neues Projekt anlegen, wahlen Sie als Programmiersprache Assembler (3) aus.Anschließend mussen Sie noch einen Namen fur Ihr Projekt (4) und den Speicherort (5) angeben. AchtenSie darauf, dass Sie einen Speicherort wahlen, auf den Sie zugriffsberechtigt sind. Uber die Schaltflache

”OK“ gelangen Sie zum nachsten Schritt.

Abbildung 4: Anlegen eines neuen Projekts im Atmel-Studio.

11

Page 12: Praktikum Mikrocontroller und Eingebettete · PDF fileAllzweck-/Mehrzweck-Rechner abgrenzen wollen. ... Einige Eingebetteten Systeme k onnen also durchaus dieselbe Komplexit at wie

Als nachstes muss jetzt die verwendete Zielplattform ausgewahlt werden. In diesem Praktikum verwendenwir den ATmega128. Wahlen Sie diesen aus der Liste aus und bestatigen Sie die Auswahl durch ein klickenauf die Schaltflache

”OK“.

Abbildung 5: Auswahl der Zielplattform.

4.2 Die Entwicklungsumgebung

Dies ist das Hauptfenster des Atmel-Studios. Hier wird der Quellcode eingegeben.

Abbildung 6: Die Entwicklungsumgebung des Atmel-Studios.

12

Page 13: Praktikum Mikrocontroller und Eingebettete · PDF fileAllzweck-/Mehrzweck-Rechner abgrenzen wollen. ... Einige Eingebetteten Systeme k onnen also durchaus dieselbe Komplexit at wie

4.3 Kompilieren und Ausfuhren

Nachdem Sie Ihren Quellcode vollstandig eingegeben haben, konnen Sie ihn nun kompilieren. Danachhaben Sie die Wahl, ob Sie das kompilierte Programm simulieren wollen, oder ob es in den Programm-speicher des ATmega128 auf dem STK600 ubertragen werden soll. Wahlen Sie daher im dem MenuProject den Punkt xy Properties aus.

Abbildung 7: Einstellung von weiteren Projekteigenschaften.

13

Page 14: Praktikum Mikrocontroller und Eingebettete · PDF fileAllzweck-/Mehrzweck-Rechner abgrenzen wollen. ... Einige Eingebetteten Systeme k onnen also durchaus dieselbe Komplexit at wie

Unter dem Menupunkt Tool (1) konnen Sie jetzt das zu verwendende Programmiergerat und die verwen-dete Schnittstelle einstellen. Um auf dem STK600 zu arbeiten, wahlen Sie als Debugger bzw. Programmerden JTAGICE3 (2) und als Interface JTAG (3). Achten Sie darauf, dass die Taktfrequenz fur die JTAG-Schnittstelle (4) maximal 1

4 der Taktfrequenz des ATmega128 sein darf. Alternativ konnen Sie hier auchden Simulator auswahlen, wenn Sie Ihr Programm nicht auf der Hardware ausfuhren lassen wollen.

Abbildung 8: Auswahl des Programmiergerats.

4.4 Debuggen

Auch wenn das Programm syntaktisch korrekt ist, konnen sich, gerade bei komplexeren Programmen,Fehler in der Programmstruktur verstecken. Um diese Fehler zu finden, muss das Programm getestetwerden. Das Atmel-Studio unterstutzt diese Fehlersuche durch einen eingebauten Debugger. Das Pro-gramm kann somit zu jeder Zeit angehalten werden und samtliche Register- und Speicherinhalte konnenausgelesen werden. Außerdem konnen diese Werte auch von Hand verandert, und das Programm danachmit den geanderten Werten fortgesetzt werden.

14

Page 15: Praktikum Mikrocontroller und Eingebettete · PDF fileAllzweck-/Mehrzweck-Rechner abgrenzen wollen. ... Einige Eingebetteten Systeme k onnen also durchaus dieselbe Komplexit at wie

Abbildung 9: Debugging eines Projekts im Atmel-Studio.

Mit der Schaltflache Built (1) wird das Programm kompiliert. Mit der Schaltflache Start Debugging andBreak (2) wird der fertige Befehlsstrom in den Programmspeicher des Mikrocontroller ubertragen, derDebugger gestartet und die Programmausfuhrung sofort unterbrochen. Daneben befinden sich noch dieSchaltflachen um das Programm weiterlaufen zulassen, die Programmausfuhrung zu unterbrechen, einenweiteren Befehl ausfuhren zu lassen oder um Breakpoints zu setzen.Wenn eine Programmausfuhrung momentan unterbrochen ist, zeigt ein kleiner gelber Pfeil (3) an, welcheInstruktion als nachste ausgefuhrt werden wird.In dem Prozessorfenster (4) wird der Inhalt aller Register des Prozessors angezeigt, sowie samtlicheFlags. Wenn sich der Wert eines Registers seit dem letzten Auslesen verandert hat, so wird dieser Wertrot dargestellt.Die I/O-View (5) zeigt samtliche Komponenten, die auf dem Mikrocontroller integriert sind. Wird hiereine bestimmte Komponente ausgewahlt, so wird im Fenter darunter (6) samtliche Register der Kompo-nente und deren Inhalte angezeigt.Der Inhalt des Speichers des Mikrocontrollers wird in Fenster (7) dargestellt. Es konnen sowohl derBefehlsspeicher, als auch der Datenspeicher angezeigt werden.

15

Page 16: Praktikum Mikrocontroller und Eingebettete · PDF fileAllzweck-/Mehrzweck-Rechner abgrenzen wollen. ... Einige Eingebetteten Systeme k onnen also durchaus dieselbe Komplexit at wie

5 Assemblerprogrammierung

5.1 Warum Assemblerprogrammierung?

Da ein Mikrocontroller oder ein Mikroprozessor a priori kein Wissen daruber besitzt, welche Aufgabeer erfullen soll, muss er von einem Menschen dementsprechend programmiert werden. Allerdings ist dasnicht so einfach, da der Mikrocontroller lediglich Maschinencode versteht. Bei diesem Maschinencodehandelt es sich um eine Folge von Operationen, die in der Befehlssatzarchitektur (ISA1) definiert sind,wobei jede Operation binar codiert ist. Allerdings ist so eine lange Folge von binaren Zeichen fur denMenschen nur sehr schwer zu interpretieren, so dass eine Zwischenebene eingefuhrt wurde, die sogenannteAssemblersprache. In der Assemblersprache werden den unterschiedlichen Maschinenbefehlen sogenann-te Mnemonics zugeordnet, die fur den Menschen leichter verstandlich sind und einen Hinweis auf dieFunktionalitat der Operation geben.Das folgende Beispiel soll die bessere Lesbarkeit von Assembler gegenuber Maschinencode verdeutlichen.Es sollen zwei Zahlen, die in den Registern r2 und r1 gespeichert sind, addiert und anschließend dasErgebnis im Register r2 gespeichert werden.

• Assembler: add r2, r1

• Maschinencode: 0000 1100 0010 0001

Durch die Einfuhrung von Hochsprachen, wie zum Beispiel C, C++ oder Java, konnte, von der Assem-blersprache ausgehend, noch weiter abstrahiert werden. Trotzdem wird in manchen Fallen noch immerdie Assemblerprogrammierung verwendet, da sie gegenuber Hochsprachen einige Vorteile besitzt.In Assembler geschriebene Programme sind meist deutlich kleiner und laufen schneller, was besonders beieiner leistungsschwachen Hardware mit wenig Speicher wichtig ist. Da das Programmieren in Assembleraußerdem eine genaue Kenntnis der Hardware erfordert, konnen hardwarespezifische Sonderfunktionen,die ein automatischer Compiler nur selten oder nie verwenden wurde, zur Optimierung genutzt werden.Diesen Vorteilen stehen allerdings auch einige Nachteile entgegen. So ist es zum Beispiel fast unmoglichein geschriebenes Programm auf eine andere Hardware zu portieren, da es fur den Einsatz auf der ur-sprunglichen Hardware optimiert wurde und deshalb große Teile des Programms noch mal neu geschriebenwerden mussten. Außerdem ist es sehr aufwandig Assemblerprogramm zu warten, wenn zum Beispiel einFehler behoben werden muss oder das Programm um eine neue Funktionalitat erweitert werden soll, denndazu wird viel Wissen daruber benotigt, wie das Programm arbeitet. So muss zum Beispiel bekannt sein,welche Register verwendet werden und ob die Registerinhalte spater noch mal benotigt werden.Ein weiterer Punkt, der fur den Einsatz von Assembler in diesem Praktikum spricht, ist, dass die Assem-blerprogrammierung einen guten Einblick in die Funktionsweise der Hardware gibt.

5.2 Der AVR-Assembler

Der AVR-Assembler umfasst insgesamt 133 unterschiedliche Befehle, wobei die meisten nur einen Taktzy-klus zur Ausfuhrung benotigen. Fur jedes Programm wird der Quellcode, also die Assemblerbefehle undKommentare, in einer Datei mit der Endung

”.asm“ gespeichert. Dabei unterscheidet der Assembler nicht

zwischen Groß- und Kleinschreibung. Nach einer erfolgreichen Kompilierung in Maschinencode, kann die-ser in den Codespeicher des Mikrocontrollers ubertragen werden. Sobald der Mikrocontroller mit diesemneuen Programm initialisiert ist, wird der Code sequentiell abgearbeitet, sofern der Programmfluss nichtdurch einen Sprung verandert wird. Außerdem ist zu beachten, dass ein Mikrocontroller immer in einerEndlosschleife arbeitet, d.h. nachdem das Ende des Programms erreicht wurde, beginnt das Programmwieder von neuem.In der Quelldatei darf pro Zeile maximal eine Assembleranweisung stehen. Dabei kann es sich entweder umeine Direktive oder ein Mnemonik handelt. Zusatzlich kann die Zeile noch durch einen Kommentar erganztwerden oder mit einer Sprungmarke beginnen. Eine Sprungmarke endet immer mit einem Doppelpunkt

1ISA : Instruction Set Architecture; Befehlssatzarchitektur

16

Page 17: Praktikum Mikrocontroller und Eingebettete · PDF fileAllzweck-/Mehrzweck-Rechner abgrenzen wollen. ... Einige Eingebetteten Systeme k onnen also durchaus dieselbe Komplexit at wie

und in einem kompletten Assemblerprojekt durfen keine Sprungmarken denselben Namen haben, auchnicht, wenn sie in unsterschiedlichen Quelldateien des Projekts stehen.Kommentare werden immer durch ein Semikolon eingeleitet und gelten dann bis zum Ende der Zeile.Daraus ergeben sich dann die folgenden Strukturen fur eine Zeile2:

[Marke:] .Direktive [Operanden] [; Kommentar]

[Marke:] Mnemonik [Operanden] [; Kommentar]

[Marke:] [; Kommentar]

5.2.1 Direktive

Direktive werden hauptsachlich dazu genutzt, die unterschiedlichen Speicher anzusprechen oder um Ma-kros zu definieren. Direktive beginnen immer mit einem vorangestellten Punkt. Hier ist ein kurze Auswahlder wichtigsten Direktive:

• .CSEGDamit wird der Codespeicher (FLASH) ausgewahlt.

• .DSEGDamit wird der fluchtige Datenspeicher (RAM) ausgewahlt.

• .ESEGDamit wird der nichtfluchtige Datenspeicher (EEPROM) ausgewahlt.

• .BYTEDient zur Allokierung von Speichplatz fur eine Variable.Beispiel: Puffer: .BYTE 24Durch diese Zeile werden fur die Variable

”Puffer“ 24 Byte im Speicher reserviert.

• .DEFMit dieser Direktive kann einem Register ein symbolischer Name zugeordnet werden.Beispiel: .DEF temp = r16Dadurch kann das Register r16 auch uber den symbolischen Namen

”temp“ angesprochen werden.

• .EQUMit dieser Direktive kann eine Konstante definiert werden.Beispiel: .EQU wartettakte = 10

• .INCLUDEDiese Direktive dient zum Einbinden von weiteren Dateien.Beispiel: .INCLUDE

”zaehler.asm“

An dieser Stelle wird der Inhalt der Datei”zaehler.asm“ eingefugt.

• .ORGWenn diese Direktive im Codesegment verwendet wird, dann wird damit der Anfangspunkt desProgramms im Programmspeicher festgelegt. Wenn diese Direktive im Datensegment verwendetwird, dann gibt sie die Anfangsposition im Arbeitsspeicher an. Wobei darauf zu achten ist, dass imCodesegment wortweise und im Datensegment byteweise addressiert wird.Beispiel: .CSEG.ORG 0x100Diese Direktive ist z.B. notwendig, um die Interrupt Service Routinen (ISR) am Programmanfangzu uberspringen.

2in Klammern stehende Teile sind optional

17

Page 18: Praktikum Mikrocontroller und Eingebettete · PDF fileAllzweck-/Mehrzweck-Rechner abgrenzen wollen. ... Einige Eingebetteten Systeme k onnen also durchaus dieselbe Komplexit at wie

5.2.2 Mnemoniks

Die Mnemoniks lassen sich grob in vier unterschiedliche Befehlsklassen einteilen:

• Arithmetische und Logische BefehleZu dieser Klasse gehoren die Befehle zum Addieren, Subtrahieren, Multiplizieren, bitweise UND-und ODER-Befehle, usw.

• SprungbefehleHierzu gehoren bedingte oder unbedingte Sprunge und Unterprogrammaufrufe.

• Befehle fur den DatentransferMit diesen Befehlen konnen Daten in den Speicher geschrieben oder aus diesem geladen werden.Außerdem konnen Konstanten oder Registerinhalte zwischen Registern verschoben werden, Ein-und Ausgabeschnittstellen aktiviert und auf den Stack zugegriffen werden.

• Befehle, die einzelne Bits von Registern verandern oder testen konnen

5.2.3 Ein Beispielprogramm

Anhand eines einfachen Assemblerprogramms wird jetzt die Funktionsweise der unterschiedlichen Direk-tiven und Befehle verdeutlicht. Die in Klammern stehenden Zeilennummern gehoren dabei nicht zumProgramm. Sie wurden eingefugt, damit die einzelnen Zeilen besser erklart werden konnen.

(1).INCLUDE "m128def.inc"

(2)

(3).ESEG

(4)

(5) .EQU Wartetakte = 100 ; die Anzahl der Takte, die gewartet werden soll

(6)

(7).DSEG

(8)

(9) Puffer: .BYTE 24 ; ein 24 Byte großer Puffer

(10)

(11).CSEG

(12)

(13) .ORG 0x100

(14) init:

(15) ; der Stackpointer wird initialisiert

(16) ldi r16, high(RAMEND)

(17) out SPH, r16

(18) ldi r16, low(RAMEND)

(19) out SPL, r16

(20) ; Port A wird konfiguriert

(21) ldi r16, 0xFF

(22) out DDRA, r16

(23) out PORTA, r16

(24) main:

(25) ldi r30, low(Puffer)

(26) ldi r31, high(Puffer)

(27) ldi r17, 24

(28) schleife:

(29) ld r16, Z+

(30) out PORTA, r16

(31) dec r17

18

Page 19: Praktikum Mikrocontroller und Eingebettete · PDF fileAllzweck-/Mehrzweck-Rechner abgrenzen wollen. ... Einige Eingebetteten Systeme k onnen also durchaus dieselbe Komplexit at wie

(32) cpi r17, 0

(33) brne schleife

(34) call warteschleife

(35) jmp main

(36)

(37) warteschleife:

(38) push r17

(39) ldi r17, Wartetakte

(40) dec r17

(41) cpi r17, 0

(42) brne warteschleife

(43) pop r17

(44) ret

Zuerst wird in der ersten Zeile die Datei”128def.inc“ eingebunden. In dieser sind alle symbolischen Na-

men fur den ATmega128 definiert. Den jeweiligen Speicheradressen wird ein deskriptiver Registernamenzugewiesen. So kann im Quellcode direkt der Name anstelle der Speicheradresse verwendet werden. Dasvereinfacht das Programmieren und hat verstandlicheren Code zur Folge.In Zeile 5 wird die Konstante mit dem Namen

”Wartetakte“ und dem Wert 100 definiert. Sie ist im

EEPROM (siehe Zeile 3) des Mikrocontrollers abgelegt.Danach wird durch Zeile 9 ein 24 Byte großer Bereich im Arbeitsspeicher (siehe Zeile 7) fur die Variable

”Puffer“ reserviert.

Ab Zeile 11 betreffen alle Befehle den Codespeicher. Durch Zeile 13 wird am Anfang des CodespeichersPlatz gelassen, z.B. fur die Interrupt Service Routinen.Mit Hilfe des Codes aus den Zeilen 16 bis 19 wird der Stackpointer initialisiert. Er beginnt am Endedes Arbeitsspeichers (RAMEND) und wachst dann zum Anfang des Arbeitsspeichers hin. Auf den Stackkann uber die Befehle

”push“ und

”pop“ zugegriffen werden. Mit

”push“ wird ein Registerinhalt als

oberstes Element auf dem Stack gespeichert und der Stackpointer inkrementiert, mit”pop“ wird das

oberste Stackelement in ein Register geladen und der Stackpointer dekrementiert. Außerdem dient derStack als Ablage fur die Rucksprungadressen bei Unterprogrammaufrufen. Beim Aufruf einer InterruptService Routine wird der aktuelle Programmcounter auf dem Stack abgelegt, das entsprechende Unter-programm ausgefuhrt und anschließend der Programmcounter automatisch wieder vom Stack geladen.Dies ist allerdings nur moglich, wenn das Unterprogramm die Rucksprungadresse auf dem Stack nicht

”zerstort“. Das heißt, dass das oberste Stackelement am Anfang des Unterprogramms auch das oberste

Stackelement am Ende des Unterprogramms sein muss.Da der Stackpointer 16 Bit umfasst, besteht er aus zwei 8 Bit Registern. Das SPL-Register enthalt denunteren Teil des Stackpointers und das SPH-Register enthalt den oberen Teil.Die Zeilen 21 bis 23 dienen zur Konfiguration des Ports A. Eine genauere Beschreibung der Port-Registerbefindet sich im Handbuch zum ATmega128.Das Hauptprogramm umfasst die Zeilen 25 bis 35. Nach einer vollstandigen Abarbeitung, beginnt dasHauptprogramm wieder von vorne (siehe Zeile 35). Es dient zur Ausgabe des Inhalts der Variable

”Puf-

fer“ auf Port A. Nachdem alle 24 Byte ausgegeben wurden, wird das Unterprogramm”Warteschleife“

aufgerufen. Im Unterprogramm wird der Inhalt des Registers r17 anfangs auf dem Stack kopiert (Zeile38) und zum Ende wird dieser alte Registerinhalt wieder vom Stack geladen (Zeile 43). Somit wird auchin Zeile 44 die korrekte Rucksprungadresse vom Stack geholt.Fur die bedingten Sprunge in den Zeilen 33 und 42 werden bestimmte Bits des Statusregisters desMikrocontrollers ausgewertet. Abhangig von diesem Ergebnis wird der Sprung genommen oder nicht.Weitere Informationen zum AVR-Assembler finden Sie im Handbuch zum ATmega128.

19