Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

School of Engineering Architekturen der ARM Prozessoren.

Ähnliche Präsentationen


Präsentation zum Thema: "School of Engineering Architekturen der ARM Prozessoren."—  Präsentation transkript:

1 School of Engineering Architekturen der ARM Prozessoren

2 School of Engineering Übung 1 TypProcessorVerPipe- line CacheMMUDSPJavaBefehls- satz EmbeddedARM7TDMIv43nein Thumb ARM Cortex-M1v73nein Cortex-M3v73neinMPUnein Cortex-R4v78jaMPUjaneinThumb-2 ARM ApplicationARM926E- S v55ja Thumb ARM ARM1136J- S v68ja Thumb ARM Cortex-A8v713ja Thumb-2 ARM Was sind die Zusammenhänge zwischen der maximalen Taktfrequenz und der Anzahl der Pipelinestufen Erklären Sie den Zusammenhang

3 School of Engineering 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 ARM Core Architektur

4 School of Engineering Cortex-M3 Blockdiagram

5 School of Engineering R15 (PC) R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 (MSP) R14 (LR) Stack pointer (MSP = Main Stack Pointer PSP = Process Stack Pointer) Link register Program Counter R13 (PSP) Cortex-M3 Register General Purpose Low Registers General Purpose High Registers xPSR PRIMASK FAULTMASK BASEPRI CONTROL Interrupt Mask Registers Control Register Program & Status Register MSP = default PSP = Alternativ Control(1) bit

6 School of Engineering ARM7 Register & Betriebszustände

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

8 School of Engineering 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 Cortex-M3 Current Processor Status Register (CPSR) A pplication I nterrupt E xecution

9 School of Engineering ARM7 Betriebszustände Mode UserNormale ProgrammausführungEingeschränkter Zugriff FIQFast Interrupt AusführungException Mode IRQAllgemeine Interrupt AusführungException Mode SupervisorBeschützter Mode für Betriebssystem (Eintritt über SWI) Exception Mode AbortUnerlaubter Adressbereich adressiert (Speicherschutz) oder unaligned Data Exception Mode UndefinedUnbekannte Anweisung ausgeführt (Coprozessor Anweisung) Exception Mode SystemPrivilegierte Betriebsystem AnweisungenUneingeschränkter Zugriff

10 School of Engineering Cortex-M3 Betriebszustände PrivilegedUser When running an ExceptionHandle Mode When Running Main ProgramThread Mode Operation Modes Privilege Levels Wechseln der Betriebszustände: MSR CONTROL, R0

11 School of Engineering Exceptions

12 School of Engineering ARM7 Exception Priorities PriorityException Highest1 Lowest Reset Data Abort FIQ IRQ Prefetch Abort Undefined Instruction SWI

13 School of Engineering Cortex-M3 Exception Priorities Exc. No. Exception Typ PrioritätFunktion 1Reset-3 (Höchste) Reset 2NMI-2Nonmaskable Interrupt 3Hard FaultAll Faults wenn Fault Handler disabled oder maskiert 4MemManageEinstellbarMemory Management, ungültiger Speicher Zugriff 5Bus FaultEinstellbarInstruction Prefetch oder Datenzugriffsfehler 6Usage FaultEinstellbarVersuch auf ARM Befehlssatz umschalten oder ungültiger Befehl SVCEinstellbarSystem Service call via SVC Befehl 12DebugEinstellbarDebug Monitor PendSVEinstellbarSystem Service steht an 15SystickEinstellbarSystem Tick Timer IRQEinstellbarInterrupt Eingang 0-239

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

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

16 School of Engineering 64 Byte Exception Vector Table 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 x x c 0xFFFF FFFF 0x x x c 0x x bit Exception Vector Table

17 School of Engineering Exception TypeAddress OffsetException Vector x48-0x3FFIRQ # x44IRQ #1 160x40IRQ #0 150x3CSYSTICK 140x38PendSV 130x34Reserved 120x30Debug Monitor 110x2CSVC 7-100x1C-0x28Reserved 60x18Usage fault 50x14Bus fault 40x10MemManage fault 30x0CHard fault 20x08NMI 10x04Reset 00x00Starting Value for MSP Cortex-M3 Exception Vectors

