War die ARM-Welt früher durch die drei unterschiedlichen Kerne relativ übersichtlich ist sie durch die Einführung der ARMCortex-Kerne recht komplex geworden. Es gibt im Augenblick drei ARMCortex-Serien, die für unterschiedliche Anwendungen optimiert sind. Zusätzlich gibt es in diesen Serien unterschiedliche Kerne, die sich in der Leistungsfähigkeit unterscheiden. Dadurch entsteht am Ende eine sehr große Vielfalt von Kernen mit denen jetzt wahrscheinlich wirklich alle Anwendungen abgedeckt werden können.

ARMCortex-Serien und Unterklassen im Überblick:

  • Cortex-M
    Hauptanwendung dieser Serie ist der Einsatz als Embedded Controller bei Mess-, Steuer-  und Regelaufgaben.
    CORE Eigenschaften Max. Clk (MHz)
    Cortex-M0 Kleinster Cortex-Kern, optimiert auf DICE-Größe und Energieverbrauch. Anwendungsbereich: Ersatz von 8/16-Bit Controllern, Embedded in FPGA's 50 MHz
    Cortex-M3 Standard-Kern für MSR-Aufgaben 120 MHz
    Cortex-M4 Cortex-Kern mit DSP-Erweiterung für rechenintensive Anwendungen (Motorregelungen, Stromrichter usw.)
    200MHz
    Cortex-M5 Cortex-Kern mit DSP-Erweiterung und erweiterten Caching-Methoden für rechenintensive und Kommunikationsanwendungen
    >200MHz
  • Cortex-A
    Diese Serie ist für leistungsfähige Multimediasystem, Smartphones usw. gedacht.
    CORE Eigenschaften Max. Clk (MHz)
    Cortex-A7 Low Power Kern, der eigentlich als Mehrfach-Core zur Zusammenarbeit mit dem A15-Kern entwickelt wurde
    > 1 GHz
    Cortex-A8 SingleCore Applikationsprozessor mit NEON SIMD Coprozessor und Vektor-FPU > 1 GHz
    Cortex-A9 DualCore Applikationsprozessor > 1 GHz
    Cortex-A15 Cortex-Kern optimiert für Multicore-Prozessoren (QuadCore)
    > 1GHz

  • Cortex-R
    Spezial-Kern für Sicherheitsrelevante Anwendungen. Dieser Kerne enthalten diverse interne Test- und Prüfverfahren die sicherstellen, das der Controller ordnungsgemäß arbeitet und Fehler erkannt werden können bevor Schaden entsteht.

 

Die Hauptänderung der Cortex-Familie gegenüber den alten ARM-Kernen ist, dass nur noch der "Thumb2"-Befehlssatz unterstützt wird. Dadurch ist der neue Kern nicht mehr vollständig Befehlskompatibel zu den alten ARM-Kernen. Mit diesen Bruch könnten ein paar Probleme der alten Architekturen gelöst werden und weitere Optimierungen bezüglich der Rechenleistung und Herstellungskosten durchgeführt werden.

Übersicht Rechenleistung der einzelnen ARM-Kerne:

CORE DMIPS/MHz Max. Clk (MHz)
ARM7 0.95 < 100MHz
ARM9 1.1 < 500MHz
CortexM0 0.95 50MHz
CortexM3 1.25 > 100MHz
CortexA8 2 > 1 GHz
CortexA9 2.5 > 1GHz

 


Durch den Wegfall des alten ARM-Befehlssatzes werden viele Probleme, die sich bei der Umschaltung zwischen ARM- und Thumb-Code z.B. in Interruptroutinen ergeben, vermieden. Außerdem hat die Cortex-Familie jetzt einen Interruptcontroller und Systemtimer von ARM, der in allen Cortex-Controllern eingebaut ist.

Der neue Interrupt-Controller ist direkter an den Kern angebunden und sorgt jetzt automatisch dafür, dass alle Register beim Einsprung in eine Interrupt-Routine gesichert werden. Dadurch entfällt die Notwendigkeit eigene Interrupt-Wrapper in Assembler zu schreiben. Ein angenehmer Nebeneffekt dieses hardwaregesteuerten Content-Switching der Register ist, dass die Interruptlatenz jetzt immer gleich ist. Bei den alten ARM-Kernen war die Interrupt-Latenz davon u.a. abhängig, welchen Befehlscode (ARM oder Thumb) bei Auftreten des Interrupts gerade ausgeführt wurde. 

Mit der standardisierten Basisarchitektur aus Interruptcontroller und Systemtimer rund um den Kern hat ARM auch die Möglichkeit geschaffen einen Standard für die Initialisierung des Kerns einzuführen. Der neue Standard heißt "CMSIS" und wird von den meisten Tools bereits unterstützt. Insgesamt vereinfacht sich die Portierung von Software zwischen einzelnen Cortex-Controllern und auch der Wechsel der Entwicklungstools wird erleichtert.

Die ARMCortex-Familie ist durch die Vereinfachung des Kerns und die bessere Anbindung des Interruptcontrollers sehr viel einfacher zu behandeln als das bei den "Classic"-Typen der Fall war. Die Lernkurve ist gerade am Anfang nicht so steil wie früher, als man als Erstes die passenden Startup-Files in Assembler programmieren oder sich zusammen suchen müsste. Trotzdem sind die Cortex-Controller durch die  komplexen Peripherie-Einheiten nicht wirklich gut für den Einstieger geeignet. Wenn allerdings bereits ein paar Erfahrungen mit der Programmierung von Controllern vorhanden sind, gibt es keinen Grund nicht einen Cortex-Controller einzusetzen. Für viele Cortex-Controller gibt es im Augenblick sehr günstige Controllerboards, die eine gute Basis für den Einstieg bieten. Mehr dazu auf der folgenden Seite...