Berner Fachhochschule Technik und Informatik Fachbereich Elektro- und Kommunikationstechnik Labor für Technische Informatik

Microcontroller in Embedded Systems

Tutorial Code Composer Studio und LM3S9B92-Kit  2010 BFH-TI / WBR1 Autor: Version: Datum:

Roger Weber 1.0a 16. September 2010

Inhaltsverzeichnis 1Code Composer Studio.........................................................................................................................................................3 1.1Installation von Code Composer Studio........................................................................................................................3 1.2Einen Workspace anlegen..............................................................................................................................................3 1.3Ein Projekt importieren..................................................................................................................................................4 1.4Ein eigenes Projekt erstellen..........................................................................................................................................7 1.5Dateien erstellen und kompilieren...............................................................................................................................10 1.6Debuggen.....................................................................................................................................................................12 1.7Workaround gemäss Errata Sheet LM3S9B92 Version B1 ........................................................................................13 1.8Workaround gemäss Errata Sheet LM3S9B92 Version C1 ........................................................................................14 2LM3S9B92-Kit...................................................................................................................................................................17 2.1Kit-B1..........................................................................................................................................................................18 2.2Kit-C1..........................................................................................................................................................................19

1

Code Composer Studio

Für die Softwareentwicklung wird die IDE (Integrated Development Environment) „Code Composer Studio“ von Texas Instruments eingesetzt. Mit dieser können Sie in der Hochsprache C entwickeln und auch debuggen. In diesem Tutorial wird Schritt für Schritt gezeigt, wie Sie: • Code Composer Studio auf Ihrem Laptop installieren, • einen Workspace anlegen, • ein Projekt für den LM3S9B92 Micorcontroller von TI importieren, • ein eigenes Projekt anlegen, • Dateien generieren und einbinden, • eine Test-Applikation auf das Target laden und debuggen. Weiter gibt es für jeden heutigen Microcontroller sogenannte „errata sheets“, welche die bekannten Fehler auflisten. Um diese zu umgehen müssen Sie teilweise Einstellungen für Workarounds in der IDE machen. Diese werden hier ebenfalls beschrieben.

1.1 Installation von Code Composer Studio Das Code Composer Studio ist auf unseren Labor-PCs schon aufgesetzt. Falls Sie dieses auf Ihrem Laptop ebenfalls installieren möchten, können Sie das wie folgt machen: 1) Installieren Sie die Software. Sie finden diese auf \\boiler.bfh.ch\data\fbe\projects\CARME\CCS_IDE_V4 . 2) Nach der Installation und einem ersten Start von CCS V4 erscheint folgendes Fenster:

Abbildung 1: Lizenzserver eintragen 3) In diesem Fenster die IP: 147.87.160.70 und Portnummer: 27005 des Lizenzservers angegeben. 4) Sie können anschliessend die aktuellste Version des Code Composer Studios über das Internet herunterladen. Wählen Sie hierzu das Menü „Help > Software Updates > Find an Install...“.

1.2 Einen Workspace anlegen Wenn Sie erstmals mit dieser IDE arbeiten müssen Sie einen neuen Workspace anlegen. Ein Workspace ist eine Einheit, welche mehrere Projekte zusammenfasst. Idealerweise legen Sie für dieses Unterrichtsmodul einen eigenen Workspace an und legen anschliessend alle Übungen und auch die Projektarbeit in diesem Workspace ab.

1.

Starten Sie das Code Composer Studio Sie werden nun aufgefordert, entweder einen neuen Workspace anzulegen oder einen bestehenden Workspace auszuwählen. Tipp: Als Pfad sollten Sie nicht „\\boiler.bfh.ch\kürzel....“ eingeben, weil die IDE damit Probleme hat, sondern den Buchstaben Ihres privaten Laufwerks benützen.

Abbildung 2: neues Projekt anlegen 2.

Sie gelangen nun auf den Willkommens-Bildschirm des Code Composer Studio.

Abbildung 3: Welcome Klicken Sie mit der Maus in den Würfel oben rechts um diesen Bildschirm zu verlassen.

1.3 Ein Projekt importieren Am einfachsten ist es, wenn Sie ein Projekt nicht von Hand erstellen und alle Einstellungen selber machen, sondern ein bestehendes Projekt importieren. Im Unterricht erhalten Sie diverse Musterlösungen und auch ein Startprojekt. Dieses Startprojekt enthält eine einfache C-Datei mit einem leeren main-loop, aber sämtliche relevanten Projekteinstellungen sind schon gemacht. In diesem Unterkapitel wird gezeigt, wie Sie ein bestehendes Projekt importieren können. 1.

