Architekturen der ARM Prozessoren

Slides:



Advertisements
Ähnliche Präsentationen
Digital Output Board and Motherboard
Advertisements

Befehlsregister interpretieren
4.5 Virtueller Speicher Problemsituation: Programme und Daten sind zu groß für den verfügbaren Arbeitsspeicher Frühere Lösung Aufspaltung der Programme.
CPI Der einzelne Befehl braucht immer noch 5 Zyklen (stimmt nicht ganz, einige brauchen weniger!) Was verbessert wird, ist der Durchsatz = #Befehle /
4. Attiny-Veranstaltung
KA – Rechnerarchitektur I ____________________________________________________________________________________________ ____________________________________________________________________________________________.
Fakultät für informatik informatik 12 technische universität dortmund Optimizations Peter Marwedel TU Dortmund Informatik 12 Germany 2009/01/17 Graphics:
3 Prozessverwaltung  sieht einen Prozess als Objekt der Verwaltung,
WS 2009/10 1 Systeme 1 Kapitel 1 Aufbau von Rechnern.
Strukturgleichungsmodelle
Teil 5: Embedded Systems
Hier wird Wissen Wirklichkeit Computer Architecture – Part 7 – page 1 of 56 – Prof. Dr. Uwe Brinkschulte, Prof. Dr. Klaus Waldschmidt Part 7 Instruction.
Hier wird Wissen Wirklichkeit Computer Architecture – Part 5 – page 1 of 25 – Prof. Dr. Uwe Brinkschulte, M.Sc. Benjamin Betting Part 5 Fundamentals in.
ilmenau.de Exploiting Pocket PC. ilmenau.de Exploiting Pocket PC PocketPC existiert seit über 5 Jahren (Windows CE seit ca. 10)
Rechnerarchitektur Vorlesung 2 Peter B. Ladkin
Vorlesung, Wintersemester 2009/10M. Schölzel 1 Optimierungstechniken in modernen Compilern Einführung.
Zyklus Nr 0 Instruction Queue Instruction tag Instruction Register IF Stage CDB nameb ADD1 ADD2 ADD3 MUL1 MUL2 DIV INT MU1 MU2 MU3 Reservations OPV1Q1V2Q2.
Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University Baustein- vs. Funktionsorientierte Organisation.
Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University Compilerbau und Reverse Engineering m Vorlesung im Wintersemester.
Programmiermethodik SS2010 © 2010 Albert Zündorf, University of Kassel 1 Gesamtvorgehen 1. Textuelle Szenarios 2. Objektdiagramme 3. Klassendiagramm 4.
AMDs Next Generation Die Hammer Familie Eine Kurzpräsentation von Frank Grümmert bei Herrn Prof. Dr.-Ing. Risse für das RST-Labor.
Open Source Prozessor Leon2 Peer Royla und Marco Siebert RST-Labor WS 04/05 Prof. Dr.-Ing. Thomas Risse.
RS232 Register und ihre Bits
© Alexander Schwing, 2010Institute of Visual Computing Informatik I for D-MAVT Exercise Session 2.
Computerorientierte Physik SS 2006 USB Experiment Interface Board.
ARM7 Exception Vectors Exception Mode Address Reset Supervisor
Ein Rechensystem ist ein aus Hard- und Software bestehendes System zur Speicherung und Verarbeitung von Informationen.
OO implementieren Teil IV Objekte erzeugen. © René ProbstModul 226IV - 2 Von der Klasse zum Objekt Plan Bau Objekt Klasse Instanzierung Objekt Das Objekt.
Lehrstuhl Technische Informatik - Computer Engineering Brandenburgische Technische Universität Cottbus 1 Hierarchical Test Technology for Systems on a.
VHDL-Synthese für Fortgeschrittene
© All rights reserved. Zend Technologies, Inc. Jan Burkl System Engineer, Zend Technologies Zend Server im Cluster.
Mikrocomputertechnik 1 Einführung Prof. J. Walter Stand Oktober Mikrocomputertechnik Jürgen Walter Speicher-Quickie Beschreibung.
XML IV: Cocoon 2.
3.4 CPU-Chips und Busse CPU-Chips
School of Engineering ESI-Lektion School of Engineering ESI – Lektion 9-10 Memory MAP Controll Bootloader, ISP JTAG Debugging In Circuit Emulators.
School of Engineering ESI Lektion 7-8. School of Engineering ESI – Lektion 7-8 ARM Stacks Cortex Interrupt System Systemperipherie eines ARM basierenden.
ESI Einführung.
VHDL 4: Getaktete Logik (D-FF, Zähler, Automaten)
School of Engineering DT2 Projekt-3: Baud Rate Generator & GPS Decoder.
Inhalt Einen Zähler generisch aufbauen CPLD Synthese Timing Analyse
School of Engineering DT2 Projekt-2: Baud Rate Generator & GPS Decoder.
Signal-Prozessoren DSV1, 2009, Hhrt, 1 Mikro-Prozessor Von Neumann-Architektur Daten und Programmcode im gleichen Speicher => Sequenzieller Zugriff auf.
Real Time Operating System
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
Computerorientierte Physik VORLESUNG und Übungen Vorlesung Zeit: Di., 8.30 – Uhr Ort: Hörsaal 5.01, Institut für Experimentalphysik, Universitätsplatz.
Computerorientierte Physik VORLESUNG und Übungen Vorlesung Zeit: Di., 8.30 – Uhr Ort: Hörsaal 5.01, Institut für Experimentalphysik, Universitätsplatz.
Computerorientierte Physik VORLESUNG Zeit: jeweils Mo Uhr Ort: Hörsaal 5.01, Institut für Experimentalphysik, Universitätsplatz 5, A-8010.
Computerorientierte Physik VORLESUNG
Computerorientierte Physik VORLESUNG
Template v5 October 12, Copyright © Infor. All Rights Reserved.
External Labels – The rules For all external labels the following rules apply (external labels are all labels which are not inside of a shape) - all labels.
Μ Version 1.0Seite 1µVision Start Debugger Set Breakpoint µVision Debugger.
Common Language Runtime Seminar Softwareentwicklung Wintersemester 2003 Gertraud Orthofer
Programmieren in Assembler
1 Intern | ST-IN/PRM-EU | | © Robert Bosch GmbH Alle Rechte vorbehalten, auch bzgl. jeder Verfügung, Verwertung, Reproduktion, Bearbeitung,
Launch ON Global.vi System ID object name classname Services to suscribe Observer Control Ref vi-path Service name Step 1 : Objects register to the Global.vi´s,
SQL Server 2005 CLR Integration Sebastian Weber Microsoft Deutschland GmbH
EN/FAD Ericsson GmbH EDD/ Information im 21. Jahrundert muss Erwünscht Relevant Erreichbar Schnell Kostenlos!?
Software Prefetching Reduzierung der Miss-Rate Erfordert Prefetch-Instruktionen –Nicht blockierend –Erzeugen keine Ausnahmen Nicht blockierende Caches.
Data Mining Spectral Clustering Junli Zhu SS 2005.
6. Übung Informatik 1 Inhalte: Der DLX-Prozessor
Mikrocomputertechnik Jürgen Walter
Mikrocomputertechnik BLIN_INT-P-Quickie Prof. J. Walter Stand Januar Mikrocomputertechnik Jürgen Walter „BLIN_INT-P-Quickie“
Mikrocomputertechnik Timer-0-1-Quickie Prof. J. Walter Stand Januar Mikrocomputertechnik Jürgen Walter „TIMER-0-1-Quickie“
LCD-Display HD44780 kompatibles Display
Vom Prozessor zum System
Vom HW-Automaten zum Prozessor
Aufbau und Anwendungen von Mikrokontrollern
מבוא למערכות מחשב ואסמבלי
CSL211 Computer Architecture
 Präsentation transkript:

