Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Wilhelmina Dreckman Geändert vor über 10 Jahren
1
School of Engineering ESI Lektion 7-8
2
School of Engineering ESI – Lektion 7-8 ARM Stacks Cortex Interrupt System Systemperipherie eines ARM basierenden Microcontrollers ARM Busse Externe Speicherschnittstelle
3
School of Engineering ARM Stacks
4
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 0xF000 0000 0xE000 0000 0xC000 0000 0x8000 0000 0x4000 0000 0x3FFF 8000 0x0000 0000 Stack Pointer Exception Vectors Main Code Memory Map des NXP LPC2138
5
School of Engineering ARM7 Stack Pointer Register Stack- Pointer
6
School of Engineering ARM7 Stackpointer im RAM
7
School of Engineering Cortex-M3 Stackpointer im RAM MSP PSP RAM
8
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)
9
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
10
School of Engineering ARM7 Initialisieren der Stack Pointer im uVision
11
School of Engineering Cortex-M3 Stack Push Stack Pointer zeigt immer auf die letzten Daten die abgespeichert wurden Wird vor einer Push Operation dekrementiert
12
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}
13
School of Engineering Cortex M3 Interrupt Controller (NVIC)
14
School of Engineering Cortex-M3 Blockdiagram
15
School of Engineering Exception TypeAddress OffsetException Vector 18-2550x48-0x3FFIRQ #2-239 170x44IRQ #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
16
School of Engineering Cortex-M3 Interrupt Stacking
17
School of Engineering Cortex-M3 Stack While Fetch
18
School of Engineering Cortex-M3 Interrupt Stacking
19
School of Engineering Cortex-M3 Interrupt Stacking Bei jedem Interrupt werden 8 x 4 Bytes gestacked = 32 Bytes
20
School of Engineering Übung1: Stacking SpeicheradresseDaten 0x300000FF0x11111111 0x300000FB0x400000FE 0x300000F70x12FFFFF8 0x300000F30x14FFFFFF 0x300000EF0x55555555 0x300000EB0x44444444 0x300000E70x33333333 0x300000E30x22222222 0x300000DF0x11111111 0x300000DB0x5a5a5a5a 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 0x30000000DF
21
School of Engineering Übung 1: Stacking - Lösung SpeicheradresseDaten 0x300000FF0x11111111 0x300000FB0x400000FE 0x300000F70x12FFFFF8 0x300000F30x14FFFFFF 0x300000EF0x55555555 0x300000EB0x44444444 0x300000E70x33333333 0x300000E30x22222222 0x300000DF0x11111111 0x300000DB0x5a5a5a5a pc 0x12FFFFF8 lr 0x14FFFFFF r12 0x55555555 r3 0x44444444 r2 0x33333333 r1 0x22222222 r0 0x11111111 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
22
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
23
School of Engineering Tail Chaining Situation 1 Interrupt mit gleicher oder niedrigerer Priorität folgt sofort im Anschluss Cortex-M3
24
School of Engineering Tail Chaining Situation 1 Interrupt mit gleicher oder niedrigerer Priorität folgt sofort im Anschluss Cortex-M3
25
School of Engineering Tail Chaining Situation 2 Zweiter Interrupt folgt kurz nachdem oder während des Abladens des Stacks in die Register Cortex-M3
26
School of Engineering Pre-empt Interrupt Spät ankommender, höher priorisierter Interrupt kann füherem Interrupt vorgeschoben werden Cortex-M3
27
School of Engineering Cortex-M3 Nested Interrupt
28
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 ?
29
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
30
School of Engineering ARM System Peripherals
31
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
32
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
33
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 0xF000 0000 0xE000 0000 0xC000 0000 0x8000 0000 0x4000 0000 0x3FFF 8000 0x0000 0000
34
School of Engineering Speicherbereichs-Aufteilung des VPB
35
School of Engineering Externe Speicherschnittstellen
36
School of Engineering Blockdiagram EBI Atmel AT91SAM7
37
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)
38
School of Engineering Addressaufteilung eines Atmel AT91X40
39
School of Engineering Verbinden von 8-bit Speichern
40
School of Engineering Verbinden von 16-bit Speichern
41
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..8D7..000 0x000a 0b1010D15..8D7..000 0x0008 0b1000D15..8D7..000 0x0006 0b0110D15..8D7..000 0x0004 0b0100D15..8D7..000 0x0002 0b0010D15..8D7..000 0x0000 0b0000D15..8D7..000 Schreiben von 16-bit Daten auf 16-bit externen Bus Schreiben von 16-bit Daten auf 8-bit externen Bus Low Aktiv!
42
School of Engineering Adressieren von Speichern Ausgegebene Adresse A3..A0DatenbitsNWR1 Write Enable NWR0 Write Enable D15..8D7..0 0x0006 0b0110D7..0 10 0x0005 0b0101D15..8 01 0x0004 0b0100D7..0 10 0x0003 0b0011D15..8 01 0x0002 0b0010D7..0 10 0x0001 0b0001D15..8 01 0x0000 0b0000D7..0 10 Schreiben von 8-bit Daten auf 16-bit externen Bus in little Endian Low Aktiv!
43
School of Engineering Übung3: Bestimmen der Enable Signale
44
School of Engineering Übung3: Lösung
45
School of Engineering Übung4: Verbinden von Speichern
46
School of Engineering Übung4: Lösung
47
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
48
School of Engineering SRAM Read Cycle
49
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
50
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
51
School of Engineering SRAM Write Cycle
52
School of Engineering Aufeinander folgende Lese und Schreibzyklen
53
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
54
School of Engineering EBI Steuerregister
55
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
56
School of Engineering Übung5: EBI Chip Select Register CS0CS1CS2 Page Size:16M Base Address:0x010000000x020000000x03000000 Von:0x010000000x020000000x03000000 Bis:0x01FFFFFF0x02FFFFFF0x03FFFFFF CS0CS1CS2 Page Size:64M Base Address:0x10000000 Von: Bis:
57
School of Engineering Übung5-Lsg: EBI Chip Select Register CS0CS1CS2 Page Size:16M Base Address:0x010000000x020000000x03000000 Von:0x010000000x020000000x03000000 Bis:0x01FFFFFF0x02FFFFFF0x03FFFFFF CS0CS1CS2 Page Size:64M Base Address:0x100000000x140000000x18000000 Von:0x100000000x140000000x18000000 Bis:0x13FFFFFF0x17FFFFFF0x1BFFFFFF
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.