ARM Cortex-M
ARM Cortex-M ist eine Familie von 32-Bit-Mikroprozessoren, die vom Unternehmen ARM entwickelt wurde und unter der Lizenz von verschiedenen Hardwareherstellern produziert wird. Der Kern stellt eine Reduced Instruction Set Computer (RISC) dar, ist ein Teil der ARMv6-Architektur und unterteilt sich in aufsteigender Komplexität in die Einheiten Cortex-M0[1], Cortex-M0+[2], Cortex-M1[3], Cortex-M3[4] und Cortex-M4[5]. Primärer Einsatzbereich sind Mikrocontroller.
Inhaltsverzeichnis |
Allgemeines [Bearbeiten]
ARM Limited stellt selber keine Mikroprozessoren (CPUs) her, sondern lizenziert den Kern an interessierte Hersteller und Chipproduzenten, sogenannte integrated device manufacturers (IDM), welche den eigentlichen ARM-Kern um eigene und herstellerspezifische Peripherie wie z. B. Controller Area Network (CAN), Local Interconnect Network (LIN), Universal Serial Bus (USB), I²C-Bus, Serial Peripheral Interface (SPI), Serielle Schnittstellen, Ethernet-Schnittstellen, Pulsweitenmodulation-Ausgänge, oder Analog-Digital-Wandler erweitern. Diese Einheiten werden über den Advanced Microcontroller Bus Architecture (AMBA) an den ARM-Kern angeschlossen. ARM Limited bietet für den Kern verschiedene Lizenzmodelle an, welche sich in den Kosten und Umfang der zur Verfügung gestellten Daten unterscheiden. In allen Fällen ist das Recht verbunden, eigene Hardware mit ARM-Prozessoren frei vertreiben zu dürfen.
Die ARM Cortex-M Prozessoren sind für den Lizenznehmer als IP-Core in der Hardwarebeschreibungssprache Verilog verfügbar und können mittels Logiksynthese als digitale Hardwareschaltung abgebildet werden, um dann entweder in Field Programmable Gate Arrays (FPGAs) oder Anwendungsspezifische integrierte Schaltungen (ASICs) eingesetzt zu werden. Je nach Lizenzmodell sind auch Erweiterungen und Veränderung gestattet und erlauben es den Hardwarehersteller neben der Integration eigener Peripherie Erweiterungen wie spezielle Taktformen, optimierten Leistungsverbrauch für mobile Geräte, eigene Maschinenbefehle oder die Integration spezieller Debugschnittstellen.
Befehlssatz [Bearbeiten]
Die Prozessoren Cortex-M0 und M1 basieren auf einer ARMv6-M Architektur,[6], die Cortex-M3 auf einer ARMv7-M Architektur,[7] und die Cortex-M4 auf einer ARMv7-ME Architektur.[7] Die Unterschiede betreffen primär den Befehlssatz und die zur Verfügung stehenden Maschinenbefehle. Die Linien sind so festgelegt, dass die binären Maschinenbefehle aufwärts kompatibel sind, das heißt, ein Maschinenprogramm von einem Cortex-M0 oder M1 ist ohne Veränderung auch auf einem Cortex-M3 oder M4 lauffähig. Umgekehrt können nicht alle Befehle des Cortex-M3 oder M4 auf der Cortex-M0 oder M1 ausgeführt werden.[6][7]
Alle Prozessoren aus der Cortex-M Familien unterstützen die Basisbefehle aus dem so genannten Thumb-Befehlssatz, dem Thumb-2-Befehlssatz und bieten zusätzlich eine Multipliziereinheit in Hardware. M0 und M1 fehlen allerdings im Thumb-Befehlssatz neuere Erweiterungen wie die Befehle CBZ, CBNZ und IT, welche erst in der später entwickelten ARMv7-M-Architektur verfügbar sind. Und der Thumb-2-Befehlssatz ist auf einige wenige Befehle wie BL, DMB, DSB, ISB, MRS und MSR limitiert.[6][7] Die Einschränkungen bei M0 und M1 sind Folge der Vorgabe, die Chipfläche möglichst klein zu halten.
Cortex-M3, mit größerer Chipfläche, umfasst den vollständigen Thumb- und Thumb-2-Befehlssatz, bietet darüber hinaus einige spezielle Instruktionen, eine eigene Divisionseinheit in Hardware und kann mathematische Befehle wie Addition statt mit Überlauf auch mit Sättigung behandeln, was insbesondere im Bereich der Signalverarbeitung von Bedeutung ist. Cortex-M4 erweitert diese Möglichkeiten um einige spezielle Befehle, wie sie bei digitalen Signalprozessoren (DSP) üblich sind, und bietet optional eine Gleitkommaeinheit für die Bearbeitung von Gleitkommazahlen nach der Norm IEEE 754 für einfache Genauigkeit.[6][7]
| ARM Cortex-M |
Thumb | Thumb-2 | Hardware- Multiplizierer |
Hardware- Dividierer |
Math. Operationen mit Sättigung |
DSP Erweiterung |
Gleitkommaeinheit | ARM Architektur |
|---|---|---|---|---|---|---|---|---|
|
|
Größtenteils | Teilmenge | 1 oder 32 Zyklen | Nein | Nein | Nein | Nein |
|
|
|
Größtenteils | Teilmenge | 3 oder 33 Zyklen | Nein | Nein | Nein | Nein |
|
|
|
Vollständig | Vollständig | 1 Zyklus | Ja | Ja | Nein | Nein |
|
|
|
Vollständig | Vollständig | 1 Zyklus | Ja | Ja | Ja | Optional |
|
| Typ | SysTick Timer |
Bit-Banding | Speicherschutz (MPU) |
|---|---|---|---|
|
|
Optional | Nein | Nein |
|
|
Optional | Nein | Nein |
|
|
Ja | Optional | Optional |
|
|
Ja | Optional | Optional |
Die meisten Cortex-M3 und -M4-Chips bieten Bit-Banding. Dies bedeutet, dass bestimmte Bits im Speicher auf eine eigene Word-Adresse gemappt und dadurch einfacher angesprochen werden können. Es ist nicht zu verwechseln mit Bit-Banging. Ob die Funktion aber auf einer konkreten Cortex-M-Implementierung tatsächlich vorhanden ist, sollte im Einzelfall geprüft werden.[8]
Typen [Bearbeiten]
Cortex-M0 [Bearbeiten]
Besonderheiten [Bearbeiten]
Besonderheiten des Cortex-M0 sind:
- ARMv6-M Architektur [6]
- Befehlssatz
- Thumb - fast vollständig bis auf CBZ, CBNZ, IT.
- Thumb-2 - Teilmenge bestehend aus BL, DMB, DSB, ISB, MRS, MSR.
- 32-bit Multipliziereinheit, zur Synthese wählbar mit einem Zyklus, was eine höhere Chipfläche bedingt, oder mit 32 Zyklen und weniger Chipfläche.
- 3-Stufige Pipeline
Implementierungen [Bearbeiten]
Unter anderem bieten folgende Halbleiterhersteller Cortex-M0 basierende Mikrocontroller an:
- Energy Micro EFM32 Zero Gecko Familie
- NXP LPC11xx, LPC12xx Familien
- nuvoTon NuMicro Faminlie
- STMicroelectronics STM32 F0 Familie
- Infineon XMC1000-Familie
Cortex-M1 [Bearbeiten]
Besonderheiten [Bearbeiten]
Besonderheiten des Cortex-M1 sind:
- ARMv6-M Architektur [6]
- Befehlssatz
- Thumb - fast vollständig bis auf CBZ, CBNZ, IT.
- Thumb-2 - Teilmenge bestehend aus BL, DMB, DSB, ISB, MRS, MSR.
- 32-bit Multipliziereinheit, zur Synthese wählbar mit einem Zyklus, was eine höhere Chipfläche bedingt, oder mit 32 Zyklen und weniger Chipfläche.
Implementierungen [Bearbeiten]
Unter anderem bieten folgende Halbleiterhersteller von Field Programmable Gate Array (FPGA) sogenannte Soft-Cores für ihre Logikbausteine an:
Cortex-M3 [Bearbeiten]
Besonderheiten [Bearbeiten]
Besonderheiten des Cortex-M3 sind:[4]
- ARMv7-M Architektur [7]
- Befehlssatz
- Vollständigen Thumb-Befehlssatz
- Vollständigen Thumb-2-Befehlssatz
- 32-bit Multipliziereinheit mit einem Zyklus, 2 bis 12 Zyklen lange Divisionsbefehl, Mathematische Funktionseinheit mit Überlauf- oder Sättigungseigenschaft.
- 3-Stufige Pipeline mit Sprungvorhersage
- 1 bis 240 physikalische Hardwareinterrupt, eine spezielle Form von Interrupts mit 12 Zyklen Latenz.
- Verschiedenartiger Bereitschaftsbetrieb (Sleep Modes)
- Speicherschutzeinheit (MPU) mit 8 Regionen als Option
- 1,25 DMIPS pro MHz Taktfrequenz
- Herstellbar mit 90 nm-Halbleitertechnologie.[9]
- 32 µW pro MHz Taktfrequenz
- Fläche am Chip für den Kern: 0,12 mm2
Implementierungen [Bearbeiten]
Unter anderem bieten folgende Halbleiterhersteller Cortex-M3 basierende Mikrocontroller an:
- Actel SmartFusion Familie
- Atmel SAM3 Familie
- Cypress Semiconductor PSoC 5
- Energy Micro EFM32 Tiny Gecko, Gecko, Leopard Gecko und Giant Gecko Familien
- Fujitsu FM3 Familie
- NXP LPC13xx-, LPC17xx-, LPC18xx-Familien
- STMicroelectronics STM32 F2, F1, L1, W Familien
- Texas Instruments Stellaris, TMS470, und einige Prozessoren aus der OMAP4-Familie
- Toshiba TX03 Serie
Cortex-M4 [Bearbeiten]
Besonderheiten [Bearbeiten]
Im Aufbau entspricht der Cortex-M4 einem M3 welcher um spezielle DSP-Befehle und optional eine Gleitkommaeinheit erweitert ist. Cortex-M4 mit Gleitkommaeinheit wird als Cortex-M4F bezeichnet. Besonderheiten des Cortex-M4 sind:[5]
- ARMv7-ME Architektur [7]
- Befehlssatz
- Vollständigen Thumb-Befehlssatz
- Vollständigen Thumb-2-Befehlssatz
- 32-bit Multipliziereinheit mit einem Zyklus, 2 bis 12 Zyklen lange Divisionsbefehl, Mathematische Funktionseinheit mit Überlauf- oder Sättigungseigenschaft.
- DSP-Erweiterungen: 16/32-bit MAC-Befehl mit einem Zyklus, 8/16-Bit SIMD-Arithmetik.
- Optionale Gleitkommaeinheit mit der Bezeichnung FPv4-SP, IEEE-754 kompatibel.
- 3-stufige Pipeline mit Sprungvorhersage
- 1 bis 240 physikalische Hardwareinterrupt, eine spezielle Form von Interrupts mit 12 Zyklen Latenz.
- Verschiedenartiger Bereitschaftsbetrieb (Sleep Modes)
- Speicherschutzeinheit (MPU) mit 8 Regionen als Option
- 1,25 DMIPS pro MHz Taktfrequenz
Implementierungen [Bearbeiten]
Unter anderem bieten folgende Halbleiterhersteller Cortex-M4 basierende Mikrocontroller an:
- Atmel: SAM4-Familie (Cortex-M4)
- Freescale: Kinetis-Familie (Cortex-M4 und Cortex-M4F)
- STMicroelectronics: STM32-F4-Familie (Cortex-M4F)
- Infineon: XMC4000-Familie (Cortex-M4F)
- Texas Instruments: Stellaris-LM4F-Familie (Cortex-M4F)
- NXP: LPC4300-Familie (Cortex-M4)
Entwicklungswerkzeuge [Bearbeiten]
Als integrierte Entwicklungsumgebungen steht unter anderen die GNU Toolchain mit Eclipse zur Verfügung. Daneben gibt es noch verschiedene kommerzielle Angebote beispielsweise von IAR oder Keil. Als Betriebssystem können unter anderem Echtzeitbetriebssysteme wie FreeRTOS, OpenRTOS oder SafeRTOS zur Anwendung. Auf Prozessoren mit externem Speicherinterface ist es auch möglich, µClinux auszuführen. Als Debugger für die JTAG-Schnittstelle sind unter anderem der GNU Debugger in Verbindung mit OpenOCD für die Hardwareanbindung verfügbar.
Die Dokumentation ist sehr umfangreich und wirkt am Anfang abschreckend. Insbesondere sind die Kernfunktionen der Cortex-M-Familie in den Unterlagen von ARM beschrieben und für alle Implementierungen identisch, während die diversen konkreten Hardwareimplementierungen und herstellerspezifische Erweiterungen in den jeweiligen Herstellerunterlagen beschrieben sind.
Literatur [Bearbeiten]
- Joseph Yiu: The Definitive Guide to the ARM Cortex-M0. 2. Auflage. Newnes, 2011, ISBN 978-012385477-3, S. 552.
- Joseph Yiu: The Definitive Guide to the ARM Cortex-M3. 2. Auflage. Newnes, 2009, ISBN 978-185617963-8, S. 479.
Weblinks [Bearbeiten]
- ARM Cortex-M Website
- Quick Reference Cards für die Befehlssätze: Thumb (PDF; 127 kB), ARM and Thumb-2 (PDF; 226 kB), Vector Floating Point (PDF; 99 kB)
-
Cortex-M-Serie ARM-Website ARM-Core ARM-Architektur M0 M0 Cortex™-M0 Revision: r0p0 - Technical Reference Manual (PDF; 461 kB) ARMv6-M M0+ M0+ Cortex-M0+ Revision: r0p0 Technical Reference Manual (PDF; 417 kB) ARMv6-M M1 M1 Cortex™-M1 Revision: r1p0 - Technical Reference Manual (PDF; 943 kB) ARMv6-M M3 M3 Cortex™-M3 Revision: r2p0 - Technical Reference Manual (PDF; 2,4 MB)
Cortex™-M3 Revision: r1p1 - Technical Reference Manual (PDF; 2,1 MB)
ARM Core Cortex-M3 / Cortex-M3 with ETM (AT420/AT425) - Errata Notice (PDF; 250 kB)ARMv7-M M4 M4 Cortex®-M4 Revision: r0p1 - Technical Reference Manual (PDF; 914 kB)
Cortex™-M4 Technical Reference Manual ARM DDI 0439B Errata 01 (PDF; 121 kB)ARMv7-ME
Einzelnachweise [Bearbeiten]
- ↑ Cortex-M0 m0 r0p0 Technical Reference Manual; ARM Holdings. (PDF; 461 kB)
- ↑ Cortex-M0+ m0p r0p0 Technical Reference Manual; ARM Holdings. (PDF; 417 kB)
- ↑ Cortex-M1 m1 r1p0 Technical Reference Manual; ARM Holdings. (PDF; 943 kB)
- ↑ a b Cortex-M3 m3 r2p0 Technical Reference Manual; ARM Holdings. (PDF; 2,4 MB)
- ↑ a b Cortex-M4 m4 r0p1 Technical Reference Manual; ARM Holdings. (PDF; 914 kB)
- ↑ a b c d e f g h i ARMv6-M Architecture Reference Manual; ARM Holdings.
- ↑ a b c d e f g h i j ARMv7-M Architecture Reference Manual; ARM Holdings.
- ↑ Cortex-M3 Embedded Software Development; App Note 179; ARM Holdings. (PDF; 179 kB)
- ↑ ARM Cortex-M3 Specifications, ARM Holdings, engl.
ARM1-Familie: ARMv1 (ARM1)
ARM2-Familie: ARMv2 (ARM2) | ARMv2a (ARM250)
ARM3-Familie: ARMv2a (ARM2a)
ARM6-Familie: ARMv3 (ARM60, ARM600, ARM610)
ARM7-Familie: ARMv3 (ARM700, ARM710, ARM710a, ARM7100, ARM7500, ARM7500FE)
ARM7TDMI-Familie: ARMv4T (ARM7TDMI, ARM7TDMI-S, ARM710T, ARM720T, ARM740T) | ARMv5TEJ (ARM7EJ-S)
StrongARM-Familie: ARMv4 (SA-110, SA-1110)
ARM-Familie: ARMv4 (ARM810)
ARM9TDMI-Familie: ARMv4T (ARM9TDMI, ARM920T, ARM922T, ARM940T)
ARM9E-Familie: ARMv5TE (ARM946E-S, ARM966E-S, ARM968E-S, ARM996HS) | ARMv5TEJ (ARM926EJ-S)
ARM10E-Familie: ARMv5TE (ARM1020E, ARM1022E) | ARMv5TEJ (ARM1026EJ-S)
XScale-Familie: ARMv5TE (80200, IOP310, IOP315, 80219, IOP321, IOP33x, IOP34x, PXA210, PXA250, PXA255, PXA263, PXA26x, PXA27x, PXA800F, PXA800EF, PXA3xx, PXA900, IXC1100, IXP2400, IXP2800, IXP2850, IXP2325, IXP2350, IXP42x)
ARM11-Familie: ARMv6 (ARM1136J-S, ARM1136JF-S) | ARMv6T2 (ARM1156T2-S, ARM1156T2F-S) | ARMv6KZ (ARM1176JZ-S, ARM1176JZF-S) | ARMv6K (ARM11 MPCore)
Cortex-A- und -R-Familien: ARMv7-A (Cortex-A5, Cortex-A8, Cortex-A9, Cortex-A9 MPCore, Cortex-A15 MPCore) | ARMv7-R (Cortex-R4, Cortex-R4F) |
Cortex-M-Familie: ARMv7-M (Cortex-M3, Cortex-M4) | ARMv6-M (Cortex-M0, Cortex-M1)