Wählen Sie im Menü „File > Import“. Es wird eine Dialogbox dargestellt, in welcher Sie unter „General“ den Eintrag „Existing Projects into Workspace“ wählen. Betätigen Sie danach „Next“.

Abbildung 4: Existing Project into Workspace 2.

Wählen Sie anschliessend in der nächsten Dialogbox entweder ein ganzes Directory (Select root directory) oder eine komprimiertes Projekt (Select archive file). Falls Sie ein ganzes Directory importieren wollen, können Sie zusätzlich wählen, ob Sie den Source-Code in Ihren Workspace kopieren wollen, oder ob Sie nur einen Link auf die bestehenden Dateien haben wollen (Copy projects into workspace). Betätigen Sie zum Schluss „Finish“.

Abbildung 5: Projekt auswählen 3.

Das Projekt wird in der IDE nun im Fenster „C/C++ Projects“ dargestellt. Wenn Sie unser Startprojekt importieren ist es sinnvoll, dieses nun umzubenennen. Klicken Sie dazu mit der rechten Maustaste auf das Projekt und wählen Sie im Popup-Menü „Rename“. Sie können das Projekt anschliessend umbenennen. Dabei wird auch der Ordner des Source-Directories umbenannt.

Abbildung 6: Projekt umbenennen 4.

Die erstellte Output-Datei hat immer noch den Namen des kopierten Projektes. Um das noch zu ändern klicken Sie mit der rechten Maustaste wieder auf das Projekt und wählen Sie im Popup-Menü „Properties“. Im Menü links wählen Sie anschliessend „C/C++ Build“ sowie den Reiter „Build Settings“ und geben im Feld „Artifact name“ Ihren Projektnamen ein.

Abbildung 7: Output-Datei umbenennen

1.4 Ein eigenes Projekt erstellen Wenn Sie kein Projekt importieren, sondern dies von Hand erstellen wollen, gehen Sie wie folgt vor: 1.

Um ein neues Projekt zu generieren wählen Sie das Menü „File > New > CCS Project“.

Abbildung 8: Ein Projekt erzeugen 2.

Geben Sie für das Projekt nun einen Namen ein und bestätigen Sie diesen mit „Next“.

Abbildung 9: Name des Projektes eingeben 3.

In der nächsten Dialogbox können Sie wählen, ob Sie eine Debug- oder eine Release-Version des ausführbaren Codes wollen. Wählen Sie hier beide Varianten und bestätigen Sie mit „Next“:

Abbildung 10: Debug und Release-Version 4.

In der nächsten Dialogboxen können zusätzliche Libraries angegeben werden. Diese brauchen wir für unsere Übungen aber nicht und Sie müssen hier nichts eingeben. Betätigen Sie „Next“.

Abbildung 11: Zusätzliche Libraries wählen 5.

Nun müssen Sie noch den Microcontroller-Typ eingeben. Wählen Sie dazu die Familie „Cortex M“ und „Stellaris LM 3S9B92“ wie unten abgebildet. Betätigen Sie anschliessend „Finish“.

Abbildung 12: Microcontroller auswählen

6.

Im Project Workspace wird nun ein neues Projekt generiert. Dieses ist allerdings noch leer und enthält keine Dateien.

Abbildung 13: Leeres Projekt 7.

Kopieren Sie nun die Dateien startup_css.c und lm3s9b92.h in Ihren Projektordner. Diese finden Sie auf Moodle. Die IDE wird automatisch aktualisiert.

Abbildung 14: Startup-Datei und Prozessordefinitionen kopiert 8.

Für den Debugger muss die Hardware (Target Configuration) definiert werden. Wählen Sie im Menü „File“ die Einträge „New“ und danach „Target Configuration File“. Geben Sie in der erscheinenden Dialogbox einen Namen für die Datei ein, z.B. „TargetConfiguration.ccxml“. In der IDE können Sie anschliessend diese Datei in grafischer Form darstellen. Geben Sie nun für die Connection die Wahl „Stallaris In_Circuit Debug Interface“ sowie den korrekten Microcontroller LM3S9B92 ein und speichern Sie die Konfiguration.

Abbildung 15: Target Configuration definieren

9.

