Inhaltsverzeichnis
Was ist Infineon XMC?
Mit XMC bezeichnet Infineon eine Serie von Microcontrollern für allgemeine Anwendungen.
Auf diesen Seiten beschäftigen wir uns mit Grundlagen für den Einstieg in die Programmierung dieser Controller.
Die Produktfamilie XMC1000
Die Controller der XMC1000 Reihe enthalten einen ARM Cortex-M0 Prozessor und je nach Ausführung verschiedenste Peripherals, wie SPI, UART, Timer, Watchdog usw.
Alle Informationen zur Familie XMC1000
Link zur Informationsseite der XMC1000-Familie von Infineon.
Zur Familie der XMC1000 gehört der Controller XMC1100 als kleinster Vertreter, mit dem wir uns näher beschäftigen.
Alle Informationen zum XMC1100 gibt's hier:
XMC1100 Serie
Wie fängt man am Besten an?
Zunächst brauchen wir mal ein paar Datenblätter. Für den Neuling mag die angebotene Flut an Informationen verwirrend sein. Daher versuchen wir hier "unsere" Ordnung zu verwenden.
User Manual oder Reference Manual oder XMC1100 AB-Step Reference Manual
Hier werden grundlegende Dinge, die allgemein für alle XMC1100 Controller gelten, behandelt.
XMC1100 AB-Step Reference Manual
Data Sheet oder XMC1100 AB-Step
Hier wird auf verschiedene Versionen vom XMC1100 eingegangen, wie etwa Gehäuseform, Speichergröße und Pinlayout.
XMC1100 AB-Step Data Sheet
Wer sich genauer auf der Infineon-Seite umsieht findent nicht nur die oben beschriebenen "AB-Step" Dokumente sondern auch noch "AA-Step" Versionen von den gleichen Informationen. Soweit uns bekannt, handelt es sich "nur" um Vorgängerversionen.
Einsteigerinformationen rund um die Ports der XMC1000
Ausprobierhardware XMC 2Go
Für etwa 6,- Euro (Stand 03/2022) bekommt man das "XMC 2Go" Evaluations Board. Auf diesem Board ist ein XMC1100 samt USB Debugger und Programmierer enthalten.
Kit XMC 2Go XMC1100
Die Entwicklungsumgebung DAVE SDK
Damit man mit dem XMC 2Go auch was anfangen kann brauchen wir noch die kostenfreie DAVE SDK.
DAVE Quik Start
DAVE Introduction
DAVE Quick Start LED Blinky viea PWM
Und natürlich noch die Software selbst.
DAVE IDE
In der Rubrik "Tools & Software" und dann in "DAVE Version 4, DAVE APPs, XMC Lib and example projects" (Stand 03/2022) könnt ihr den Download starten.
Programmier- und Debug Software J-Link von SEGGER
Jetzt fehlt noch der Treiber zum Programmieren.
J-Link Treiber downloaden
Sucht hier nach "J-Link Software and Documentation pack" (Stand 03/2022). Darin ist der USB-Treiber und ein GDB-Server enthalten.
Dieser GDB-Server musste bei meiner Installation manuell in die DAVE Debug Config eingetragen werden. Das Dialogfenster lässt sich über diese zwei Möglichkeiten öffnen:
- Auf das kleine grüne Käfersymbol in der Menüleiste klicken.
- Oben rechts im Eingabefeld "Quick Access", folgendes eintippen: "debug config". Dann den Menüvorschlag auswählen.
In der Menüstruktur meiner Installation kann ich diese Funktion nicht auswählen, Eclipse ist da irgendwie sehr "anders".
Jetzt eine neue Konfiguration anlegen oder die vorhandene auswählen und im Tab "Debugger" im Feld "Executable:", den Pfad zu "JLinkGDBServerCL.exe" eingeben. Die Datei findet ihr im Installationsverzeichnis vom SEGGER J-link.
Wenn DAVE diesen Server nicht starten kann, kommt folgende Fehlermeldung:
Error in services launch sequence Launching command [/JLinkGDBServerCL.exe -if swd -device XMC1100-Q024x0064 -endian little -speed 1000 -port 2331 -swoport 2332 -telnetport 2333 -vd -ir -localhostonly 1 -singlerun -strict -timeout 0] failed.
Wenn der Haken bei "Start the J-Link GDB server locally" fehlt kommt diese Meldung:
Error in final launch sequence Failed to execute MI command: -target-select remote localhost:2331 Error message from debugger back end: localhost:2331: Das System hat versucht, einem Verzeichnis, das sich auf einem mit JOIN zugeordneten Laufwerk befindet, ein Laufwerk mit SUBST zuzuordnen.
Das erste Programm
Zu Begin gibt's erst mal ein super einfache Programm. Damit lassen wir einfach die beiden Led's auf dem XMC 2Go leuchten bzw. blinken.
In DAVE geht ihr wie folgt vor:
- Neues DAVE Project starten
- Gebt dem Projekt einen Namen
- Project Type: Project Type: Infineon Projects > ARM-GCC Application > Simple Project
Microcontroller Selection Page: Microcontrollers > Boards > XMC 2Go
Runtime Library: Newlib-nano
Ihr erhaltet dann eine fast leeres Projekt. Nur das Allernötigste wird von DAVE vorbereitet.
Folgenden Code könnt Ihr in die Datei "main.c" kopieren.
/* * main.c * Author: MASCHINFO */ //Include some basic stuff for the microcontroller #include "xmc_common.h" //Main function int main(void) { //Steps to configure a port pin as an output (GPIO) //First we have setup the output level for the Port-Pins //LED1 is P1.0 or Port 1 and Pin 0 //We do the output modification by OMR Output Modification Register PORT1->OMR |= 0b00000000000000000000000000000001; //Set Bit 0 P1.0 //PORT1->OMR |= 0b00000000000000000000000000000010; //Set Bit 0 P1.1 PORT1->OMR |= 1 << 1; //this syntax is the same like before //Next we have to setup the pins to be an output //In the IOCR Input/Output Control Register there are some bits to set //easy syntax to set bit 7 and 15 PORT1->IOCR0 |= 1 << 7 | 1 << 15; //long syntax with binary format //PORT1->IOCR0 = 0b1000000010000000;//P1.0 and P1.1 as Output //do this all the time while(1U) { //Clear Bit 0 or toggle if 1 PORT1->OMR |= 0b00000000000000010000000000000000; //set the "Set" and "Reset" bit at the same time the pin will toggle PORT1->OMR |= (1 << 17) | (1 << 1); } }