ARM-Architektur - Cortex-M3 & ARM7TDMI (Referenz)

Startseite · Kap. 1 Einleitung · ARM-Architektur · → Kap. 2 Power Management Verwandt: Kap. 6 Interrupts · Kap. 9 Software Interrupt · Kap. 11 Thumb Quellen: [Q: ARM] ES-01-EI ARM Architecture.pdf · [Q: ZF §1a] Cours_Resume


Inhalt

  1. Cortex-M3 Pipeline
  2. Prozessormodi & Privilegien
  3. Cortex-M3 Registersatz
  4. ARM7TDMI Registersatz & CPSR
  5. Vergleich M3 ↔ ARM7TDMI

1. Cortex-M3 - 3-stufige Pipeline

Die Pipeline hat drei Stufen: F Fetch (holen) → D Decode (dekodieren) → E Execute (ausführen).

Ein Flush (Leeren) der Pipeline passiert bei:

  • Branch (Sprung)
  • Exception (Ausnahme/Interrupt)
  • Breakpoint

Branch-Beispiel: Nach einem genommenen Sprung sind die bereits geholten Folgebefehle ungültig und werden verworfen; ab der Sprungzieladresse beginnt die Pipeline neu (F-D-E). Deshalb „kosten" Sprünge/Interrupts zusätzliche Takte.

2. Prozessormodi & Privilegien (Cortex-M3)

Modi

  • Thread Mode: führt Anwendungssoftware aus; nach Reset startet der Prozessor hier.
  • Handler Mode: behandelt Exceptions; nach Abschluss zurück in Thread Mode. Immer privilegiert.

Privilegien-Levels

  • Privileged: voller Zugriff auf alle Instruktionen und Ressourcen.
  • Unprivileged:
    • eingeschränkter Zugriff auf MSR/MRS, kein CPS
    • kein Zugriff auf System-Timer, NVIC, System Control Block
    • evtl. eingeschränkter Speicher-/Peripheriezugriff

Steuerung: Im Thread Mode bestimmt das CONTROL-Register privileged/unprivileged. Nur privilegierte Software darf CONTROL schreiben. Unprivilegierte Software nutzt die SVC-Instruktion (Supervisor Call), um in privilegierten Code zu wechseln → das ist der Software Interrupt (Kap. 9).

stateDiagram-v2
    [*] --> ThreadPriv: Reset
    state "Thread Mode<br>(privileged, MSP)" as ThreadPriv
    state "Thread Mode<br>(unprivileged, PSP)" as ThreadUnpriv
    state "Handler Mode<br>(immer privileged, MSP)" as Handler
    ThreadPriv --> ThreadUnpriv: CONTROL-Register
    ThreadPriv --> Handler: SVC / IRQ / Fault
    ThreadUnpriv --> Handler: SVC / IRQ / Fault
    Handler --> ThreadUnpriv: Exception Return

3. Cortex-M3 Registersatz

32-Bit-Register:

  • R0–R12: Allzweckregister für Datenoperationen.
    • R0–R7 „Low Registers": von allen 16-Bit-Thumb- und 32-Bit-Thumb-2-Befehlen erreichbar.
    • R8–R12 „High Registers": nur von Thumb-2-Befehlen (nicht allen 16-Bit-Thumb) erreichbar.
  • R13 (SP) - Stack Pointer: gebanked (zwei physische Register, nur eines sichtbar):
    • MSP (Main Stack Pointer): Standard, für OS-Kernel & Exception-Handler.
    • PSP (Process Stack Pointer): für Anwendungscode (RTOS-Tasks).
    • Die untersten 2 Bits sind immer 0 (word-aligned).
  • R14 (LR) - Link Register: speichert die Rücksprungadresse.
  • R15 (PC) - Program Counter: aktuelle Programmadresse; beschreibbar zur Ablaufsteuerung.
  • xPSR - Special Registers: Program Status Registers (PSRs), Interrupt-Mask-Register (PRIMASK, FAULTMASK, BASEPRI), CONTROL.
    • Zugriff nur über MRS <reg>,<spec> (lesen) und MSR <spec>,<reg> (schreiben) - sie haben keine Speicheradresse.

4. ARMv4/ARM7TDMI Registersatz & CPSR

Der AT91 nutzt ARM7TDMI (ARMv4). Mehrere Modi (User, FIQ, SVC, Abort, IRQ, Undefined, System), relevant fürs Exception Handling. Viele Register sind modusspezifisch gebanked.

CPSR - Current Program Status Register

FeldBedeutung
N Z C VCondition-Code-Flags: Negatives ALU-Ergebnis, Ergebnis Zero, Carry, oVerflow
T-BitT=0 → ARM-State (32-Bit-Befehle); T=1Thumb-State (16-Bit)
Q-BitCumulative Saturation (DSP-Kontext)
I, FInterrupt-Disable-Bits: I=1 sperrt IRQ, F=1 sperrt FIQ
Mode-Bitsspezifizieren den Prozessor-Modus
  • SPSR (Saved Program Status Register): modusspezifisch; speichert das CPSR beim Eintritt in eine Exception.
  • Zugriff auf CPSR/SPSR nur mit MSR/MRS.
  • IRQ vs. FIQ: IRQ = normaler Interrupt; FIQ = Fast Interrupt mit eigenen gebankten Registern (R8–R14) → weniger Kontext zu sichern, schneller. (→ Kap. 6)

5. Vergleich Cortex-M3 ↔ ARM7TDMI

MerkmalARM7TDMI (AT91)Cortex-M3 (SAM3X)
ArchitekturARMv4ARMv7-M
BefehlssatzARM 32-Bit + Thumb-1 16-Bit (Umschalten per BX, T-Bit)Thumb-2 (16/32-Bit gemischt, kein Umschalten)
Modi7 Modi, viele gebankte RegisterThread / Handler
StatusregisterCPSR/SPSRxPSR + PRIMASK/FAULTMASK/BASEPRI/CONTROL
Interrupt-ControllerAIC (extern)NVIC (im Kern, nested)
Kontextsicherung bei IRQteils per Software (LR, SPSR retten)automatisch (Hardware-Stacking R0–R3,R12,LR,PC,PSR)
Software InterruptSWI #nSVC #n

Thumb (Details → Kap. 11): 16-Bit-Befehlssatz, ~65 % Codegröße, energieeffizienter bei externem 16-Bit-Speicher, aber eingeschränkt (meist nur R0–R7, keine bedingte Ausführung außer Branches). Thumb-2 mischt 16/32-Bit → Dichte von Thumb + Leistung von ARM.


Prüfungsrelevanz

  • Register-Rollen kennen: PC=R15, LR=R14, SP=R13 (MSP/PSP), xPSR.
  • CPSR-Flags NZCV, T-Bit (ARM/Thumb), I/F (IRQ/FIQ-Sperre).
  • Thread/Handler-Modus & privileged/unprivileged; SVC als Übergang.
  • M3 sichert Kontext automatisch, ARM7 nicht → wirkt in Kap. 6 & Kap. 9.

Kap. 1 Einleitung · → Kap. 2 Power Management