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
- Cortex-M3 Pipeline
- Prozessormodi & Privilegien
- Cortex-M3 Registersatz
- ARM7TDMI Registersatz & CPSR
- 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, keinCPS - kein Zugriff auf System-Timer, NVIC, System Control Block
- evtl. eingeschränkter Speicher-/Peripheriezugriff
- eingeschränkter Zugriff auf
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) undMSR <spec>,<reg>(schreiben) - sie haben keine Speicheradresse.
- Zugriff nur über
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
| Feld | Bedeutung |
|---|---|
| N Z C V | Condition-Code-Flags: Negatives ALU-Ergebnis, Ergebnis Zero, Carry, oVerflow |
| T-Bit | T=0 → ARM-State (32-Bit-Befehle); T=1 → Thumb-State (16-Bit) |
| Q-Bit | Cumulative Saturation (DSP-Kontext) |
| I, F | Interrupt-Disable-Bits: I=1 sperrt IRQ, F=1 sperrt FIQ |
| Mode-Bits | spezifizieren 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
| Merkmal | ARM7TDMI (AT91) | Cortex-M3 (SAM3X) |
|---|---|---|
| Architektur | ARMv4 | ARMv7-M |
| Befehlssatz | ARM 32-Bit + Thumb-1 16-Bit (Umschalten per BX, T-Bit) | Thumb-2 (16/32-Bit gemischt, kein Umschalten) |
| Modi | 7 Modi, viele gebankte Register | Thread / Handler |
| Statusregister | CPSR/SPSR | xPSR + PRIMASK/FAULTMASK/BASEPRI/CONTROL |
| Interrupt-Controller | AIC (extern) | NVIC (im Kern, nested) |
| Kontextsicherung bei IRQ | teils per Software (LR, SPSR retten) | automatisch (Hardware-Stacking R0–R3,R12,LR,PC,PSR) |
| Software Interrupt | SWI #n | SVC #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.