Entwicklungsplattform Wie »DAVE« das Leben verändert

Die kostenlose Entwicklungsumgebung »DAVE 3« soll die Softwareentwicklung für den »Cortex-M4«-Baustein »XMC4500« revolutionieren oder zumindest deutlich vereinfachen, so der Hersteller. Ob das stimmt, teste ein Applikationsingenieur an kleinen Beispielprojekten.

Als Infineon auf der letztjährigen embedded world die neue Mikrocontrollerfamilie »XMC4500« auf Basis des 32-Bit-»ARM«-Cores »Cortex-M4« vorstellte, reichte das Echo von »Endlich hat Infineon einen vernünftigen Rechenkern« bis »Nicht noch einer mit ARM-Core«. Trotz unterschiedlicher Meinungen gibt es gute Gründe, die dafür sprechen, allen voran der Vorteil eines weit verbreiteten Cores mit fast endloser Verfügbarkeit an Softwarepaketen für den Rechenkern selbst sowie einer langen Liste renommierter Compiler- und IDE-Hersteller (Integrated Development Environment).

Die Familie umfasst Mikrocontroller in Gehäusen von 48 Pins bis 144 Pins und bietet mit bis zu 1 MByte On-Chip-Flash und 160 KByte SRAM eine skalierbare Plattform. Neu entwickelte Peripheriemodule und eine Taktrate von maximal 120 MHz erlauben den Einsatz in Applikationen mit Echtzeitanforderungen. Auch softwareseitig hat der Chip-hersteller entwickelt und mit »DAVE 3« eine eigene, kostenlose IDE auf den Markt gebracht. Warum betreibt Infineon diesen großen Aufwand? Gemäß Herstelleraussagen soll die Software nicht weniger als die Entwicklung von Embedded-Code revolutionieren oder zumindest deutlich vereinfachen. Als FAE beim Distributor Rutronik wollte ich mir ein eigenes Urteil bilden, und so startete ich eine kleine Entwicklung für den XMC4500 mit DAVE 3.

»DAVE 3« und die Apps

Die Entwicklungsplattform DAVE 3 beinhaltet das kostenlose »Tool Set« inklusive einer auf »Eclipse«-basierenden Entwicklungsumgebung (IDE) sowie frei verfügbaren Compilern und Debuggern (Bild 1). Auf den ersten Blick sieht sie aus wie jede andere Eclipse-IDE, doch wie so oft liegt das Geheimnis im Detail. DAVE steht für »Digital Application Virtual Engineer«, der Entwickler bekommt also Unterstützung von einem virtuellen Assistenten.

Bislang war dies eine Extrasoftware, mit welcher der Entwickler das Quellcodegerüst inklusive der Peripherie-Initialisierung auf grafischem Weg erzeugen konnte. Die stundenlange Datenblattrecherche entfällt somit. Mittlerweile ist diese Funktion in die IDE voll integriert, was sehr angenehm ist, aber keine Revolution. Doch das ist bei weitem noch nicht alles, was der neue DAVE bietet.

Infineon geht einen Schritt weiter und führt - wie in Zeiten von Smartphones üblich - so genannte Apps ein. Mit der »DAVE 3 App« lässt sich die Peripherie grafisch initialisieren und ein entsprechender Quellcode für den XMC4500 erzeugen, der automatisch nach dem Reset auf dem Controller ausgeführt wird. Darüber hinaus stehen einige Funktionen für die eigentliche Applikation zur Verfügung. Dies kann zum Beispiel eine einfache SetPin()- oder ClearPin()-Funktion sein, reicht aber auch bis hin zu etwas aufwendigerem Code mit SetDutyCyle() einer PWM oder einem SendString() an der USB-Schnittstelle.

Die Vorteile dieser einfachen Apps, die für einzelne Peripheriemodule bestimmt sind, treten zutage sobald mehrere Peripherien in einem Programm benötigt werden - und das dürfte bei geschätzten 99,9999% der echten Applikationen der Fall sein. Um verschiedene Schnittstellen und Peripherien in Betrieb zu nehmen, haben sich Entwickler bislang meist an den Beispielen des jeweiligen Controllerherstellers orientiert, also hier beispielsweise an den ersten Tests mit DAVE 3.

Die Wahrscheinlichkeit, ein Beispiel zu finden, das genau die Peripherie nutzt, die der Entwickler benötigt und sonst keine, ging gegen Null. Somit musste er den Code mehrerer Beispiele zusammenziehen und jede Zeile Code prüfen, ob diese im Rahmen des aktuellen Kontexts benötigt wird und/oder wie sinnvoll sie ist. Diese Zeit soll mit DAVE 3 vorbei sein. Hier kann der Entwickler die Peripherien, die er braucht, einfach »zusammenklicken«. Dabei erzeugt die DAVE-3-App die zugehörige Initialisierung inklusive API für den eigenen Applikationscode.