18 School of Engineering 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 Einrichten von Exception Vectors mit startup.s

19 School of Engineering Startup.s

20 School of Engineering 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 Exception Vektor Tabelle startet bei PC 0x0, 64 bytes Externe C exception Routinen werden deklariert Konstanten Tabelle für ISR Adresse

21 School of Engineering Ü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 School of Engineering Ü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 School of Engineering Einrichten von Interrupts im ARM7

24 School of Engineering 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 FIQ IRQ ARM7 TDMI ARM 7: Core hat genau nur 2 Interrupt Leitungen

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

26 School of Engineering 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 } ARM7: Interrupt Initialisierung in main.c

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

28 School of Engineering void fiqint (void) __fiq { IOSET1 = 0x00FF0000; // Set the LED pins EXTINT = 0x ; // Clear the peripheral interrupt flag } 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 ARM7: FIQ Interrupt Service Routine Erklärt Compiler, dass es sich um FIQ handelt

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

30 School of Engineering EXTERN CODE32 (fiqint?A) __startupPROC 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 der externen FIQ Routine Adresse der FIQ Routine Adresseintrag der FIQ Routine in der Vektortabelle ARM 7: Eintragen der FIQ Routinen Startadresse im Startup Code

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

32 School of Engineering Software Interrupt (SWI) - Switch to Supervisor Mode - 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) …… SWI[cond] #3 // Bei Ausführung wird Exception Vector 0x in PC geladen

33 School of Engineering Vectored Interrupt Controller (VIC)

34 School of Engineering 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 FIQ IRQ ARM7 TDMI ARM 7 Core hat genau nur 2 Interrupt Leitungen

35 School of Engineering ARM7 Register & Betriebszustände

36 School of Engineering Vectored IRQ Non Vectored IRQ FIQ IRQ ARM7 TDMI VIC ARM7 VIC erweitert diese Interrupt Leitungen

37 School of Engineering 0x x x x PC Int1 Int2 Main Interrupt Vektoren Unterschiedliche Interrupt Service Routinen

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

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

40 School of Engineering External Interrupts

41 School of Engineering Edge Triggered Interrupt Level Triggered Interrupt Edge Detector S R Int Clear_IntMikrocontroller Peripherie Baustein Int Clear_Int ARM-Core Register Int ARM-Core Peripherie Baustein Int Latch Edge Triggered vs. Level Triggered Interrupt

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

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

44 School of Engineering VicIntEnable Register Aktiviert Interrupt Eingänge

45 School of Engineering 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 VicIntSelect Register

46 School of Engineering 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 VIC Vector Control Register

47 School of Engineering Nummerierung der Interrupt Quellen

48 School of Engineering Eintritt in die Vectored Interrupt Routine

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

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

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

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

53 School of Engineering Übung 3 - Lösung 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 School of Engineering Initialisieren des Interrupt Controllers

55 School of Engineering 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 School of Engineering 1.Setzen des IODIR1 als Eingang 2.PINSEL auf externen Interrupt setzen 3.Mit VicIntSel IRQ wählen 4.Interrupt Quelle einem Interrupt Priority Slot (0-15) zuordnen 5.Vektor-Adresse der Interrupt Routine in das Vector- Register laden 6.Bei Edge Triggered Interrupts das Latch zurücksetzten 7.Erst zuletzt Interrupteingang im VicIntEnable Register scharf machen Interrupt Controller Initialisierungsreihenfolge

57 School of Engineering 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 } Initialisieren des Interrupt Controllers für externen Interrupt

58 School of Engineering 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 School of Engineering Weitere Register im VIC


Herunterladen ppt "School of Engineering Architekturen der ARM Prozessoren."

Ähnliche Präsentationen


Google-Anzeigen