Falls Sie I/O Funktionen wie printf verwenden oder Applikationen mit grösserem Stack und Heap-Bedarf schreiben, müssen Sie die Grösse von Heap und Stack nachträglich erhöhen. Klicken Sie mit der rechten Maustaste auf das Projekt (im Fenster C/C++ Projects) und wählen Sie im Menü (zuunterst) anschliessend „Properties“. Nun wird eine Dialogbox mit den Projekt-Properties dargestellt. Wählen Sie in der Auswahl ganz links „C/C++ Build“ und unter „Tool Settings“ den Eintrag „TMS470 Linker > Basic Options“. Geben Sie anschliessend für den Stack und den Heap die gewünschte Grösse ein (in der Abbildung jeweils 0x800).

Abbildung 16: Stack und Heap Size modifizieren

1.5 Dateien erstellen und kompilieren 1.

Sie können eine neue Source-Datei in Ihrem Projekt erzeugen, indem Sie Menü „File > New > Source File“ wählen.

Abbildung 17: Neue C-Datei erzeugen 2.

Dieser Datei müssen Sie nun noch einen Namen geben.

Abbildung 18: Neue C-Datei benennen

3.

In der Entwicklungsumgebung können Sie nun die Datei editieren:

Abbildung 19: Editor 4.

Das Projekt können Sie kompilieren und linken indem Sie Menü „Project > Build Active Project“ wählen.

Abbildung 20: Build Active Project

1.6 Debuggen Wenn Compiler und Linker ohne Fehlermeldungen abschliessen, können Sie die Software auf dem Kit testen. 1.

Wählen Sie entweder Menü „Target > Debug Active Project“ oder wählen Sie das Icon mit der Wanze. Während dem Download wird ein Fortschrittsanzeige dargestellt. Wenn das Starten des Debuggers scheitert (Fehlermeldungen) sind entweder Projekteinstellungen fehlerhaft respektive nicht vollständig oder es ist erforderlich, einen Hardware-Reset durchzuführen. Ziehen Sie dazu den USB-Stecker zum Kit kurz aus und stecken Sie ihn danach wieder ein.

Abbildung 21: Debugger starten 2.

Wenn alles klappt wechselt die IDE in die Debug-Perspektive. Hier können Sie Breakpoints setzen, steppen, Variablen und Register ansehen usw.

Abbildung 22: Debug Perspektive

1.7 Workaround gemäss Errata Sheet LM3S9B92 Version B1 Es sind keine Einstellungen notwendig.

1.8 Workaround gemäss Errata Sheet LM3S9B92 Version C1 Die bei uns im Unterricht verwendeten Microcontroller der Version C1 haben noch einige HW-Fehler, welche wie folgt umgangen werden können: 1.

In der Datei startup_css.c muss in der Vektortabelle beim Eintrag für „Flash Control“ der Eintrag (void (*) (void)) 0x0881 gemacht werden. Der Cast ist notwendig um Compiler-Warnungen zu unterdrücken.

Abbildung 23: Eintrag für Flash Control in der Vektortabelle 2.

Gemäss Errata Sheet funktioniert der „mass erase“ bei der Verion C1 nicht, es ist deshalb ein Wechsel zu „page erase“ erforderlich. Gehen Sie wie folgt vor: Starten Sie den Debugger (Button mit der Wanze, anschliessend im Menü „Debug Active Project“). Wählen Sie dann Menü „Tools > On-Chip Flash“ und selektieren Sie in der Dialogbox den Eintrag „Necessary pages Only“.

Abbildung 24: Eintrag Necessary Pages Only 3.

Beim Programm-Download soll das Target automatisch einen Reset durchlaufen. Wählen Sie in der Dialogbox „Project Properties“ (rechte Maustaste auf das aktuelle Projekt klicken und im Popup-Menü Properties wählen) CCS Debug und den Reiter „Target“. Bewegen Sie den Slider nach unten und aktivieren Sie „Reset the target on a program load or restart“.

Abbildung 25: Eintrag Reset the target 4.

Nun muss noch das Linkerskript modifiziert werden: Öffnen Sie die Datei lm3s9b92.cmd, die Sie im Projektordner finden. Im Eintrag Memory muss die Startadresse des Flash auf 0x1000 modifiziert werden, die Länge auf 0x3F000. Bei den SECTIONS setzen Sie den Eintrag .intvecs auf 0x1000:

