ARM Cortex Mikrocontroller
Die Firma ARM stellt selbst keine Prozessoren/Controller her, sondern entwickelt nur sogenannte "IP-Cores", die von Herstellern wie Atmel, Infineon, NXP, TI und vielen anderen lizenziert werden. Diese Hersteller ergänzen den Core um Speicher und Peripherie. Der Vorteil dieses Modells ist, dass dadurch sehr viele Prozessoren mit unterschiedlichster Ausstattung verfügbar sind, die alle mit dem selben Befehlssatz (und damit dem selben Compiler) programmierbar sind.
In diesem Artikel geht es NUR um die ARM Cortex M Microcontroller, nicht jedoch um ARM Cortex-A Prozessoren.
Befehlssatz
Allen ARM-Cores gemeinsam ist die 32 Bit RISC-Architektur. Manche ARM-Cores besitzen neben dem 32 Bit ARM-Befehlssatz noch einen zusätzlichen, kleineren 16 Bit-Befehlssatz (Thumb-Modus, erkennbar am T in der Bezeichnung, z. B. ARM7TDMI). Der Vorteil des Thumb-Befehlssatzes ist der geringere Platzbedarf des Codes; der Nachteil ist die etwas niedrigere Geschwindigkeit. Die ARMv7M-Architektur (man beachtet das v), also z. B. Controller mit Cortex-M3-Kern, unterstützen ausschließlich den Thumb2-Befehlssatz.
ARM Cortex M
Seit wenigen Jahren sind ARM-basierte Mikrocontroller erhältlich, die Aufgrund der vergleichbar einfachen Beschaltung und mit einer deutlich größeren Power eine echte Alternative zu 8-Bit-Controllern darstellen.
Es gibt folgende Varianten dieses Mikrocontroller "Kerns", aufgeführt vom Energieeffizientesten zum Leistungsfähigsten:
ARM Cortex M0
Als günstigere Variante gibt es dann noch die Cortex-M0 Cores, wie z.B. den LPC1xxx. Diese werden beispielsweise in folgenden Controllern eingesetzt:
- STM32F0 von STMicro, interne Seite über STM32
- LPC11xx von NXP, interne Seite über LPC1xxx
- XMC1000 von Infineon
- NuMicro-Controller von nuvoton (ex Winbond), laut Datenblatt mit 2.5-5.5V Betriebssspannung!!!
Für die M0-Familie ist für den LPC1xxx bereits eine Code-Base und ein preisgünstiges Entwicklungskit vorhanden.
ARM Cortex M0+
Inzwischen gibt es auch eine optimierte Version des Cortex-M0 - die Cortex-M0+ Cores. Diese können (optional) einige Features der Cortex-M3 Serie beeinhalten, wie z.B eine MPU:
- EFM32 Zero Gecko von Energy Micro, interne Seite über EFM32
- LPC8xx von NXP
- Kinetis L-Serie und Kinetis M-Serie von Freescale
ARM Cortex M3
Eine sehr aktuelle Variante des ARM ist die Cortex-M3 Familie die LPC1xxx, als eine echte Konkurrenz zu 8- und 16-Bit Mikrocontrollern wie dem AVR und MSP430 gedacht ist. Der Cortex-M3 enthält einige Verbesserungen gegenüber dem ARM7TDMI-Kern und ist bereits dabei diesen zu ersetzen. Um den Einstieg zu erleichtern ist für den LPC1xxx bereits eine Code-Base und ein preisgünstiges Entwicklungskit vorhanden. Controllerfamilien dieser Klasse sind:
- EFM32 Tiny Gecko,EFM32 Gecko sowie EFM32 Leopard Gecko von Energy Micro , interne Seite über EFM32
- LPC13xx/LPC17xx/LPC18xx von NXP oder die inzwischen schon sehr ausführliche, interne Seite zur Cortex-M3 Familie von LPC
- Stellaris-Serie von Texas Instruments (vormals Luminary Micro)
- AT91SAM3 von Atmel
- STM32 Baureihen F1/F2/L1/W von STMicroelectronics , interne Seite über STM32
- TMPM330 von Toshiba
- FM3-Serie von Fujitsu
- XMC4000 von Infineon
- SiM3U1xx von Silabs
- HT32 von Holtek Semiconductor
ARM Cortex M4
Als hoch performante Variante gibt es dann noch die Cortex-M4 Cores welche teilweise mit einer FPU ausgestattet sind. Diese werden beispielsweise in folgenden Controllern eingesetzt:
- EFM32-Wonder Gecko von Energy Micro, interne Seite über EFM32
- LPC43xx von NXP (Dual Core)
- STM32F3 von STMicro, interne Seite über STM32
- STM32F4 von STMicro, interne Seite über STM32
- LM4F von Texas Instruments
- XMC4000 von Infineon
ARM7
Eine schon etwas ältere Controller-Familie ist der ARM7TDMI. Core. Controllerfamilien dieser Klasse sind:
- NXP (ehemals Philips) LPC2000
- Atmel AT91SAM7
- Analog Devices ADuC7xxx
- Texas Instruments TMS470
- SAMSUNG S3C24x0 [1]
- STR7xx von ST Microelectronics [2]
- und viele weitere
Mehr Informationen zur ARM-Architektur finden sich in der Wikipedia, weiterführende Links in der Linksammlung.
Compiler
GCC
Einer der beliebtesten Compiler für ARM-Prozessoren ist der GCC. Er kann sowohl ARM- als auch Thumb-Code erzeugen. Eine unvollständige Liste einiger Distributionen folgt:
Fertige GCC Binaries für Windows:
- WinARM (wird derzeit nicht gepflegt)
- GNUARM (Linux, Windows, wird derzeit nicht gepflegt),
- Yagarto (Windows, mit Eclipse-Integration),
- GNU Tools for ARM Embedded Processors (bereitgestellt von ARM selbst auf launchpad.net).
Fertige GCC Binaries für Linux (und MacOS X):
- ARM GCC toolchain for Linux and Mac OS X
- GNUARM (Linux, Windows, wird derzeit nicht gepflegt)
- CodeSourcery CodeBench Lite (alter Name: Codesourcery G++ lite, für Linux, Windows)
- GNU Tools for ARM Embedded Processors (bereitgestellt von ARM selbst auf launchpad.net).
Bei der Auswahl der Toolchain sollte beachtet werden, dass es größere Unterschiede bei den bereitgestellten C-Bibliotheken gibt. Die Sourcery Codebench Lite-Edition stellt z.B. keine Bibliotheken mit FPU-Unterstützung bereit, so dass trotz vorhandener FPU beim Cortex-M4 nur suboptimaler Code erzegt werden kann. Siehe [3] für ein kleines Beispiel und eine Erklärung.
Die im Netz häufig anzutreffende summon-arm Toolchain hat einen der seltenen Compiler-Bugs [4] und sollte daher nicht verwendet werden, wenn man floatingpoint-Typen einsetzen möchte. Egal ob mit oder ohne FPU.
Beim Einsatz des gcc in Verbindung mit in C geschriebenem startup-Code bei den Optimierungslevels "-O2" und "-O3" muss zusätzlich "-fno-gcse" gesetzt werden, da ansonsten die von der CPU benötigte NVIC-Tabelle(n) und zugehörige Funktionen u.U. nicht so aussehen wie sie sollten.
IDEs
Inzwischen schon weiter verbreitet ist auch das auf Eclipse basierende Entwicklungspaket von Code-Red oder CooCox IDE
Kommerzielle Entwicklungsumgebungen für ARM-basierte Mikrocontroller sind z. B. Crossworks ARM (GCC-basiert, Windows, Mac OS und Linux), Cosmic Software 64k free (Windows), IAR Embedded Workbench for ARM (Windows) und MDK-ARM von Keil/ARM (Windows).
Für das MBED Board (mbed NXP LPC1768) ist ein kostenloser Onlinecompiler verfügbar (ARM Realview), der sich durch die Bereitstellung von sehr leistungsfähigen Funktionen (API's) auszeichnet. Den praktischen Nutzen für eine professionelle Anwendung mag man zu Recht in Frage stellen. Um mal schnell was zu programmieren ist das Ding unschlagbar, es ist faktisch keine Installation oder Einarbeitung in eine IDE nötig.
JTAG/SWD
Alle ARM-basierten Prozessoren verwenden ein einheitliches JTAG-Interface, über das Debugging und Speicherzugriff erfolgen kann. Nicht standardisiert sind allerdings die Verfahren zum Beschreiben des Flash-ROMs, deshalb muss man beachten ob die verwendete JTAG-Software Programmierroutinen für den jeweiligen Controller besitzt.
Es gibt Mikrocontroller (z.B. EFM32 von Energy Micro) welche NUR über SWD (Serial Wire Debugg) programmiert werden können.
Beispiele
Ein einfacher JTAG-Adapter für den Parallelport ist der "Wiggler"-kompatible, den man selbst bauen kann oder z. B. im Embedded Projects Shop für € 10,00 bestellen kann. Als Software lässt sich unter Windows und Linux OpenOCD (zusammen mit GDB) oder Crossworks ARM verwenden.
Für USB gibt es hier einen ebenfalls OpenOCD-kompatiblen JTAG-Adapter zum Preis von ca 45€.
Von NXP sind sehr preiswerte Entwicklungskits (ca. 25€ für Evaluation-Board incl. USB-JTAG Programmer und Debugger) erhältlich z.B. Watterott. Siehe dazu auch die Dokumentation von NXP zu den LPCXpresso-Entwicklungskits (PDF), oder diese Beschreibung.
Der J-Link-"Emulator" von Segger wird von vielen Softwarepaketen unterstützt und ist für den nicht-kommerziellen Einsatz zu günstigen Konditionen erhältlich.
Als Alternative zum Beschreiben des Flash über JTAG ist oft ein serieller Bootloader im Controller enthalten.
CMSIS - ARM Cortex Software Libaries
CMSIS - Cortex Microcontroller Software Interface Standard
Der ARM Cortex Microcontroller Software Interface Standard (CMSIS) ist ein herstellerunabhängiger Hardware Abstraction Layer für die Cortex-M-Prozessor -Serie. Die CMSIS ermöglicht konsistente und einfache Software-Schnittstellen für den Prozessor und die Peripherie, und vereinfacht damit die Software-Wiederverwendung.
Die CMSIS besteht aus folgenden Komponenten:
- CMSIS-CORE: Bietet eine Schnittstelle zum Cortex-M0, Cortex-M3, Cortex-M4, SC000 und SC300-Prozessoren und Peripherie-Register
- CMSIS-DSP: DSP-Bibliothek mit über 60 Funktionen in Festkomma-(fractional q7, q15, q31) und single precision floating-point (32-bit)-Implementierung
- CMSIS-RTOS API: Standardisierte Programmierschnittstelle für Echtzeit-Betriebssysteme für Thread-Steuerung, Ressourcen-und Zeitmanagement
- CMSIS-SVD: System View Beschreibung - XML-Dateien, die die Programmiereransicht des kompletten Mikrocontroller-Systems einschließlich Peripheriegeräte enthalten
Der Standard ist für Cortex-M-Mikrocontroller skalierbar: Von der kleinsten 4 KB MCU bis zu MCUs mit anspruchsvoller Kommunikations-Peripherie wie Ethernet oder USB. Der Speicherbedarf für die Core Peripheral Funktionen bedarf weniger als 1 KB-Code und weniger als 10 Bytes RAM.
Beispiele:
- Software Beispiele von Energy Micro basierend auf CMSIS
Mehr Informationen unter:
Freie Software
ARM/XSCALE/CORTEX Instruction Set Simulator
Die Firma Lauterbach bietet unter der Artikelnummer LA-8809 einen Instruction Set Simulator für ARM Cores an. Die Demoversion ist zur Evaluierung kostenlos. Einschränkungen bestehen in der Anzahl der zu ladenen Debugsymbole. Der Simulator unterstützt alle gängigen ARM Derivate und lädt alle üblichen Debugformate, wie die des RealView, IAR und TI Compilers, oder der freien GCC Tools.
Zum Simulator gibt es entsprechende zugehörige Debugtools, die allerdings käuflich zu erwerben sind.
Weblinks: [Download area mit ARM/XSCALE/CORTEX Simulator]
Siehe auch
- Linksammlung (Abschnitt ARM)
- Beschreibung der LPC1xxx-Familie
- LPCXpresso-Entwicklungskit
- Installationsanleitung zur IDE von Code-Red
- LPC1xxx Codebase
- ARM-elf-GCC-Tutorial
- AVR32
- Blackfin
- AT91SAM9260
- STM32
- JTAG
- EFM32
Weblinks
- ARM-GCC Forum im englischsprachigen "Ableger" von microcontroller.net embdev.net u.a. für WinARM, Yagarto, CS Codebench
- Infocenter von ARM Ltd.
- ARMuC ARM microcontroller Wiki
- Chaosradio Express - Die ARM-Architektur
Literatur
- ARM Systems Developer's Guide (2004) ISBN 1558608745 Im Buch blättern Programmbeispiele aus dem Buch, u.a. FFT, FIR/IIR-Filter, Division, Wurzel
- ARM Assembly Language - an Introduction (2007) ISBN 1847536964 Im Buch blättern Verlagsseite "Book on demand"
- ARM Rechnerarchitekturen für System-on-Chip-Design (2002) ISBN 3826608542
- Co-Verification of Hardware and Software for Arm Soc Design (2004) ISBN 0750677309
- ARM System-on-Chip Architecture (2000) ISBN 0201675196 Im Buch blättern
- ARM Architecture Reference Manual ISBN 0201737191 Im Buch blättern
- Messen, Steuern und Regeln mit ARM-Mikrocontrollern ISBN 3772340172 im Buch blättern
- Programming Arm Microcontrollers: Using C and the Lpc2100 Family (2005? /ab 1. Dezember 2008) ISBN 0321263359
- Arm Assembly: Fundamentals and Techniques (ab 1. März 2009) ISBN 1439806101
- Reliable Embedded Systems: Using 8051 and ARM Microcontrollers (2007) ISBN 0321252918 600 Seiten mit CD Inhaltsverzeichnis
- C und C++ für Embedded Systems (u.a. ARM Cortex-M3) mitp-Verlag 2008 ISBN 382665949X
- The Definitive Guide to the Arm Cortex-M0 (Joseph Yiu) Newnes Verlag ISBN 0123854776
- The Definitive Guide to the Arm Cortex-M3 (Joseph Yiu) Newnes Verlag ISBN 185617963X
Artikel aus der Kategorie ARM
<ncl style=compact maxdepth=2 headings=bullet headstart=2
showcats=1 showarts=1>ARM</ncl>