Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Architekturen der ARM Prozessoren

Ähnliche Präsentationen


Präsentation zum Thema: "Architekturen der ARM Prozessoren"—  Präsentation transkript:

1 Architekturen der ARM Prozessoren

2 Übung 1 Embedded ARM7TDMI v4 3 nein Thumb ARM 15@16.8 Cortex-M1 v7
Typ Processor Ver Pipe-line Cache MMU DSP Java Befehls-satz Embedded ARM7TDMI v4 3 nein Thumb ARM Cortex-M1 v7 Thumb-2 Cortex-M3 MPU Cortex-R4 8 ja Thumb-2 ARM Application ARM926E-S v5 5 ARM1136J-S v6 Cortex-A8 13 Was sind die Zusammenhänge zwischen der maximalen Taktfrequenz und der Anzahl der Pipelinestufen Erklären Sie den Zusammenhang

3 ARM Core Architektur 32-bit Daten Bus
32- bit Adressbus (4 GByte Adressraum) 32-bit Register 32-bit Barrel Shifter und Arithmetic Logic Unit (ALU) 32-bit Memory Transfer RISC Instruction Set Harvard Architecture (Separate Befehls- und Datenbus) 32-bit und 16-bit Instruction Sets Datenzugriffe haben keinen Einfluss auf Befehlspipeline

4 Cortex-M3 Blockdiagram

5 Interrupt Mask Registers
Cortex-M3 Register xPSR Program & Status Register R0 PRIMASK R1 Interrupt Mask Registers FAULTMASK R2 BASEPRI R3 General Purpose Low Registers CONTROL Control Register R4 R5 R6 R7 R8 R9 R10 General Purpose High Registers Manche 16-bit Thumb Anweisungen können nur auf die Low Regster zugreifen Nur ein register aufs mal sichtbar R11 R12 R13 (MSP) R13 (PSP) Stack pointer (MSP = Main Stack Pointer PSP = Process Stack Pointer) R14 (LR) Link register MSP = default PSP = Alternativ Control(1) bit R15 (PC) Program Counter

6 ARM7 Register & Betriebszustände
System & User R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 (PC) CPSR FIQ R7_fiq R8_fiq R9_fiq R10_fiq R11_fiq R12_fiq R13_fiq R14_fiq SPSR_fiq Supervisor R13_svc R14_svc SPSR_svc Abort R13_abt R14_abt SPSR_abt IRQ R13_irq R14_irq SPSR_irq Undefined R13_und R14_und SPSR_und

7 ARM7 Current Processor Status Register (CPSR)
Condition Code Flags: N = Negative Z = Zero C = Carry Over V = Overflow (Ergebnis grösser als Platz im Register) F = 1 FIQ disable I = 1 IRQ disable T = 1 Thumb mode Betriebszustand: FIQ IRQ Supervisor User Undefined (Mode)

8 Cortex-M3 Current Processor Status Register (CPSR)
Application Interrupt Execution Zeigt welche Exception der Prozessor gerade behandelt Condition Code Flags: N = Negative (MSB der 2er-Komplement Zahl gesetzt) Z = Zero (Ergebnis ist 0) C = Carry Over (Carry Bit gesetzt) V = Overflow (Ergebnis zu gross für Register) Q = Sticky Saturation Flag ICI/IT = Interrupt Continuable Instruction (ICI), IF-THEN instruction status T = Thumb state, immer 1, löschen verursacht Fault Exception

9 ARM7 Betriebszustände Mode User Normale Programmausführung
Eingeschränkter Zugriff FIQ Fast Interrupt Ausführung Exception Mode IRQ Allgemeine Interrupt Ausführung Supervisor Beschützter Mode für Betriebssystem (Eintritt über SWI) Abort Unerlaubter Adressbereich adressiert (Speicherschutz) oder unaligned Data Undefined Unbekannte Anweisung ausgeführt (Coprozessor Anweisung) System Privilegierte Betriebsystem Anweisungen Uneingeschränkter Zugriff

10 Cortex-M3 Betriebszustände
Privileged User When running an Exception Handle Mode When Running Main Program Thread Mode Operation Modes Privilege Levels User Thread System Control space nicht zugreifbar (Speicherregion), MSR Move status Register blockiert verursacht fault exception Wechseln der Betriebszustände: MSR CONTROL, R0

11 Exceptions

