1 / 58

Architekturen der ARM Prozessoren

Architekturen der ARM Prozessoren. Übung 1. Was sind die Zusammenhänge zwischen der maximalen Taktfrequenz und der Anzahl der Pipelinestufen Erklären Sie den Zusammenhang. ARM Core Architektur. 32-bit Daten Bus 32- bit Adressbus (4 GByte Adressraum) 32-bit Register

ruby
Download Presentation

Architekturen der ARM Prozessoren

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Architekturen der ARM Prozessoren

  2. Übung 1 • 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

  4. Cortex-M3 Blockdiagram

  5. Cortex-M3 Register xPSR Program & Status Register R0 PRIMASK R1 Interrupt MaskRegisters FAULTMASK R2 BASEPRI R3 General Purpose Low Registers Control Register CONTROL R4 R5 R6 R7 R8 R9 General Purpose High Registers R10 R11 R12 R13 (PSP) R13 (MSP) 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. System & User FIQ Abort IRQ Undefined Supervisor R0 R0 R0 R0 R0 R0 R1 R1 R1 R1 R1 R1 R2 R2 R2 R2 R2 R2 R3 R3 R3 R3 R3 R3 R4 R4 R4 R4 R4 R4 R5 R5 R5 R5 R5 R5 R6 R6 R6 R6 R6 R6 R7_fiq R7 R7 R7 R7 R7 R8_fiq R8 R8 R8 R8 R8 R9_fiq R9 R9 R9 R9 R9 R10_fiq R10 R10 R10 R10 R10 R11_fiq R11 R11 R11 R11 R11 R12_fiq R12 R12 R12 R12 R12 R13_fiq R13_abt R13_irq R13_und R13 R13_svc R14_fiq R14_abt R14_irq R14_und R14 R14_svc R15 (PC) R15 (PC) R15 (PC) R15 (PC) R15 (PC) R15 (PC) CPSR CPSR CPSR CPSR CPSR CPSR SPSR_fiq SPSR_abt SPSR_irq SPSR_und SPSR_svc ARM7 Register & Betriebszustände

  7. ARM7 Current Processor Status Register (CPSR) Condition Code Flags: N = NegativeZ = Zero C = Carry Over V = Overflow (Ergebnis grösser als Platz im Register) F = 1 FIQ disableI = 1 IRQ disable T = 1 Thumb mode Betriebszustand:FIQIRQ Supervisor UserUndefined (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

  10. Cortex-M3 Betriebszustände OperationModes PrivilegeLevels 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

  14. ARM7 Exception Vectors Exception Mode Address Reset Supervisor 0x00000000 Undefined instruction Undefined 0x00000004 Software interrupt (SWI) Supervisor 0x00000008 Prefetch Abort (instruction fetch memory abort) Abort 0x0000000C Data Abort (data access memory abort) Abort 0x00000010 IRQ (interrupt) IRQ 0x00000018 FIQ (fast interrupt) FIQ 0x0000001C

  15. Memory Map des NXP LPC2138 4.0 GB 0xFFFF FFFF AHB Peripherals 3.75 GB 0xF000 0000 VPB Peripherals 3.5 GB 0xE000 0000 3.0 GB 0xC000 0000 Reserved for External Memory 2.0 GB 0x8000 0000 Boot Block Reserved for On-Chip Memory Stack Pointer On-Chip Static RAM 0x4000 0000 1.0 GB Reserved for Special Registers Main Code 0x3FFF 8000 Reserved for On-Chip Memory ExceptionVectors On-Chip Non-Volatile Memory 0.0 GB 0x0000 0000

  16. Exception Vector Table 32-bit 0xFFFF FFFF 0x0000001c 0x00000018 0x00000014 64 Byte ExceptionVectorTable 0x00000010 0x0000000c 0x00000008 0x00000004 0x00000000

  17. Cortex-M3 Exception Vectors

  18. Einrichten von Exception Vectorsmit 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 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 0 /* Reserved Address */ IRQ_Addr: DD IRQ_Handler?A FIQ_Addr: DD FIQ_Handler?A Externe C exception Routinenwerden deklariert Exception Vektor Tabellestartet 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) ? 0x00000100 • An welcher Adresse befindet sich die erste Assembleranweisung der Fast Interrupt • Routine ? 0x00007000 • An welcher Adresse befindet sich die erste Assembleranweisung des Undefined • Instruktion Handlers ? 0x00002000

  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 = 0x20000000; // Select the EINT1 function in the pin connect block VICIntSelect = 0x00008000; // Enable a Vic Channel as FIQ VICIntEnable = 0x00008000; // 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 void fiqint (void) __fiq { IOSET1 = 0x00FF0000; // Set the LED pins EXTINT = 0x00000002; // Clear the peripheral interrupt flag } Frei wählbarer Name Erklärt Compiler, dass es sich um FIQhandelt

  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 0 /* Reserved Address */ IRQ_Addr: DD IRQ_Handler?A FIQ_Addr: DD fiqint?A Erklärung des Namens derexternen FIQ Routine Adresseintrag der FIQ Routinein 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 Nameder Interrupt Routine, Müssen mit Headerübereinstimmen Benutze den gleichen Namenfür die C Interrupt Routine

  32. Software Interrupt (SWI)- Switch to Supervisor Mode - SWI[cond] #3 // Bei Ausführung wird Exception Vector 0x00000008 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 VIC erweitert diese Interrupt Leitungen FIQ FIQ VIC ARM7 TDMI 16 Vectored IRQ 16 IRQ Non Vectored IRQ

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

  37. ARM7 Exception Vector Tabelle 0xFFFF FFFF 0xFFFF F030 Vector Address Register ExceptionVector PC unmittelbar nach FIQ 0x0000001c PC unmittelbar nach IRQ 0x00000018 64 Byte ExceptionVectorTable Program Counter unmittelbar nach Reset 0x00000000

  38. >1 >1 Vectored Interrupt Controller im LPC2138 16 Interrupt Slots 18 Chip interne und 4 externeInterrupt Quellen Highest PriorityInterrupt Slot Vector AddressRegisters ARM7 EINT3 VICVectAddr 0 VICVectAddr 1 EINT2 VICVectAddr 2 IRQ VICvectCntl 0..15 EINT0 VICIntEnable …. SPI0 Lowest PriorityInterrupt Slot VICVectAddr 15 I2C0 FIQ Default Vector Address Register Vector Address Register VICIntSelect Adresse0xFFFF030

  39. External Interrupts

  40. Edge Triggered vs. Level Triggered Interrupt Edge Triggered Interrupt ARM-Core Latch PeripherieBaustein Edge Detector Int Int S R Mikrocontroller Clear_Int Level Triggered Interrupt ARM-Core Int PeripherieBaustein Int Clear_Int Register

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

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

  43. VicIntEnable Register Aktiviert Interrupt Eingänge

  44. VicIntSelect Register Bestimmt welche der bis zu 22 Quellen (Architektur erlaubt bis zu 32 Quellen) dem FIQ oder dem IRQ Ausgang zugeordnet sind1 = FIQ, 0 = IRQ

  45. 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

  46. Nummerierung der Interrupt Quellen

  47. Eintritt in die Vectored Interrupt Routine

  48. ARM7 Exception Vector Tabelle 0xFFFF FFFF 0xFFFF F030 Vector Address Register ExceptionVector PC unmittelbar nach FIQ 0x0000001c PC unmittelbar nach IRQ 0x00000018 64 Byte ExceptionVectorTable Program Counter unmittelbar nach Reset 0x00000000

  49. Auslesen des Vector Address Register Oberes Adressendedes Microcontrollers 0xFFFF FFFF LDR PC,[PC,# -0x0FF0] Vector Address Register 0xFFFF F030 Unteres Adressendedes Microcontrollers 0x0000 0018 IRQ Interrupt Vector 0x0000 0000 0x18 + 2 x 4 Byte – 0xFF0 = 0xFFFF F030

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

More Related