- ARM Cortex-M3
-
Der Cortex-M3 ist eine Architektur (ARMv7-M) für Mikroprozessoren von ARM. Diese Architektur wurde in 2004 eingeführt [1] und kann als Nachfolger für die ARM7 im Bereich der Mikrocontroller betrachtet werden.
Inhaltsverzeichnis
Hintergrund
ARM-Architekturen sind im Laufe der Zeit immer komplexer geworden. Der erste populäre ARM-Prozessor war (und ist immer noch) der ARM7, gefolgt vom ARM9 und ARM11 in unterschiedlichsten Ausführungen.
Die Einsatzgebiete für diese drei Prozessorfamilien lassen sich in etwa folgendermaßen einteilen:
ARM7: Dies war ein Selbstläufer im Bereich der Mikrocontroller. Ursprünglich nicht unbedingt für die Mikrocontrollerwelt gedacht, hat sich dieser Prozessor dort etabliert. Eingesetzt werden ARM7-basierte Mikrocontroller dort, wo etwas mehr Rechenleistung erforderlich ist als z. B. ein 8-Bit-Prozessor liefern kann.
ARM9: Einsatzgebiet sind Umgebungen, die weit mehr Rechenleistung erfordern als z. B. bei ARM7. Hier kommen Mechanismen wie z.B. MMU und MPU zum Einsatz. Einsatzgebiet sind u. a. Echtzeitsysteme
ARM11: High-End-Anwendungen im Bereich eingebetteter Systeme, die sehr viel Rechenleistung erfordern.
ARM hat sich nun entschlossen, seine neue Architektur in drei Zweige aufzuteilen, und somit Nachfolger für alle drei Bereiche zu schaffen. Der Sprung von ARM7 nach ARM9 ist meist schon zu groß, da der ARM9 um einiges komplexer ist und auch mehr Chipfläche benötigt.
Diese Aufteilung ermöglicht einen noch breiteren Einsatz der neuen Architektur(en) in der Welt der Embeddedsysteme.
Cortex A: Application (betriebssystembasierte Anwendungen)
Cortex R: Realtime (Echtzeitanwendungen)
Cortex M: Microcontroller (Cores für Mikrocontroller)
Die Cortex-M3-Architektur kann somit als Nachfolger für den ARM7 betrachtet werden und stellt mehr Rechenleistung als ein ARM7 bei geringer Komplexität des Programmiermodells und geringer Chipfläche zur Verfügung. Andere Untergruppen, wie z. B. der M1, sind z. B. für die Implementierung auf einem FPGA verfügbar.
Prinzipieller Aufbau
Der Cortex-M3 ist eine völlig neu entwickelte Architektur von ARM mit dem Ziel einen sehr leistungsfähigen, aber vom Programmiermodell her weniger komplexen Prozessor zu entwerfen, der im Bereich der jetzigen und zukünftigen Mikrocontroller des (klassischen) 8- und 16-Bit-Bereichs eingesetzt werden kann. Wie alle ARM-Architekturen hat auch der M3 (intern) eine 32-Bit-Architektur, arbeitet aber ausschließlich mit dem neuen Thumb2-Befehlssatz. (Andere ARM-Cores können zwischen ARM- und Thumb-Befehlssatz umschalten.)
Herzstück des Cortex-M3-Prozessors ist der Cortex-M3-Kern mit dreistufiger Pipeline, basierend auf der Harvard-Architektur. ARM-Prozessoren sind für beide Architekturen, Von-Neumann (wo ein Daten- und Adressbus zum Laden von Befehlen und Daten verwendet wird), und Harvard verfügbar. Die Harvard-Architektur zeichnet sich dadurch aus, dass zwei getrennte Bussysteme (und zwei getrennte Speicher) zum Laden von Daten und Befehlen existieren, d. h. der Prozessor kann gleichzeitig sowohl Daten als auch Befehle lesen (bzw. Daten in den Speicher zurückschreiben). Nach außen hin (Programmiermodell) ist der Cortex-M3 allerdings ein Von-Neumann-Modell, das bedeutet, dass sein ganzer (geteilter) Adressraum linear programmiert werden kann. Das erspart aufwendige Zugriffe auf den Programmspeicher, wenn dort Konstanten abgelegt sind.
Bei einem 32-Bit-Prozessor ist der verfügbare Adressraum mit 232 Adressen für einen Mikrocontroller überdimensional groß. Daher existieren genügend Adressen, um beide Speicher im gemeinsamen Adressraum anzusprechen. Für den Programmierer des Systems ist dies ein überaus großer Vorteil, da Daten, welche im Flash (Programmspeicher) abgelegt werden (Konstanten, Strings, etc.) direkt linear adressiert werden können und nicht erst mit umständlichen Befehlen geladen werden müssen.
In den Kern des Cortex-M3 wurden einige neue Features integriert. So gehören ein echter Nested Vectored Interrupt Controller, eine Art Sprungvorhersage und Multiplikation in nur einem Takt, dazu.
Sprungvorhersage (kurze Erläuterung)
Die Sprungvorhersage im Cortex-M3 ist interessant gelöst: Zum Laden eines Befehls werden nur 16 Bit benötigt, das Speicherinterface ist aber 32 Bit breit, und es werden immer zwei Befehle gleichzeitig geladen (fetch). Ein Befehl wird jeweils zwischengespeichert. Im Falle eines Sprungs ist erst in der Exec-Stufe (vgl. Pipelines) bekannt, ob der Sprung genommen werden soll oder nicht. Wenn nein, wird wie gehabt weitergearbeitet. Wenn ja, wird der gepufferte Befehl in die Pipeline geladen und damit weitergearbeitet. Somit geht bei der dreistufigen Pipeline nur ein Takt (anstelle von zwei) verloren.
Thumb2
Der Prozessorkern arbeitet ausschließlich mit dem neuen Befehlssatz Thumb2, wodurch er um einiges effizienter arbeitet als ältere ARM-Prozessoren mit Thumb (bezogen auf die Ausführungszeit) und mit um etwa 30 % [2] kompakterem Code operiert als ältere ARM-Prozessoren im ARM-Mode. Der Thumb-Befehlssatz ist ein 16-Bit-Befehlssatz, der darauf ausgelegt ist, möglichst effizient mit Compilern zu arbeiten, d. h. z. B. C/C++-Code umzusetzen, aber natürlich auch unter Assembler verwendet werden kann.
Thumb2-Befehle sind (wie Thumb) nur 16 Bit lang. Das ermöglicht die Verwendung eines 16-Bit-Speichers, ohne dass immer zwei Takte zum Laden eines Befehls verwendet werden müssen. Fast alle klassischen ARM-Befehle wurden auf 16 Bit umgesetzt, nur ein paar wenige müssen einen zweiten 16-Bit-Teil nachladen.
Weitere große Neuerungen in Thumb2 sind z. B. native Bitfield manipulation, Hardware-Division und If-Then-Anweisungen. Letztere ermöglichen eine bedingte Ausführung von Code (ohne springen zu müssen).
Einfach gehaltenes Programmiermodell
Ein weiterer großer Vorteil der Cortex-M3-Architektur ist, dass der Programmierer für vergleichsweise einfache Aufgaben über keine genauen Kenntnisse des internen Aufbaus und der Struktur des Kerns verfügen muss und auch keine Assemblerkenntnisse zum Programmieren benötigt.
Ein hardwarebasiertes Interruptschema ermöglicht ein sehr einfaches Schreiben von Interrupthandlern, ohne dass erst komplizierter Start-up-Code in Assembler geschrieben und Register umgesetzt werden müssen.
Peripherie
Der Cortex-M3 bringt bereits einige Peripherien mit sich. So sind z. B. ein echter Vectored-Interrupt-Controller (VIC), Memory-Protection, Timer und Debug- und Trace-Möglichkeiten in den Prozessor integriert.
Zusätzliche Peripherien wie UART, weitere Timer, PWM, I2C, SPI, usw. werden von den Chipherstellern entwickelt, oder als IP (Intellectual Property) von ARM dazugekauft. Diese lassen sich – wie gewohnt – über Register ansprechen.
Vectored Interrupt Controller
Klassischerweise besteht die Vektortabelle bei ARM-basierten Controllern aus echten Befehlen, nämlich meistens Sprungbefehlen zu einer Adresse (an der ein weiterer Sprung oder die Routine (ISR) steht). Eine Ausnahme kann hier die Speicherstelle für den FIQ (Fast Interrupt reQuest) bilden, da sie den letzten Platz darstellt und dort sofort mit dem Code für diese sehr schnell auszuführende Interruptroutine begonnen werden kann.
Mit der Implementierung des NVIC im Cortex-M3 ist diese Tabelle jetzt eine echte Vektortabelle, d. h. dort stehen Sprungadressen (Vektoren) und keine gültigen Befehle. Über sein direktes Interface zum Core können diese Vektoren (Adressen) sehr schnell geladen und angesprungen werden.
Der Interruptcontroller ist beim Cortex-M3 sehr eng mit dem Kern verbunden. Die Sicherung des Kontextes wird vom Prozessor automatisch vorgenommen. Weitere Besonderheiten wie „Late Arriving Interrupt“ und „Tail Chaining“, bei dem eine POP/PUSH-Sequenz eingespart wird (vgl. ARM7), ergeben ein sehr effizientes Interruptsystem. Allgemein kann jedem Interrupt eine Priorität zugewiesen werden, d. h. die Priorität wird nicht über die Position in der Vektortabelle fest vorgegeben. Die Prioritäten können in Gruppen organisiert werden. Interrupts in verschiedenen Gruppen können sich gegenseitig unterbrechen, innerhalb einer Gruppe unterbricht ein Interrupt höherer Priorität keinen niederpriorigen. Das ist z. B. wichtig, um Deadlocks bei gemeinsam verwendeter Hardware zu vermeiden.
Registersatz
Klassische ARM-Cores besitzen einen Satz von über 37 32-Bit-Registern, die sich auf verschiedene Modi aufteilen. Je nach Modus sind verschiedene Register sichtbar. Das erspart das Sichern von Registern z. B. für den FIQ (Schattenregister R8 bis R14 überdecken die Register aus dem User-Mode).
Der Cortex-M3 besitzt nur noch einen Satz von Registern (R0 bis R12, SP, LR, PC und CPSR) und einen zusätzlichen Stackpointer (SP). Beim Sprung in eine ISR sichert der Core automatisch die acht Register PC, CPSR, LR R0 bis R3 und R12.
Silizium
ARM ist ein Fabless-Unternehmen, das heißt, sie stellen selbst keine Chips her. ARM entwickelt Prozessorarchitekturen (und Peripherie), und stellt diese anderen Firmen als IP-Block (Intellectual Property) zur Verfügung.
Die erste Implementierung dieses Prozessors in einen Mikrocontroller wurde von dem Startup-Unternehmen Luminary Micro vorgenommen. Luminary Micro ist ebenfalls ein Fabless-Unternehmen und Hersteller der „Stellaris“-Mikrocontrollerfamilie (LM3S811, LM3S828, u. a). Eine Vielzahl von Peripherien wurden auf dem Chip implementiert; neben den gängigen Elementen wie UART, Timer etc. findet sich z. B. eine komplexe 3-Phasen-Motorsteuerung.
Eine weitere Cortex-M3-basierte Mikrocontrollerfamilie ist seit einiger Zeit von STMicroelectronics verfügbar (siehe Weblinks). Die STM32-Familie basiert ebenfalls auf dem Cortex-M3-Kern von ARM und beinhaltet eine Vielzahl sehr interessanter Peripherieelemente, zum Beispiel zur 3-Phasen-Motorsteuerung, Hall-/Inkrementalgeber-Interface, DMA, 12-Bit-ADC, sowie einiges an Standardperipherien. Sehr interessante Punkte dieser Implementierung sind z. B. das vom Core getrennte Debug-Modul, das auch bei „versehentlicher“ Ver-programmierung des Clock Trees den Zugriff auf den Core ermöglicht, sowie eine Clock-Security-Schaltung, die einen Ausfall der externen Clock (z. B. des Quarzes) bemerkt und auf einen internen Oszillator umschalten kann – ohne dass der Core „abstürzt“. Ein sauberes Programmiermodell für die Peripherals und ein hervorragendes System aus Headerfiles für das Registermapping, das eine einfache Programmierung des Cores auch ohne Driver-Library ermöglicht, runden diesen Mikrocontroller ab.
ARM Cortex Microcontroller Software Interface Standard (CMSIS)
Um eine gemeinsame Basis für die Programmierung von Cortex-M-basierten Mikrocontrollern zu ermöglichen, wurde am 12. November 2008 von ARM eine Standard-HAL veröffentlicht. Sie ist in Zusammenarbeit mit den Partnern der Industrie entstanden, und bietet auf dem Layer1, der Abstraktion der Register sowie deren Abbildung auf das Speicherlayout eine gemeinsame, einfach zu verwendende Programmierbasis. Bisher gab es zu der Vielzahl von Implementationen jeweils eigene Ansätze des Programmiermodells, von #defines auf einzelne Register bis hin zu komplexen Strukturen. Die HAL verwendet das Konzept der komplexen Strukturen, wobei für jedes Peripheral eine Struktur existiert, welche die Register des jeweiligen Peripherals komplett abbildet. Die Strukturen werden an die Adressen der Peripherals gemappt, was den Zugriff Peripheral→Register = Value bzw. value = Peripheral→Register ermöglicht.
Ein Layer 2, ein sehr effizienter Layer aus inline-Funktionen, bietet weitere Helferfunktionen zum einfachen NVIC-Handling sowie ein SystemTick-Timer-Setup, welches auf die Belange von Echtzeitbetriebssystemen abgestimmt ist.
Weblinks
- http://www.arm.com/pdfs/IntroToCortex-M3.pdf Whitepaper von ARM zum Cortex-M3 (PDF-Datei; 345 kB)
- http://www.luminarymicro.com Stellaris, Cortex-M3 von Luminary Micro (Texas Instruments)
- http://www.standardics.nxp.com/products/lpc1000 LPC1000, Cortex-M3 von NXP Semiconductors
- http://www.st.com/internet/mcu/class/1734.jsp STM32, Cortex-M3 von ST Microelectronics
- http://www.toshiba-components.com/microcontroller/Cortex.html TX03, Cortex-M3 von Toshiba
- http://www.atmel.com/products/at91/sam3landing.asp?family_id=605, AT91SAM3U, Cortex-M3 Controller von Atmel
- http://emea.fujitsu.com/fm3, Cortex-M3 Microcontroller von Fujitsu
- Hersteller von Starterkits und Serienmodulen
Einzelnachweise
- ↑ "Cortex-M3 features (english)", ARM, Core
- ↑ "Improved Code Density with Performance and Power Efficiency", ARM, Products & Solutions
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)
ARM8–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–Familie: ARMv7-A (Cortex-A5, Cortex-A8, Cortex-A9, Cortex-A9 MPCore, Cortex-A15 MPCore) | ARMv7-R (Cortex-R4, Cortex-R4F) | ARMv7-M (Cortex-M3) | ARMv6-M (Cortex-M0, Cortex-M1)
Wikimedia Foundation.
Schlagen Sie auch in anderen Wörterbüchern nach:
ARM Cortex-A8 — Designed by ARM Holdings Common manufacturer(s) TSMC Instruction set ARMv7 Cores 1 L1 cache 32 KB/32 KB … Wikipedia
ARM Cortex-M4 — Der Cortex M4 ist eine neue Architektur (ARMv7 M) für Mikroprozessoren von ARM. Diese Architektur kann als Nachfolger für die ARM7 im Bereich der Mikrocontroller betrachtet werden. Der ARM Cortex M4 Prozessor wird von ARM mit der Eigenschaft… … Deutsch Wikipedia
ARM Cortex-A9 MPCore — Designed by ARM Common manufacturer(s) TSMC Max. CPU clock rate 800 MHz to 2000 MHz Instruction set ARMv7 Cores … Wikipedia
ARM Cortex-A15 MPCore — Produced in production late 2011,[1] to market late 2012[2] Designed by ARM Max. CPU clock rate 1000 MHz to 2500 MHz … Wikipedia
ARM (архитектура) — Эту статью следует викифицировать. Пожалуйста, оформите её согласно правилам оформления статей. У этого термина существуют и другие значения, см. ARM … Википедия
Cortex-M3 — Logo Der Cortex M3 ist eine neue Architektur (ARMv7 M) für Mikroprozessoren von ARM. Diese Architektur kann als Nachfolger für die ARM7 im Bereich der Mikrocontroller betrachtet werden. Inhaltsverzeichnis 1 Hintergrund … Deutsch Wikipedia
Cortex M3 — Logo Der Cortex M3 ist eine neue Architektur (ARMv7 M) für Mikroprozessoren von ARM. Diese Architektur kann als Nachfolger für die ARM7 im Bereich der Mikrocontroller betrachtet werden. Inhaltsverzeichnis 1 Hintergrund … Deutsch Wikipedia
ARM-Architektur — Logo ARM Prozessorchip von Conexant, der beispielsweise in … Deutsch Wikipedia
ARM (компания) — У этого термина существуют и другие значения, см. ARM. ARM Limited … Википедия
Cortex — (Latin: bark , rind , shell or husk ) may refer to: Contents 1 Sciences 2 Anatomy 2.1 Organs 2.1.1 The brain 3 … Wikipedia