Architekturen der ARM Prozessoren

Übung 1 Embedded ARM7TDMI v4 3 nein Thumb ARM 15@16.8 Cortex-M1 v7 Typ Processor Ver Pipe-line Cache MMU DSP Java Befehls-satz MIPS@MHz Embedded ARM7TDMI v4 3 nein Thumb ARM 15@16.8 Cortex-M1 v7 Thumb-2 136DMIPS@170 Cortex-M3 MPU 125DMIPS@100 Cortex-R4 8 ja Thumb-2 ARM 600DMIPS@375 Application ARM926E-S v5 5 220@200 ARM1136J-S v6 740@600 Cortex-A8 13 2000DMIPS@1GHz 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 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 Datenzugriffe haben keinen Einfluss auf Befehlspipeline

Cortex-M3 Blockdiagram

Interrupt Mask Registers Cortex-M3 Register xPSR Program & Status Register R0 PRIMASK R1 Interrupt Mask Registers FAULTMASK R2 BASEPRI R3 General Purpose Low Registers CONTROL Control Register R4 R5 R6 R7 R8 R9 R10 General Purpose High Registers Manche 16-bit Thumb Anweisungen können nur auf die Low Regster zugreifen Nur ein register aufs mal sichtbar R11 R12 R13 (MSP) R13 (PSP) 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

