560 likes | 713 Views
ESI Lektion 7-8. ESI – Lektion 7-8. ARM Stacks Cortex Interrupt System Systemperipherie eines ARM basierenden Microcontrollers ARM Busse Externe Speicherschnittstelle. ARM Stacks. Memory Map des NXP LPC2138. 4.0 GB. 0xFFFF FFFF. AHB Peripherals. 3.75 GB. 0xF000 0000.
E N D
ESI – Lektion 7-8 ARM Stacks Cortex Interrupt System Systemperipherie eines ARM basierenden Microcontrollers ARM Busse Externe Speicherschnittstelle
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
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 Stack Pointer Register Stack-Pointer
Cortex-M3 Stackpointer im RAM RAM MSP PSP
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
ARM7 Initialisieren der Stack Pointer direkt im Startup.s // Setup Stack for each mode LDR R0, =Top_Stack // Enter Undefined Instruction Mode and set its Stack Pointer MSR CPSR_c, #Mode_UND|I_Bit|F_Bit //Switch to Undefined, disable Interrupt MOV SP, R0 SUB R0, R0, #UND_Stack_Size // Enter Abort Mode and set its Stack Pointer MSR CPSR_c, #Mode_ABT|I_Bit|F_Bit //Switch to Abort, disable Interrupt MOV SP, R0 SUB R0, R0, #ABT_Stack_Size // Enter FIQ Mode and set its Stack Pointer MSR CPSR_c, #Mode_FIQ|I_Bit|F_Bit //Switch to FIQ, disable Interrupt MOV SP, R0 SUB R0, R0, #FIQ_Stack_Size
Cortex-M3 Stack Push • Stack Pointer zeigt immer auf die letzten Daten die abgespeichert wurden • Wird vor einer Push Operation dekrementiert
Kopieren von mehreren Registern mit einem Befehl Abspeichern von mehreren Registern auf den Stack STMFD R13!, {[registers], R14} Zurückholen der Register vom Stack: LDMFD R13!, {[registers], PC}
Cortex-M3 Interrupt Stacking Bei jedem Interrupt werden 8 x 4 Bytes gestacked = 32 Bytes
Übung1: Stacking Was sind die Inhalte der Coretex-M3 Register unmittelbar nach Rückkehr in das Hauptprogramm? Füllen Sie die Lücken unten aus. Während der Interruptroutine enthielt das Stack Pointer Register den Wert 0x30000000DF
Übung 1: Stacking - Lösung Was sind die Inhalte der Coretex-M3 Register unmittelbar nach Rückkehr in das Hauptprogramm? Füllen Sie die Lücken unten aus. Während der Interruptroutine enthielt das Stack Pointer Register den Wert 0x30000000DF
Cortex-M3 Interrupt Situationen • Tail Chaining Interrupts • Ein Interrupt gleicher oder niedrigerer Priorität folgt unmittelbar nach einem Interrupt • Pre Empt Interrupts • Ein Interrupt höherer Priorität der signalisiert wird, während ein interrupt niedrigerer Priorität initiiert wird, wird noch vor Ausführung des niedriger priorisierten Interrupts vorgeschoben • Nested Interrupts • Ein Interrupt höherer Priorität unterbricht einen laufenden Interrupt niedrigerer Priorität
Tail Chaining Situation 1 Cortex-M3 Interrupt mit gleicher oder niedrigerer Priorität folgt sofort im Anschluss
Tail Chaining Situation 2 Cortex-M3 Zweiter Interrupt folgt kurz nachdem oder während des Abladens des Stacks in die Register
Pre-empt Interrupt Cortex-M3 Spät ankommender, höher priorisierter Interrupt kann füherem Interrupt vorgeschoben werden
Übung 2: NVIC Priorität Die Priorität von drei Interrupt Routinen ist: INT1 = höchste, Int3 = niedrigste Übung 2a) Der Stackpointer ist vor Eintritt in Interrupt Routine 2 0x300000FF Während der Ausführung von Routine 2 wird Interrupt 1 aktiviert. Beschreiben Sie was passiert: Was ist der Wert des Stackpointers während der Ausführung von Interrupt Routine 1 ? Übung 2b) Der Stackpointer ist vor Eintritt in Interrupt Routine 2 0x300000FF Während der Ausführung von Routine 2 wird Interrupt 3 aktiviert. Beschreiben Sie was passiert: Was ist der Wert des Stackpointers während der Ausführung von Interrupt Routine 3 ?
Übung2: NVIC Priorität - Lösung Übung 2a) Vor Ausführung von Routine2 werden die Register gestacked,der Stackpointer wird um 32 Bytes dekrementiert. Da Interrupt 1 höhere Priorität hat, wird Interrupt Routine2 unterbrochen, und die Register wieder gestacked, die Stack Adresse wird noch mal um 32 Bytes dekrementiert SP: 0x300000FF - 2 * 32 Byte = 0x300000BF Übung 2b) Vor Ausführung von Interrupt 2 wird der Stack um 32 Bytes dekrementiert. Interrupt 3 hat niedrigere Priorität, Interrupt 2 wird nicht unterbrochen. Nach Ausführung von Interrupt2 folgt unmittelbar Interrupt3, es erfolgte kein weiters stacking, da Interrupt 3 im Anschluss kommt. SP: 0x300000FF - 32 Byte = 0x300000DF
Takt Erzeugung ARM7 Core Core Teil InterruptController SRAM/Flash System Teil Bus/Systeme A/D – D/AConverter I2C/SPIController General Purpose I/O UART Pulse Width Modulator Real TimeClock Blockdiagram des NXP LPC2138
Vectored Interrupt Controler ARM 7 Local Bus Advance High Performance Bus AHB/VPB Bridge Program Code/DataFlash/RAM VLSI Peripheral Bus ON Chip Peripherals Interne Busse im LPC2138 AMBA-Bus
Speicherbereichs-Aufteilung 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 On-Chip Static RAM 1.0 GB 0x4000 0000 Reserved for Special Registers 0x3FFF 8000 Reserved for On-Chip Memory On-Chip Non-Volatile Memory 0.0 GB 0x0000 0000
Features eines modernen EBI • Min. 23 Adressleitungen (je nach Konfiguration bis 32 Mbyte adressierbar) • 16- oder 32-bit Datenbusbreite • Steuert • SRAM • SDRAM • DDRAM2 • PROM • EEPROM • Flash • Compact Flash • NAND Flash • Fehlerkorrekturschaltung eingebaut (ECC)
Adressieren von Speichern Schreiben von 16-bit Datenauf 16-bit externen Bus Schreiben von 16-bit Daten auf 8-bit externen Bus Low Aktiv!
Adressieren von Speichern Low Aktiv! Schreiben von 8-bit Daten auf 16-bit externen Bus in little Endian
Speicherzugriffs-Zyklen(Keine Wait States, schnellst möglicher Zugriff) Prozessor gibt Adressen aus Prozessor speichert Daten MCKI ADDR NCS NRD ODER NWE NWE = Low aktives Write Enable
Ein programmierter Wait State Prozessor gibt Adressen aus Prozessor speichert Daten min. 6 ns min. 6 ns MCKI ADDR NCS NRD ODER NWE 1 zusätzlicher Zyklus
Externes Wait Signal Prozessor fügt Wait ein wennNWAIT = 0 Prozessor speichert Daten MCKI ADDR WAIT NCS NRD ODER NWE 1 Wait State