Projekt OLED

Soweit die Möglichkeiten der einfachen, peripherienahen Apps. Darüber hinaus hat Infineon weitere Apps entwickelt, die zum Beispiel ein OLED-Display über SPI inklusive Grafikbibliothek von Segger ansteuern. Eine Stufe weiter geht die App, die einen kompletten Webserver zur Verfügung stellt. Weitere Apps zum Beispiel für Motorregelung sollen folgen. Um zu testen, ob dies alles auch in der Praxis funktioniert - und der Ausdruck »Revolution« gerechtfertigt ist - starte ich einen Praxisversuch. Eine einfache LED blinken zu lassen war mir dafür zu langweilig.

Stattdessen nutze ich das Starterkit mit dem OLED-Display und den Apps, um zuerst das OLED-Display anzusteuern und später einen Sensor am I²C-Bus auszulesen und die Messwerte zu visualisieren (Bild 2). Hierfür erzeuge ich ein neues Projekt und füge die App »GUISL001« hinzu. Dieses kleine Programm greift auf eine USIC-Schnittstelle, als SPI-Master konfiguriert, und einen I/O-Pin zu. Über diese Schnittstellen kommuniziert es mit dem OLED-Display.

Da sich im XMC4500 fast jede Pin-Funktion auf mehrere Pins legen lässt, muss die gewünschte Pinzuordnung dem Programm mitgeteilt werden. Dies kann zu jedem Zeitpunkt in der Entwicklungsphase geschehen. Eine späte Layout-Änderung lässt sich somit mit wenigen Mausklicks auch in der Software berücksichtigen. Damit steht das Konstrukt für die OLED-Ansteuerung, jetzt fehlt nur noch der selbstgeschriebene Quellcode für die Nutzung der Segger-Bibliothek. Nun das ganze Projekt kompilieren, mit dem Debugger auf das Starterkit laden und die Revolution nimmt ihren Lauf. Mit ganzen sechs Zeilen selbstgeschriebenem C-Code habe ich eine Ausgabe auf dem OLED erzeugt - beeindruckend!

Projekt Sensorauswertung

Das nächste Projekt ist die Auswertung eines Sensors über I²C. Als Ziel dient ein dreiachsiger Beschleunigungssensor von Bosch. Der Applikation füge ich eine I²C-App hinzu und führe wieder die Pinzuweisung aus. Um den Sensor über die I²C-Schnittstelle richtig auszulesen, reichen sechs Befehle zwar nicht mehr, die zur Verfügung gestellten Funktionen helfen jedoch weiter. Damit lassen sich die Messwerte vom Sensor wieder mithilfe der Segger-Bibliothek auf dem OLED darstellen.

Nachdem diese Versuche problemlos liefen, nehme ich mir vor, eine Kommunikation mit dem PC aufzubauen - wenn auch mit gewissem Respekt. Im Starterkit ist keine RS-232-Schnittstelle verfügbar (der Controller könnte dies natürlich), sodass ich auf die USB-OTG-Schnittstelle zurückgreifen muss. Damit betrete ich Neuland und vertraue auf DAVE. Um den Controller im USB-Device-Modus zu betreiben, soll ein virtueller COM-Port auf dem PC aufgemacht werden. Mit diesem Setup erfolgen die ersten Kommunikationsversuche mit einem einfachen Terminalprogramm, und ich muss mich nicht gleich um die PC-Programmierung kümmern. Die passende DAVE-App ist »USBVC001«. Also wird diese App in das Programm eingebunden, und ich füge für die ersten Tests drei Zeilen Quellcode hinzu:

USBVC001_Init();

sowie in der Endlosschleife:

USBVC001_SendString((const char *)“TEST“);
USB_USBTask();

Sobald das Programm läuft, fragt der PC nach einem USB-Treiber. Der erste Schritt ist damit getan: USB wurde als Zielobjekt erkannt. Doch woher bekomme ich den Treiber? Ein kurzer Blick in die Hilfe-Funktion der App (die bei allen Apps den Namen »Hilfe« absolut verdient), weist den Weg zum entsprechenden Treiber. Nach Beendigung der kurzen Treiber-Installation ist es dann soweit: In den Systemeinstellungen taucht ein virtueller COM-Port auf.

Mit einem Terminalprogramm öffne ich den entsprechenden Port und erhalte eine ganze Reihe an »TEST«-Meldungen. Damit war die Basis gelegt, um die Sensordaten aufzubereiten und über USB an den PC zu senden. Dieser wertet die Daten mit einer kleinen aber zweckmäßigen GUI aus. Und alle Zweifel an Infineons IDE waren endgültig beseitigt!

Über den Autor:

Carsten Steiner ist Field Application Engineer bei Rutronik.