ARM7 Register & Betriebszustände System & User R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 (PC) CPSR FIQ R7_fiq R8_fiq R9_fiq R10_fiq R11_fiq R12_fiq R13_fiq R14_fiq SPSR_fiq Supervisor R13_svc R14_svc SPSR_svc Abort R13_abt R14_abt SPSR_abt IRQ R13_irq R14_irq SPSR_irq Undefined R13_und R14_und SPSR_und

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

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

ARM7 Betriebszustände Mode User Normale Programmausführung Eingeschränkter Zugriff FIQ Fast Interrupt Ausführung Exception Mode IRQ Allgemeine Interrupt Ausführung Supervisor Beschützter Mode für Betriebssystem (Eintritt über SWI) Abort Unerlaubter Adressbereich adressiert (Speicherschutz) oder unaligned Data Undefined Unbekannte Anweisung ausgeführt (Coprozessor Anweisung) System Privilegierte Betriebsystem Anweisungen Uneingeschränkter Zugriff

Cortex-M3 Betriebszustände Privileged User When running an Exception Handle Mode When Running Main Program Thread Mode Operation Modes Privilege Levels User Thread System Control space nicht zugreifbar (Speicherregion), MSR Move status Register blockiert verursacht fault exception Wechseln der Betriebszustände: MSR CONTROL, R0

Exceptions

ARM7 Exception Priorities Priority Exception Highest 1 Reset 2 Data Abort 3 FIQ 4 IRQ 5 Prefetch Abort Undefined Instruction SWI Lowest 6

Cortex-M3 Exception Priorities Exc. No. Exception Typ Priorität Funktion 1 Reset -3 (Höchste) 2 NMI -2 Nonmaskable Interrupt 3 Hard Fault -1 All Faults wenn Fault Handler disabled oder maskiert 4 MemManage Einstellbar Memory Management, ungültiger Speicher Zugriff 5 Bus Fault Instruction Prefetch oder Datenzugriffsfehler 6 Usage Fault Versuch auf ARM Befehlssatz umschalten oder ungültiger Befehl 7-10 - 11 SVC System Service call via SVC Befehl 12 Debug Debug Monitor 13 14 PendSV System Service steht an 15 Systick System Tick Timer 16-255 IRQ Interrupt Eingang 0-239

ARM7 Exception Vectors Exception Mode Address Reset Supervisor 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

Memory Map des NXP LPC2138 Stack Pointer Main Code Exception Vectors 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 Stack Pointer Reserved for On-Chip Memory On-Chip Static RAM 1.0 GB 0x4000 0000 Reserved for Special Registers Main Code 0x3FFF 8000 Reserved for On-Chip Memory Exception Vectors On-Chip Non-Volatile Memory 0.0 GB 0x0000 0000

Exception Vector Table 32-bit 0xFFFF FFFF 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 0x0000001c 0x00000018 0x00000014 64 Byte Exception Vector Table 0x00000010 0x0000000c 0x00000008 0x00000004 0x00000000

Cortex-M3 Exception Vectors Exception Type Address Offset Exception Vector 18-255 0x48-0x3FF IRQ #2-239 17 0x44 IRQ #1 16 0x40 IRQ #0 15 0x3C SYSTICK 14 0x38 PendSV 13 0x34 Reserved 12 0x30 Debug Monitor 11 0x2C SVC 7-10 0x1C-0x28 6 0x18 Usage fault 5 0x14 Bus fault 4 0x10 MemManage fault 3 0x0C Hard fault 2 0x08 NMI 1 0x04 Reset 0x00 Starting Value for MSP

Einrichten von Exception Vectors mit 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

Startup.s

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

