Erstes C Program ''(LED blinken)''

Aus AVR32-WIKI
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Einleitung

Als ersten bringen Sie eine LED zum blinken. Am AVR32 PIKO Board befindet sich eine User LED an PA8. Um diese LED anzusteuern, benutzen Sie im Mikrocontroller sogenannte Register (z.B. AVR32_GPIO.port[PORT].gpers), dass sind Speicherzellen, die Einfluss auf bestimmte Peripherien haben. In diesem Fall haben sie Einfluss auf die GPIO(General Purpose Input/Output) womit z.B. die Ausgangsspannung eines Pins ein- und ausgeschaltet wird. Genaue Beschreibung zu den Peripherien, finden sie im Datenblatt.

Folgenden Code soll Programmiert werden:

quelltext.png


Quellcode Erläuterung

In jeder C Datei, welche Einfluss auf die Register des Mikrocontrollers nimmt, muss die "avr32/io.h" Eingebunden werden:

#inlcude <avr32/io.h>


Die Defines beschreiben die Port Pins, falls die LED z.b. an PB10 befindet, kann folgende Zeile einfach abgeändert werden

#define GPIO_LED AVR32_PIN_PB10

Je nach Mikrocontroller Typ steht hinter dem Namen: "AVR32_PIN_PB10" eine Zahl, beim UC3B0512 ist es die 42 für GPIO42. Im Datenblatt auf Seite 7 kann diese Zahl auch entnommen werden.


Folgende Zeile aktiviert die GPIO Funktion des AVR32_PIN_PA08.

AVR32_GPIO.port[PORT].gpers = 1 << PIN;

die Defines setzen für PORT-> 0 und für PIN-> 8 ein. Das Register ist das GPER (Datenblatt Seite 179). Das "s" direkt hinter dem Register sagt aus, dass Folgende Bits (welche 1 sind) nur gesetzt werden. Das Register kann aber auch direkt beschrieben werden, was vor allem wichtig ist, wenn Sie bestimmte Bits gleichzeitig auf 0 und 1 setzen wollen.

Folgende Bitfunktionen sind möglich:

s = Set

c = Clear

t = Toggle

Die Funktionen der anderen Register können im Datenblatt ab Seite 179 nachgelesen werden.


Compilieren

Der Oben genannte Code soll jetzt in das Atmel Studio Projekt programmiert werden.

bild1.png


Als nächstes wird durch das Compilieren geprüft ob das Projekt fehlerfrei ist. Sie Compilieren das Projekt in dem Sie auf Build -> Build Solution klickt.

bild2.png


Falls folgender Text in der Konsole steht, haben Sie das Projekt Fehlerfrei Compiliert.

Build succeeded.
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========


Linkerscript

Mit dem Linkerscript können Sie konfigurieren, welche Speicherbereiche für welche funktionen verwendet werden sollen. Damit ist es auch möglich, ein Programm so zu konfigurieren, dass es nur im RAM ausgeführt wird, wie das geht und welche Vorteile das hat folgt in einem anderen Kapitel.

Hier geht es darum, das Linkerscript so umzuschreiben, dass das Programm erst hinter dem Bootloader anfängt. Der Bootloader ist von Anfang an auf jedem UC3 Mikrocontroller und belegst die Speicheradresse 0x80000000 - 0x80002000. Wenn der Bootloader also mittels Taster nicht aktiviert wurde, springt der PC(Programmcounter) direkt zur Adresse 0x80002000.

Deswegen sollten Sie dafür sorgen, dass ihr Programm erst ab der Adresse 0x80002000 startet.

Klicken Sie rechts im Explorer auf "Solution Explorer", dann mit rechter Maustaste auf das Projekt "mein_erstes_projekt". Wählen Sie add -> Existing Item... dort suchen Sie das Linkerscript für ihren passenden Mikrocontroller.

bild3.png


Beim AVR32 PIKO Board ist es die Datei: "avr32elf_uc3b0512.x", man findet sie bei Windows unter folgendem Dateipfad:

C:\Programme (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.4.0.65\AVRToolchain\avr32\lib\ldscripts

Jetzt können Sie ihre Datei umbenennen, Sie klicken mit rechter Maustaste auf das Linkerscript und wählen Rename. In diesem Bespiel nennen Sie die Datei "erste_skript.ld". Die folgende Meldung bestätigt Sie mit Ja.

bild4.png


Als nächstes muss die Datei bearbeitet werden. Dazu klicken Sie mit Doppelklick auf die Datei, welche dich daraufhin im Quelltextfenster öffnet.

Für Sie interessant sind folgende Zeilen:

FLASH (rxai!w) : ORIGIN = 0x80000000, LENGTH = 512K
PROVIDE (__executable_start = 0x80000000); . = 0x80000000;

bild5.png


ORIGIN gibt an, ab welcher Adresse der Flash(Programmspeicher) sich befindet, LENGTH ist die mögliche Speichergröße, da der Bootloader 8kbyte speicher in anspruch nimmt, müssen Sie diese größe verkleindern. __executable_start gibt die Adresse vor, wo das Programm gestartet werden soll. Diese müssen geändert werden zu:

FLASH (rxai!w) : ORIGIN = 0x80002000, LENGTH = 504K
PROVIDE (__executable_start = 0x80002000); . = 0x80002000;

Schon haben Sie das Linkerscript so konfiguriert, dass ihr Programm erst ab 0x80002000 anfängt und gestartet wird.

Zuletzt fehlt noch die Angabe im Projekt, das der Linker weiß, dass er ihr eigenes Linkerscript verwenden soll.

Sie klicken mit rechter Maustaste auf ihr Projekt und wählt "Properties" an.

bild6.png


Hier gehen Sie zu den Linker Flags Einstellungen: Toolchain -> AVR32/GNU Linker -> Miscellaneous und schreiben in das Feld "Linker Flags:" ihr linkerscript rein.

-T ../erste_skript.ld

bild7.png


Dann Speichern Sie alles und klicken wieder auf Build -> Build Solution.

Jetzt ist ihr erstes Projekt fertig Compiliert und an der richtigen Stelle gelinkt. Als nächstes muss das Output File nur noch auf den Mikrocontroller übertragen werden.



Getting Startet: Compiler Installation - Projekt erstellen - Erstes C Program (LED blinken) - Controller flashen

Meine Werkzeuge