12 ARM7 Exception Priorities
Priority Exception Highest 1 Reset 2 Data Abort 3 FIQ 4 IRQ 5 Prefetch Abort Undefined Instruction SWI Lowest 6

13 Cortex-M3 Exception Priorities
Exc. No. Exception Typ Priorität Funktion 1 Reset -3 (Höchste) 2 NMI -2 Nonmaskable Interrupt 3 Hard Fault -1 All Faults wenn Fault Handler disabled oder maskiert 4 MemManage Einstellbar Memory Management, ungültiger Speicher Zugriff 5 Bus Fault Instruction Prefetch oder Datenzugriffsfehler 6 Usage Fault Versuch auf ARM Befehlssatz umschalten oder ungültiger Befehl 7-10 - 11 SVC System Service call via SVC Befehl 12 Debug Debug Monitor 13 14 PendSV System Service steht an 15 Systick System Tick Timer 16-255 IRQ Interrupt Eingang 0-239

14 ARM7 Exception Vectors Exception Mode Address Reset Supervisor
Undefined instruction Undefined 0x Software interrupt (SWI) Supervisor 0x Prefetch Abort (instruction fetch memory abort) Abort 0x C Data Abort (data access memory abort) Abort 0x IRQ (interrupt) IRQ 0x FIQ (fast interrupt) FIQ 0x C

15 Memory Map des NXP LPC2138 Stack Pointer Main Code Exception Vectors
4.0 GB 0xFFFF FFFF AHB Peripherals 3.75 GB 0xF VPB Peripherals 3.5 GB 0xE 3.0 GB 0xC Reserved for External Memory 2.0 GB 0x Boot Block Stack Pointer Reserved for On-Chip Memory On-Chip Static RAM 1.0 GB 0x Reserved for Special Registers Main Code 0x3FFF 8000 Reserved for On-Chip Memory Exception Vectors On-Chip Non-Volatile Memory 0.0 GB 0x

16 Exception Vector Table
32-bit 0xFFFF FFFF LDR PC, FIQ_Addr LDR PC, IRQ_Addr LDR PC, Dabort_addr LDR PC, Pabort_addr LDR PC, SWI_Addr LDR PC, Undef_Addr LDR PC, Reset_Addr 0x c 0x 0x 64 Byte Exception Vector Table 0x 0x c 0x 0x 0x

17 Cortex-M3 Exception Vectors
Exception Type Address Offset Exception Vector 18-255 0x48-0x3FF IRQ #2-239 17 0x44 IRQ #1 16 0x40 IRQ #0 15 0x3C SYSTICK 14 0x38 PendSV 13 0x34 Reserved 12 0x30 Debug Monitor 11 0x2C SVC 7-10 0x1C-0x28 6 0x18 Usage fault 5 0x14 Bus fault 4 0x10 MemManage fault 3 0x0C Hard fault 2 0x08 NMI 1 0x04 Reset 0x00 Starting Value for MSP

18 Einrichten von Exception Vectors mit startup.s
Startup.s ist Assembler Code, der vor Begin des Main Codes ausgeführt wird Richtet Exception Vektor Tabelle ein Springt am Ende in die Main Routine des C-Codes Default Start Up Codes für diverse Microcontroller unter: c:\keil\ARM\startup

19 Startup.s

