|
|
Cortex-M3Ich fange mal mit der Seite zum ARM Cortex-M3 an.
[Bearbeiten] Unterschiede zu anderen ARM-Architekturen:[Bearbeiten] Statusregister
Zugriff auf APSR und IPSR erhält der Programmierer durch den MRS/MSR-Befehl, abhängig von den aktuellen Privilegien. EPSR-Zugriffe über MRS/MSR sind möglich, werden im Falle von ICI/IT ignoriert und bei ungesetztem T-Bit folgt eine UsageFault-Exception. [Bearbeiten] Interrupte und AusnahmenFIQs werden nicht mehr unterstützt. Der Cortex-M3 beinhaltet eine Interruptverwaltung (Nested Vectored Interrupt Controler) ab Werk und räumt mit den unterschiedlichen Implementierungen unterschiedlicher Hersteller auf. Die Interruptverwaltung ermöglicht eine priorisierte Verarbeitung von Interrupten. Der Interruptcontroller stellt auch den Systemtick zur Verfügung. [Bearbeiten] Primäres InterruptbitDie Primäres Interruptbit (PRIMASK) ist ein 1-Bit Register. Wenn es gesetzt ist werden nur NMI- und Hard-Fault-Ausnahmen einen Interrupt auslösen. [Bearbeiten] Fehler-InterruptbitDie Fehler-Interruptbit (FAULTMASK) ist ebenfalls ein 1-Bit-Register. Wenn es gesetzt ist werden nur NMI-Ausnahmen einen Interrupt auslösen. [Bearbeiten] BasisprioritätDie Basispriorität (BASEPRI) ist bis zu 8 Bit breit und abhängig von den im Interrupt-Teil unterstützen Prioritäten. Alle Interrupt mit einer Priorität gleich oder kleiner der in BASEPRI eingestellten Priorität werden unterdrückt. Zugriff auf PRIMASK,FAULTMASK und BASEPRI erhält der Programmierer durch den MRS und MSR-Befehl, abhängig von den aktuellen Privilegien. [Bearbeiten] VektortabelleDie Vektortabelle beinhaltet echte Sprungadressen. Die erste Adresse in der Sprungtabelle ist der Stackpointer, der bei einem Reset geladen wird. Die zweite Adresse ist die Resetadresse. [Bearbeiten] Control-Register
Nach einem Reset ist der Cortex-M3 im Privilegierten Modus [Bearbeiten] StackEs gibt keine Schattenregister für bestimmte Betriebsmodi mehr. Der Prozessor führt bei einem Interrupt ein automatisches Sichern des PC (R15), LR (R14), R12 und R0-R3 durch, welche nach dem Zurückspringen automatisch wieder vom Stack geholt werden. Der Prozessor hat zwei Stackregister (MSP und PSP), welche in Abhängigkeit von den Control-Registern je nach Betriebsmodus (Privilegierter Modus oder UserMode) im Registerraum eingeblendet werden. [Bearbeiten] BefehlssatzDas Umschalten zwischen ARM-Codes und Thumb-Codes ist nicht möglich, es wird nur Thumb2 ausgeführt. Es existieren Befehle für Division und kombinierte Addition und Multiplikation, Befehle mit Sättigung, Befehle für Bitreihenfolgenmanipulation, bedingte Ausführung. IT-Opcode Als Ausgleich zu den fehlenden Bedingungsflags des ARM-Codes existiert der Opcode IT (If-True). [Bearbeiten] SpeicherbereichDer Adressbereich ist wie bei einem 32-Bit System üblich 4 GiB groß. Aufgeteilt ist es in mehrere fest definierte Teile:
Mit Bit-Band-Aliasing ist bitgenaue Speichermanipulation in bestimmten Speicherbereichen innerhalb eines Befehles möglich. [Bearbeiten] Genauere Erläuterungen:[Bearbeiten] Befehle[Bearbeiten] IT-Opcode für Bedingte AusführungDiesem Opcode wird eine Bedingung (EQ, GT etc.) übergeben die für den ersten Befehl der folgt erfüllt sein muß. Wenn die Bedingung nicht erfüllt ist, wird der Befehl übersprungen. Ein IT-Block kann bis zu 4 Befehle beinhalten, wobei der erste Befehl der Kette immer wahr sein muß. Die folgenden Befehle werden entsprechend der Angabe ihrer Bedingung, welche die Bedingung im IT-Befehl oder die gegenteilige Bedingung ist, ausgeführt oder übersprungen. CMP R0,R1 ;Vergleich mit Aktualisierung der Statusbits ITETE LT ;TRUE-ELSE-TRUE-ELSE LT MOV[LT] R2,R0 ;TRUE Bedingung R0 LT R1 MOV[GE] R2,R1 ;ELSE Bedingung !(R0 LT R1) MOV[LT] R3,R0 ;TRUE Bedingung R0 LT R1 MOV[GE] R3,R1 ;ELSE Bedingung !(R0 LT R1 Die in eckigen Klammern angegebenen Bedingungen sind der Lesbarkeit halber angegeben. Ein bedingter Sprung kann im IT-Block angegeben werden mit der Besonderheit, daß er am Ende des Blocks stehen muß. [Bearbeiten] DivisionEs existieren zwei 32-Bit-Divisionsbefehle. Beide Befehle speichern keinen Rest und sind auf 32-Bit als Divident begrenzt.
SDIV/UDIV R0,R1,R2 führt zum Ergebnis in R0 aus der Division von R1 durch R2 [Bearbeiten] BitreihenfolgenmanipulationFür Bitmanipulation stehen mehrere Befehle zur Verfügung:
[Bearbeiten] MAC-OpcodesKombinierte Multiplikations und Additionsbefehle sind:
[Bearbeiten] SättigungZwei Befehle sind im Zusammenhang mit dem Q-Flag des APSR nutzbar: Übersteigt der Wert die Bitgrenze n wird der Maximalwert geliefert, Unterschreitet der Wert den Minimalwert wird der Minimalwert geliefert, andernfalls wird der Wert selbst geliefert. Bei Überschreiten einer einer Grenze wird das Q-Flag gesetzt.
Ein optionales Arithmetisches oder Logisches Verschieben nach Rechts vor dem Abarbeiten ist möglich. [Bearbeiten] Speicherzugriff[Bearbeiten] Bit-Band-AliasingDer SRAM und der Gerätespeicher sind im für die ersten 32 MB als Bit-band-Alias definiert. Unter Bit-Band-Alias versteht man einen Speicherbereich, der einen bitgenauen Zugriff auf einen Speicherbereich innerhalb eines Befehles zuläßt. So ist es möglich ohne Deaktivierung von Unterbrechungsanforderungen und in einem Befehl ein Bit zu lesen oder ein Bit zu setzen. z.B. Der SRAM-Bereich von 0x20000000-0x200FFFFF kann durch 32-Bit-Zugriffe im Bereich von 0x22000000-0x23FFFFFF bitweise angesprochen werden:
Bit-Band-Adresse = Bit-Band-Basis + (Byte-Offset × 32) + (Bit[0-7] × 4) 0x22000020 = 0x22000000 + 1 × 32 + 0 × 4 Beim Zugriff zählt nur das unterste Bit im schreibenden und lesenden Zugriff. Ein Schreiben auf Adresse 0x22000008 mit einem Wert von 1 setzt das 2. Bit in 0x20000000 innerhalb eines Befehls und wird atomar ausgeführt. Das Lesen von der Adresse 0x22000008 ergibt je nach Zustand des 2. Bits in 0x20000000 eine 1 oder eine 0 als Ergebnis. Siehe ARM_Bitbanding. |