School of Engineering ESI Lektion 7-8
School of Engineering ESI – Lektion 7-8 ARM Stacks Cortex Interrupt System Systemperipherie eines ARM basierenden Microcontrollers ARM Busse Externe Speicherschnittstelle
School of Engineering ARM Stacks
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
School of Engineering ARM7 Stack Pointer Register Stack- Pointer
School of Engineering ARM7 Stackpointer im RAM
School of Engineering Cortex-M3 Stackpointer im RAM MSP PSP RAM
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)
School of Engineering // 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 ARM7 Initialisieren der Stack Pointer direkt im Startup.s
School of Engineering ARM7 Initialisieren der Stack Pointer im uVision
School of Engineering Cortex-M3 Stack Push Stack Pointer zeigt immer auf die letzten Daten die abgespeichert wurden Wird vor einer Push Operation dekrementiert
School of Engineering 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}
School of Engineering Cortex M3 Interrupt Controller (NVIC)
School of Engineering Cortex-M3 Blockdiagram
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
School of Engineering Cortex-M3 Interrupt Stacking
School of Engineering Cortex-M3 Stack While Fetch
School of Engineering Cortex-M3 Interrupt Stacking
School of Engineering Cortex-M3 Interrupt Stacking Bei jedem Interrupt werden 8 x 4 Bytes gestacked = 32 Bytes
School of Engineering Übung1: Stacking SpeicheradresseDaten 0x300000FF0x x300000FB0x400000FE 0x300000F70x12FFFFF8 0x300000F30x14FFFFFF 0x300000EF0x x300000EB0x x300000E70x x300000E30x x300000DF0x x300000DB0x5a5a5a5a pc lr r12 r3 r2 r1 r0 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 0x DF
School of Engineering Übung 1: Stacking - Lösung SpeicheradresseDaten 0x300000FF0x x300000FB0x400000FE 0x300000F70x12FFFFF8 0x300000F30x14FFFFFF 0x300000EF0x x300000EB0x x300000E70x x300000E30x x300000DF0x x300000DB0x5a5a5a5a pc 0x12FFFFF8 lr 0x14FFFFFF r12 0x r3 0x r2 0x r1 0x r0 0x 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 0x DF
School of Engineering 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
School of Engineering Tail Chaining Situation 1 Interrupt mit gleicher oder niedrigerer Priorität folgt sofort im Anschluss Cortex-M3
School of Engineering Tail Chaining Situation 1 Interrupt mit gleicher oder niedrigerer Priorität folgt sofort im Anschluss Cortex-M3
School of Engineering Tail Chaining Situation 2 Zweiter Interrupt folgt kurz nachdem oder während des Abladens des Stacks in die Register Cortex-M3
School of Engineering Pre-empt Interrupt Spät ankommender, höher priorisierter Interrupt kann füherem Interrupt vorgeschoben werden Cortex-M3
School of Engineering Cortex-M3 Nested Interrupt
School of Engineering Ü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 ?
School of Engineering Ü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
School of Engineering ARM System Peripherals
School of Engineering Blockdiagram des NXP LPC2138 Core Teil System Teil ARM7 Core Pulse Width Modulator A/D – D/A Converter Interrupt Controller Real Time Clock I2C/SPI Controller UART SRAM/Flash Bus/Systeme Takt Erzeugung General Purpose I/O
School of Engineering Interne Busse im LPC2138 ARM 7 AHB/VPB Bridge ON Chip Peripherals Program Code/Data Flash/RAM Local Bus Advance High Performance Bus VLSI Peripheral Bus Vectored Interrupt Controler AMBA-Bus
School of Engineering Speicherbereichs-Aufteilung LPC2138 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
School of Engineering Speicherbereichs-Aufteilung des VPB
School of Engineering Externe Speicherschnittstellen
School of Engineering Blockdiagram EBI Atmel AT91SAM7
School of Engineering 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)
School of Engineering Addressaufteilung eines Atmel AT91X40
School of Engineering Verbinden von 8-bit Speichern
School of Engineering Verbinden von 16-bit Speichern
School of Engineering Adressieren von Speichern Ausgegebene Adresse A3..A0Datenbits D7..D0 0x0006 0b0110D7..0 0x0005 0b0101D7..0 0x0004 0b0100D7..0 0x0003 0b0011D7..0 0x0002 0b0010D7..0 0x0001 0b0001D7..0 0x0000 0b0000D7..0 Ausgegebene Adresse A3..A0DatenbitsNWR1 Write Enable NWR0 Write Enable D15..8D7..0 0x000c 0b1100D15..8D x000a 0b1010D15..8D x0008 0b1000D15..8D x0006 0b0110D15..8D x0004 0b0100D15..8D x0002 0b0010D15..8D x0000 0b0000D15..8D Schreiben von 16-bit Daten auf 16-bit externen Bus Schreiben von 16-bit Daten auf 8-bit externen Bus Low Aktiv!
School of Engineering Adressieren von Speichern Ausgegebene Adresse A3..A0DatenbitsNWR1 Write Enable NWR0 Write Enable D15..8D7..0 0x0006 0b0110D x0005 0b0101D x0004 0b0100D x0003 0b0011D x0002 0b0010D x0001 0b0001D x0000 0b0000D Schreiben von 8-bit Daten auf 16-bit externen Bus in little Endian Low Aktiv!
School of Engineering Übung3: Bestimmen der Enable Signale
School of Engineering Übung3: Lösung
School of Engineering Übung4: Verbinden von Speichern
School of Engineering Übung4: Lösung
School of Engineering Speicherzugriffs-Zyklen (Keine Wait States, schnellst möglicher Zugriff) NWE NRD NCS ADDR MCKI ODER Prozessor gibt Adressen aus Prozessor speichert Daten NWE = Low aktives Write Enable
School of Engineering SRAM Read Cycle
School of Engineering Ein programmierter Wait State NWE NRD NCS ADDR MCKI ODER 1 zusätzlicher Zyklus Prozessor gibt Adressen aus Prozessor speichert Daten min. 6 ns
School of Engineering Externes Wait Signal NWE NRD NCS ADDR MCKI ODER 1 Wait State Prozessor fügt Wait ein wenn NWAIT = 0 Prozessor speichert Daten WAIT
School of Engineering SRAM Write Cycle
School of Engineering Aufeinander folgende Lese und Schreibzyklen
School of Engineering Early Read Cycle NWE NRD NCS ADDR MCKI ODER 1 zusätzlicher Zyklus Prozessor gibt Adressen aus Prozessor speichert Daten Early Read Normal Read 10 ns
School of Engineering EBI Steuerregister
School of Engineering Für jedes Chip Select, gibt es ein Chip Select Register (Atmel-ARM) Datenbusbreite 10 = 8-bit 01 = 16-bit Number of Wait States Wait States eingeschaltet Seitengrösse 00 = 1 M Byte 01 = 4 MByte 10 = 16 MByte 11 = 64 MByte Data Float Output Time Chip Select Enable Base Address (höchste Bits der Basis Adresse) Byte Write Access Type
School of Engineering Übung5: EBI Chip Select Register CS0CS1CS2 Page Size:16M Base Address:0x x x Von:0x x x Bis:0x01FFFFFF0x02FFFFFF0x03FFFFFF CS0CS1CS2 Page Size:64M Base Address:0x Von: Bis:
School of Engineering Übung5-Lsg: EBI Chip Select Register CS0CS1CS2 Page Size:16M Base Address:0x x x Von:0x x x Bis:0x01FFFFFF0x02FFFFFF0x03FFFFFF CS0CS1CS2 Page Size:64M Base Address:0x x x Von:0x x x Bis:0x13FFFFFF0x17FFFFFF0x1BFFFFFF