Neues 32-Bit-ARM7 Lehr- und Übungssystem mit Cortex M3 an der HTL Hollabrunn
Im Bild von links nach rechts:
Kransteuerung Diplomanden Ferdinand Wimmer, Daniel Höfenstock und Wolfgang Kratky
In der Elektronik Abteilung der HTL Hollabrunn wird seit Jahren neben 8051-Derivaten auch mit 32-Bit Mikrocontrollern (MIPS32, Blackfin) gearbeitet. Im 32-Bit Bereich setzt sich Cortex M3 zurzeit immer mehr als neuer Industrie-Standard durch. STMicroelectronics ist als europäischer Anbieter neben 20 anderen Herstellern ein Lizenznehmer von ARM. http://www.st.com/mcu/familiesdocs-110.html
Ab Herbst (Schuljahr 2010/11) wird nun im 3-ten Jahrgang statt des bisher verwendeten 8bit Systems, von jedem Schüler ein steckbrettfähiger 32-Bit Cortex-M3-DIL Adapter (mit einem STM32F103RBT6 im 64LQFP Gehäuse) gefertigt.
Im Bild der Prototyp des Steckbrettadapters.
Die durchkontaktierte Leiterplatte wurde in der HTL - Hollabrunn produziert.
Der Adapter besitzt eine JTAG-Schnittstelle und kann wie ein IC auf eine Grundplatine oder Steckbrett aufgesteckt und ISP-geflasht und debuggt werden. Er bietet leichte Zugänglichkeit zu digitalen und analogen I/Os. Ebenso sind ein LC-Display eine zusätzliche USB-Schnittstelle, PWM, Timer, mehrere SPI, I2C und UART Schnittstellen sowie 128k Flash und 20k SRAM Speicher verfügbar.
Bild: Realisierung der Leiterplatten mit Altium Designer
Zur Evaluierung der in Zukunft verwendeten Hard- und Software wurde eine 3 - achsige Schrittmotorsteuerung (die ursprünglich mit einem 8-bit 8051 Controller realisiert war) auf einen Steuerungsrechner mit ARM-32 bit Controller umgebaut. Es sollte damit erprobt werden, inwieweit das neue an der HTBLA Hollabrunn entwickelte ARM7-Lehr und Übungssystem für den Cortex M3 mit einem STM32F103RBT6 (CM3) für solche Einsätze geeignet ist.
JTAG
Bevor es das On-Chip-Debugging gab, setzten die meisten Software-Entwickler teure In-Circuit-Emulatoren (ICE) zum Testen von Applikationen auf Mikrocontrollern ein. Diese Emulatoren basierten oft auf speziellen Bond-out-Bausteinen die im Vergleich zu normalen Mikrocontrollern sehr teuer waren. Die hohen Taktfrequenzen moderner Mikrocontroller (CM3 mit 72 MHz) und die miniaturisierten Gehäuse mit Unmengen von Anschlüssen machen dies mittlerweile unmöglich. Moderne Mikrocontroller sind mit JTAG-On-Chip-Debugging-Logik ausgestattet, die den Speicher, die CPU-Register und die Programmverarbeitung seriell über ein Schieberegister einer Beobachtung zugänglich macht.
Harvard- und Von-Neumann-Architektur
Im Gegensatz zum ARM7 mit seiner Von-Neumann-Architektur und dem Flaschenhals des gemeinsamen Daten und Befehlsbusses, vereint der Cortex-M3 die Vorteile der Von-Neumann-Architektur mit dem gemeinsamen linearen 4-Gbyte-Adressraum und besitzt trotzdem die getrennten Busse der Harvard-Architektur. Während beim gemeinsamen Bus sowohl das Lesen der Befehle, die Datentransfers von CPU- und DMA-Controllern als auch die Steuerung der Peripherie auf einen Bus konzentriert sind, ist beim Cortex-M3 der Flash-Speicher an einen gesonderten Instruction-Bus angeschlossen, der ausschließlich für das Lesen der Befehle reserviert ist. Der STM32 hat, wie jeder Cortex-M3-Controller – einen ARMv7-M-Befehlssatz. Dieser Befehlssatz geht zurück auf den Thumb-Befehlssatz des ARM7 (16-bit), der mit Thumb2-32-bit-Befehlen erweitert wurde. Damit vereint die CPU mit dem Thumb2-Befehlssatz die Vorteile eines leistungsfähigen 32-bit-Befehlssatzes mit den Vorteilen der kleinen Code-Größe des 16-bit-Thumb-Befehlssatzes. Neben dem optimierten Befehlssatz wurde die ALU auch mit DSP-ähnlichen Befehlen erweitert, damit Multiplikationen in einem Zyklus und Divisionen in zwei bis sieben Zyklen durchgeführt werden können. Zur direkten Bearbeitung von einzelnen Bits wurden die Bit-Banding-Adressbereiche geschaffen, die den direkten schnellen Zugriff auf einzelne Bits ohne read/modify/write-Zyklen zulassen.
#define PA0 (*((volatile unsigned long *) 0x42210100 )) // Einzel-Portpin im Bitbandbereich festlegen
#define PB8 (*((volatile unsigned long *) (PERIPH_BB_BASE + (32*(GPIOB_ODR_OFFSET-PERIPH_BASE)) +8*4)))
PB8=PA1; //Einzelbitzugriff Led_Out=Schalter_gelesen
Schnelle Interrupt-Latenzzeit
Eine deutliche Verbesserung gegenüber den ARM7-Controllern ist die Interrupt-Verarbeitung des Cortex-M3. Sie wurde beschleunigt, besser durch Hardware unterstützt und ist damit insbesondere für echtzeitkritische Systeme optimal verwendbar, da die Interrupt-Latenzzeit nun deterministisch geworden ist. Beim Cortex-M3 ist mit dem Nested Vector Interrupt Controller (NVIC) nun eine deutlich bessere Anbindung an den Core gegeben. Die Vektortabelle kann bis zu 256 Einträge enthalten, und jede Interrupt-Quelle hat einen festen Vektor mit einem Eintrag der entsprechenden Interrupt-Service-Routine. Der direkte Vergleich zwischen ARM7 und Cortex-M3 bezüglich Interrupt-Bearbeitung ergibt eine Interrupt-Latenz bei ARM7 von 24 bis 42 Zyklen, bei Cortex-M3 von nur zwölf Zyklen. Der CM3 ist auch optimal für den Einsatz in batteriebetriebenen Geräten geeignet (0,5mA/MHz). Ebenfalls gibt es mehrere Low Power Modi. Die Stromaufnahme im Standby beträgt 2uA.
Hard-und Softwareentwicklung:
Es gibt unterstützende IDEs von mehreren Anbietern. Auch Open Source Produkte mit Eclipse werden angeboten. Bei uns erfolgt die Softwareentwicklung mit dem Keil RealView Mikrocontroller Development Kit (MDK) uVision4 in Verbindung mit dem Keil ULINK-ME USB-JTAG Adapter. Der μVision Debugger kann Speicherinhalte und Variablen in mehreren Daten-Formaten darstellen. Da während der Programmausführung die Speicherinhalte und Variablen laufend aktualisiert werden, hat der Anwender stets den Überblick über den jeweiligen Programmstatus. Die Kommunikation zwischen PC und CM3 erfolgt dabei über eine USB-Schnittstelle. Der ULINK-ME ermöglicht die Flash-Programmierung sowie das Hardware-Debugging. Zusätzlich können Breakpoints gesetzt werden. Wenn kein USB zur Verfügung steht kann die Europakarte optional auch von einem Steckernetzgerät versorgt werden. Fürs nächste Schuljahr sind Touch Screen Bedienung, Ethernet und CAN Anbindungen geplant.