MEMORY { FLASH (RX) : origin = 0x00001000, length = 0x0003F000 SRAM (RWX) : origin = 0x20000000, length = 0x00018000 } SECTIONS { .intvecs: > 0x00001000

2

LM3S9B92-Kit

Die Übungen im Unterrichtsmodul "Microcontroller in Embedded Systems" werden auf einem Kit für den LM3S9B92 durchgeführt (Eigenentwicklung BFH). Dieses Kit beinhaltet folgende Komponenten: • LM3S9B92 Microcontroller mit CPU und integriertem Speicher (RAM, Flash) • CAN-, Ethernet, Servo (PWM) und RS232 Anschluss • 4 Taster und 8 LED • Debug-Interface über USB • Dokumentation (Schaltpläne ...) Von den Kits gibt es zwei Versionen, die auf unterschiedlichen Prozessor-Versionen basieren, das Kit-B1 (basierend auf dem LM3S9B92-B1) und das Kit-C1 (basierend auf dem LM3S9B92-C1). Die unterschiedlichen Versionen mussten wir erstellen, weil für den Start des Herbstsemesters 2010 die LM3S9B92-C1 wegen Lieferengpässen noch nicht verfügbar waren. Die Kits können einfach voneinander unterschieden werden.

Abbildung 26: Foto LM3S9B92 Kit, Version B1 Abbildung 27: Foto LM3S9B92 Kit, Version C1

2.1 Kit-B1 Ein Blockschaltbild des Kits-B1 ist in Abbildung 28 dargestellt.

Abbildung 28: Aufbau des LM3S9B92 Kits, Version B1 Vom Microcontroller werden verschiedene Ports mit der Peripherie verbunden. Die Verwendung der Ports wird in der nachfolgenden Tabelle dargestellt. CPU-Port PG0 PG1 PA0 PA1 PD2 PD3 PA4 PA5 PE0 PE1 PE2 PE3 PE4 PE5 PE6 PE7 PJ0 PJ1 PJ2 PJ3

Bezeichnung U2Rx U2Tx VCPRx VCPTx PWM2 /U1Rx U1Tx CAN0Rx CAN0Tx LED 1 LED 2 LED 3 LED 4 LED 5 LED 6 LED 7 LED 8 T1 T2 T3 T4

Kurzbeschreibung UART 2 Rx UART 2 Tx UART 0 Virtual Com Port Rx UART0 Virtual Com Port Tx PWM 2 oder UART 1 Rx UART 1 Tx CAN 0 Rx CAN 0 Tx LED 1 Led-Array LED 2 Led-Array LED 3 Led-Array LED 4 Led-Array LED 5 Led-Array LED 6 Led-Array LED 7 Led-Array LED 8 Led-Array Taster 1 Taster 2 Taster 3 Taster 4

Tabelle 1: Microcontroller-Ports für die Peripherie Genauere Informationen finden Sie in den Schaltplänen des LM3S9B92-Kits (Version B1).

2.2 Kit-C1 Ein Blockschaltbild des Kits-B1 ist in Abbildung 29 dargestellt.

Abbildung 29: Aufbau des LM3S9B92 Kits, Version C1 Vom Microcontroller werden verschiedene Ports mit der Peripherie verbunden. Die Verwendung der Ports wird in der nachfolgenden Tabelle dargestellt. CPU-Port PA0 PA1 PG0 PG1 PB0 PB1 PB4 PB5 PH0 PH1 PH2 PH3 PH4 PH5 PH6 PH7 PJ0 PJ1 PJ2 PJ3

Bezeichnung U0Rx U0Tx VCPRx VCPTx PWM2 /U1Rx U1Tx CAN0Rx CAN0Tx LED 1 LED 2 LED 3 LED 4 LED 5 LED 6 LED 7 LED 8 T1 T2 T3 T4

Kurzbeschreibung UART 0 Rx UART 0 Tx UART 2 Virtual Com Port Rx UART2 Virtual Com Port Tx PWM 2 oder UART 1 Rx UART 1 Tx CAN 0 Rx CAN 0 Tx LED 1 Led-Array LED 2 Led-Array LED 3 Led-Array LED 4 Led-Array LED 5 Led-Array LED 6 Led-Array LED 7 Led-Array LED 8 Led-Array Taster 1 Taster 2 Taster 3 Taster 4

Tabelle 2: Microcontroller-Ports für die Peripherie Genauere Informationen finden Sie in den Schaltplänen des LM3S9B92-Kits (Version C1).