Ü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 ?

Ü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

Einrichten von Interrupts im ARM7

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

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

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 }

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

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 Frei wählbarer Name Erklärt Compiler, dass es sich um FIQ handelt void fiqint (void) __fiq { IOSET1 = 0x00FF0000; // Set the LED pins EXTINT = 0x00000002; // Clear the peripheral interrupt flag }

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

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 der externen FIQ Routine Adresseintrag der FIQ Routine in der Vektortabelle Adresse der FIQ Routine

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 Name der Interrupt Routine, Müssen mit Header übereinstimmen Benutze den gleichen Namen für die C Interrupt Routine

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) ……

Vectored Interrupt Controller (VIC)

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

ARM7 Register & Betriebszustände System & User R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 (PC) CPSR FIQ R7_fiq R8_fiq R9_fiq R10_fiq R11_fiq R12_fiq R13_fiq R14_fiq SPSR_fiq Supervisor R13_svc R14_svc SPSR_svc Abort R13_abt R14_abt SPSR_abt IRQ R13_irq R14_irq SPSR_irq Undefined R13_und R14_und SPSR_und

ARM7 VIC erweitert diese Interrupt Leitungen FIQ FIQ VIC ARM7 TDMI 16 Vectored IRQ 16 IRQ Non Vectored IRQ

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

ARM7 Exception Vector Tabelle 0xFFFF FFFF LDR PC, FIQ_Addr LDR PC, [PC, # - 0x0FF0] LDR PC, Reset_Addr 0xFFFF F030 Vector Address Register Exception Vector PC unmittelbar nach FIQ 0x0000001c PC unmittelbar nach IRQ 0x00000018 64 Byte Exception Vector Table Program Counter unmittelbar nach Reset 0x00000000

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

External Interrupts

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

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

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

VicIntEnable Register Aktiviert Interrupt Eingänge

VicIntSelect Register 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

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

Nummerierung der Interrupt Quellen

Eintritt in die Vectored Interrupt Routine

ARM7 Exception Vector Tabelle 0xFFFF FFFF LDR PC, FIQ_Addr LDR PC, [PC, # - 0x0FF0] LDR PC, Reset_Addr 0xFFFF F030 Vector Address Register Exception Vector PC unmittelbar nach FIQ 0x0000001c PC unmittelbar nach IRQ 0x00000018 64 Byte Exception Vector Table Program Counter unmittelbar nach Reset 0x00000000

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

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

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

Übung 3 - Lösung 0x18 + 2 x 4 Byte – 0x1000 = 0xFFFF F020 An welcher Adresse befindet sich das Vektor Adress Register des Interrupt Controllers (es handelt sich hier nicht um einen NXP LPC) ? 0x18 + 2 x 4 Byte – 0x1000 = 0xFFFF F020

Initialisieren des Interrupt Controllers

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}

Interrupt Controller Initialisierungsreihenfolge Setzen des IODIR1 als Eingang PINSEL auf externen Interrupt setzen Mit VicIntSel IRQ wählen Interrupt Quelle einem Interrupt Priority Slot (0-15) zuordnen Vektor-Adresse der Interrupt Routine in das Vector-Register laden Bei Edge Triggered Interrupts das Latch zurücksetzten Erst zuletzt Interrupteingang im VicIntEnable Register scharf machen

Initialisieren des Interrupt Controllers für externen Interrupt void main (void) { void EXTINTVectoredIRQ (void) __irq; //Linker legt den Interrupt Adressvektor fest IODIR1 = 0x000FF000; //LED pins als Ausgänge einstellen PINSEL0 = 0x20000000; //EXTINT1 als Eingang wählen VICVectCntl0 = 0x0000002F; //Interrupt Slot für den //entsprechenden Vector wählen VICVectAddr0 = (unsigned)EXTINTVectoredIRQ; // Vector in Addressregister laden VICIntEnable = 0x00008000; //Interrupt aktivieren while(1); //In Schleife laufen bis Interrupt eintritt }

Interrupt Routine void EXTINTVectoredIRQ (void) __irq { IOSET1 = 0x000FF000; // z.B. LED pins einschalten EXTINT = 0x00000002; // Löschen des EXTINT Flags VICVectAddr = 0x00000000; // Dummy write um Ende zu melden }

Weitere Register im VIC