20 Startup.s Externe C exception Routinen werden deklariert
EXTERN CODE32 (Undef_Handler?A) EXTERN CODE32 (SWI_Handler?A) EXTERN CODE32 (PAbt_Handler?A) EXTERN CODE32 (DAbt_Handler?A) EXTERN CODE32 (IRQ_Handler?A) EXTERN CODE32 (FIQ_Handler?A) Vectors: LDR PC,Reset_Addr LDR PC,Undef_Addr LDR PC,SWI_Addr LDR PC,PAbt_Addr LDR PC,DAbt_Addr NOP /* Reserved Vector */ LDR PC,[PC, # -0x0FF0] LDR PC,FIQ_Addr Reset_Addr: DD Reset_Handler Undef_Addr: DD Undef_Handler?A SWI_Addr: DD SWI_Handler?A PAbt_Addr: DD PAbt_Handler?A DAbt_Addr: DD DAbt_Handler?A DD /* Reserved Address */ IRQ_Addr: DD IRQ_Handler?A FIQ_Addr: DD FIQ_Handler?A Externe C exception Routinen werden deklariert Exception Vektor Tabelle startet bei PC 0x0, 64 bytes Konstanten Tabelle für ISR Adresse

21 Übung 2 Von welcher Adresse wird die erste Zeile des vom Anwender geschriebenen Assemblercodes eingelesen (kein Betriebssystem vorausgesetzt) ? An welcher Adresse befindet sich die erste Assembleranweisung der Fast Interrupt Routine ? An welcher Adresse befindet sich die erste Assembleranweisung des Undefined Instruktion Handlers ?

22 Übung 2 - Lösung Von welcher Adresse wird die erste Zeile des vom Anwender geschriebenen Assemblercodes eingelesen (kein Betriebssystem vorausgesetzt) ? 0x An welcher Adresse befindet sich die erste Assembleranweisung der Fast Interrupt Routine ? 0x An welcher Adresse befindet sich die erste Assembleranweisung des Undefined Instruktion Handlers ? 0x

23 Einrichten von Interrupts im ARM7

24 ARM 7: Core hat genau nur 2 Interrupt Leitungen
FIQ ARM7 TDMI IRQ Unterschiede zwischen FIQ und IRQ: Fast Interrupt (FIQ) hat höhere Priorität als IRQ FIQ Modus hat eigene Register R8_fiq-R14_fiq IRQ Modus hat eigene Register R13_irq-R14_irq Bei Ausführen von FIQ wird IRQ abgeschaltet IRQ Routinen können von FIQ Routinen unterbrochen werden

25 ARM7: Aufsetzen von Interrupt Routinen
Initialisieren der Interrupts im Hauptprogramm (main.c) Erstellen der Interrupt Service Routine Eintragen der Interrupt Routinen im Startup.s Beispiel am ARM7 ähnlich am Cortex-M3

26 ARM7: Interrupt Initialisierung in main.c
void main (void) { IODIR1 = 0x00FF0000; // Set the LED pins as outputs PINSEL0 = 0x ; // Select the EINT1 function in the pin connect block VICIntSelect = 0x ; // Enable a Vic Channel as FIQ VICIntEnable = 0x ; // Enable the EINT1 interrupt in the VIC IOCLR1 = 0x00FF0000; // Clear the LED's while(1); //Loop here forever }

27 ARM7: Aufsetzen von Interrupt Routinen
Initialisieren der Interrupts im Hauptprogramm (main.c) Erstellen der Interrupt Service Routine Eintragen der Interrupt Routinen im Startup.s Beispiel am ARM7 ähnlich am Cortex-M3

28 ARM7: FIQ Interrupt Service Routine
Definiert die Funktion als Fast Interrupt Sorgt dafür, dass der richtige Return Mechanismus verwendet wird Erklärt eine C Funktion als Interrupt Routine Verbindet Interrupt Vektor zur Funktion Andere Funktionen __IRQ, __SWI, __ABORT Frei wählbarer Name Erklärt Compiler, dass es sich um FIQ handelt void fiqint (void) __fiq { IOSET1 = 0x00FF0000; // Set the LED pins EXTINT = 0x ; // Clear the peripheral interrupt flag }

29 ARM7: Aufsetzen von Interrupt Routinen
Initialisieren des Interrupt Controllers im Hauptprogramm (main.c) Erstellen der Interrupt Service Routine Eintragen der Interrupt Routinen im Startup.s Beispiel am ARM7 ähnlich am Cortex-M3

30 ARM 7: Eintragen der FIQ Routinen Startadresse im Startup Code
EXTERN CODE32 (fiqint?A) __startup PROC CODE32 Vectors: LDR PC,Reset_Addr LDR PC,Undef_Addr LDR PC,SWI_Addr LDR PC,PAbt_Addr LDR PC,DAbt_Addr NOP /* Reserved Vector */ LDR PC,[PC, #-0x0FF0] LDR PC,FIQ_Addr Reset_Addr: DD Reset_Handler Undef_Addr: DD Undef_Handler?A SWI_Addr: DD SWI_Handler?A PAbt_Addr: DD PAbt_Handler?A DAbt_Addr: DD DAbt_Handler?A DD /* Reserved Address */ IRQ_Addr: DD IRQ_Handler?A FIQ_Addr: DD fiqint?A Erklärung des Namens der externen FIQ Routine Adresseintrag der FIQ Routine in der Vektortabelle Adresse der FIQ Routine

31 Benennung der Exception Routinen
Exception source Constants table C function header Undefined Instruction Undef_Handler?A void Undef_Handler (void)__abort Prefetch Abort PAbt_Handler?A void Pabt_Handler (void) __abort Data Abort DAbt_Handler?A void Dabt_Handler (void) __abort Fast Interrupt fiqint?A void fiqint (void)__fiq Frei wählbarer Name der Interrupt Routine, Müssen mit Header übereinstimmen Benutze den gleichen Namen für die C Interrupt Routine

32 Software Interrupt (SWI) - Switch to Supervisor Mode -
SWI[cond] #3 // Bei Ausführung wird Exception Vector 0x in PC geladen switch( *(R14-4) & 0x00FFFFFF) // roll back the address stored in link reg // by 4 bytes { // Mask off the top 8 bits and switch // on result case ( SWI-1) ……

33 Vectored Interrupt Controller (VIC)

34 ARM 7 Core hat genau nur 2 Interrupt Leitungen
FIQ ARM7 TDMI IRQ Unterschiede zwischen FIQ und IRQ: Fast Interrupt (FIQ) hat höhere Priorität als IRQ FIQ Modus hat eigene Register R8_fiq-R14_fiq IRQ Modus hat eigene Register R13_irq-R14_irq Bei Ausführen von FIQ wird IRQ abgeschaltet IRQ Routinen können von FIQ Routinen unterbrochen werden

35 ARM7 Register & Betriebszustände
System & User R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 (PC) CPSR FIQ R7_fiq R8_fiq R9_fiq R10_fiq R11_fiq R12_fiq R13_fiq R14_fiq SPSR_fiq Supervisor R13_svc R14_svc SPSR_svc Abort R13_abt R14_abt SPSR_abt IRQ R13_irq R14_irq SPSR_irq Undefined R13_und R14_und SPSR_und

36 ARM7 VIC erweitert diese Interrupt Leitungen
FIQ FIQ VIC ARM7 TDMI 16 Vectored IRQ 16 IRQ Non Vectored IRQ

37 Unterschiedliche Interrupt Service Routinen
PC Int2 Interrupt Vektoren 0x402040 Int1 0x402010 0x401000 Main 0x000000

38 ARM7 Exception Vector Tabelle
0xFFFF FFFF LDR PC, FIQ_Addr LDR PC, [PC, # - 0x0FF0] LDR PC, Reset_Addr 0xFFFF F030 Vector Address Register Exception Vector PC unmittelbar nach FIQ 0x c PC unmittelbar nach IRQ 0x 64 Byte Exception Vector Table Program Counter unmittelbar nach Reset 0x

39 Vectored Interrupt Controller im LPC2138
16 Interrupt Slots 18 Chip interne und 4 externe Interrupt Quellen Highest Priority Interrupt Slot Vector Address Registers EINT3 ARM7 VICVectAddr 0 EINT2 VICVectAddr 1 VICVectAddr 2 IRQ VICvectCntl 0..15 EINT0 >1 VICIntEnable …. SPI0 Lowest Priority Interrupt Slot VICVectAddr 15 I2C0 FIQ >1 Default Vector Address Register Vector Address Register VICIntSelect Adresse 0xFFFF030

40 External Interrupts

41 Edge Triggered vs. Level Triggered Interrupt
Edge Triggered Interrupt Latch ARM-Core Peripherie Baustein Int Edge Detector Int S R Mikrocontroller Clear_Int Level Triggered Interrupt ARM-Core Int Peripherie Baustein Int Clear_Int Register

42 External Interrupt Register
PINSEL0 Bits 3..2 Interrupt Latch IC-Pin P0.1 EXTMODE EINT0 =1 Edge Detector S EINT EXOR R EXTPOLAR GPIO Port 0.1 0 RxD (UART0) PWM3 EXTINT

43 External Interrupt Register
Jedes Register enthält je ein bit für EINT0-EINT3

44 VicIntEnable Register
Aktiviert Interrupt Eingänge

45 VicIntSelect Register
Bestimmt welche der bis zu 22 Quellen (Architektur erlaubt bis zu 32 Quellen) dem FIQ oder dem IRQ Ausgang zugeordnet sind 1 = FIQ, 0 = IRQ

46 VIC Vector Control Register
16 Vector Control Register, ein Register per Interrupt Slot Register 0 hat höhere Priorität als Register 15 Interrupts die enabled aber nicht mit diesem Register auf einen Kanal zugewiesen werden sind autmatisch „Non-Vectored“ Interrupts. Bei Eintritt wird die „Default-vector“ Adresse ins Vektor Adress Register übertragen

47 Nummerierung der Interrupt Quellen

48 Eintritt in die Vectored Interrupt Routine

49 ARM7 Exception Vector Tabelle
0xFFFF FFFF LDR PC, FIQ_Addr LDR PC, [PC, # - 0x0FF0] LDR PC, Reset_Addr 0xFFFF F030 Vector Address Register Exception Vector PC unmittelbar nach FIQ 0x c PC unmittelbar nach IRQ 0x 64 Byte Exception Vector Table Program Counter unmittelbar nach Reset 0x

50 Auslesen des Vector Address Register
Oberes Adressende des Microcontrollers 0xFFFF FFFF LDR PC,[PC,# -0x0FF0] Vector Address Register 0xFFFF F030 IRQ Interrupt Vector 0x Unteres Adressende des Microcontrollers 0x 0x x 4 Byte – 0xFF0 = 0xFFFF F030

51 Berechnen der Interrupt Einsprungadresse bei NXP
Darstellung der Instruktion: LDR PC, [PC, # - 0x0FF0] Interrupt Ereigniss Instruction Pipeline Fetch Instr. XY LDR PC, [PC, # - 0x0FF0] Decode LDR PC, [PC, # - 0x0FF0] Execute LDR PC, [PC, # - 0x0FF0] Adresse xy 0x018 0x01c 0x020 Programm Counter LPC Adress Raum 0x0FF0 0xFFFF F034 - PC Vector Address Register PC 0xFFFF F030 (0x020) 0xFFFF F02C

52 Übung 3 An welcher Adresse befindet sich das Vektor Adress Register des Interrupt Controllers (es handelt sich hier nicht um einen NXP LPC) ?

53 Übung 3 - Lösung 0x18 + 2 x 4 Byte – 0x1000 = 0xFFFF F020
An welcher Adresse befindet sich das Vektor Adress Register des Interrupt Controllers (es handelt sich hier nicht um einen NXP LPC) ? 0x x 4 Byte – 0x1000 = 0xFFFF F020

54 Initialisieren des Interrupt Controllers

55 ARM7 Exception Tabelle im Startup Code
Vectors: LDR PC,Reset_Addr LDR PC,Undef_Addr LDR PC,SWI_Addr LDR PC,PAbt_Addr LDR PC,DAbt_Addr NOP LDR PC,[PC, #-0x0FF0] /* Vector from VicVectAddr */ LDR PC,FIQ_Addr \end{lstlisting}

56 Interrupt Controller Initialisierungsreihenfolge
Setzen des IODIR1 als Eingang PINSEL auf externen Interrupt setzen Mit VicIntSel IRQ wählen Interrupt Quelle einem Interrupt Priority Slot (0-15) zuordnen Vektor-Adresse der Interrupt Routine in das Vector-Register laden Bei Edge Triggered Interrupts das Latch zurücksetzten Erst zuletzt Interrupteingang im VicIntEnable Register scharf machen

57 Initialisieren des Interrupt Controllers für externen Interrupt
void main (void) { void EXTINTVectoredIRQ (void) __irq; //Linker legt den Interrupt Adressvektor fest IODIR1 = 0x000FF000; //LED pins als Ausgänge einstellen PINSEL0 = 0x ; //EXTINT1 als Eingang wählen VICVectCntl0 = 0x F; //Interrupt Slot für den //entsprechenden Vector wählen VICVectAddr0 = (unsigned)EXTINTVectoredIRQ; // Vector in Addressregister laden VICIntEnable = 0x ; //Interrupt aktivieren while(1); //In Schleife laufen bis Interrupt eintritt }

58 Interrupt Routine void EXTINTVectoredIRQ (void) __irq {
IOSET1 = 0x000FF000; // z.B. LED pins einschalten EXTINT = 0x ; // Löschen des EXTINT Flags VICVectAddr = 0x ; // Dummy write um Ende zu melden }

59 Weitere Register im VIC


Herunterladen ppt "Architekturen der ARM Prozessoren"

Ähnliche Präsentationen


Google-Anzeigen