58
School of Engineerin g Architekturen der ARM Prozessoren

Architekturen der ARM Prozessoren

  • Upload
    ruby

  • View
    91

  • Download
    0

Embed Size (px)

DESCRIPTION

Architekturen der ARM Prozessoren. Übung 1. 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 - PowerPoint PPT Presentation

Citation preview

Page 1: Architekturen der ARM Prozessoren

School ofEngineering

Architekturen der ARM Prozessoren

Page 2: Architekturen der ARM Prozessoren

School ofEngineering

Übung 1

Typ Processor Ver Pipe-line

Cache MMU DSP Java Befehls-satz

MIPS@MHz

Embedded ARM7TDMI v4 3 nein nein nein nein ThumbARM

[email protected]

Cortex-M1 v7 3 nein nein nein nein Thumb-2 136DMIPS@170

Cortex-M3 v7 3 nein MPU nein nein Thumb-2 125DMIPS@100

Cortex-R4 v7 8 ja MPU ja nein Thumb-2ARM

600DMIPS@375

Application ARM926E-S

v5 5 ja ja ja ja ThumbARM

220@200

ARM1136J-S

v6 8 ja ja ja ja ThumbARM

740@600

Cortex-A8 v7 13 ja ja ja ja Thumb-2ARM

2000DMIPS@1GHz

• Was sind die Zusammenhänge zwischen der maximalen Taktfrequenz und der Anzahl der Pipelinestufen• Erklären Sie den Zusammenhang

Page 3: Architekturen der ARM Prozessoren

School ofEngineering

● 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

Page 4: Architekturen der ARM Prozessoren

School ofEngineering

Cortex-M3 Blockdiagram

Page 5: Architekturen der ARM Prozessoren

School ofEngineering

R15 (PC)

R0R1R2R3R4R5R6R7R8R9R10R11R12R13 (MSP)R14 (LR)

Stack pointer (MSP = Main Stack Pointer PSP = Process Stack Pointer)

Link register

Program Counter

R13 (PSP)

Cortex-M3 Register

General PurposeLow Registers

General PurposeHigh Registers

xPSRPRIMASKFAULTMASKBASEPRICONTROL

Interrupt MaskRegisters

Control Register

Program & Status Register

MSP = defaultPSP = AlternativControl(1) bit

Page 6: Architekturen der ARM Prozessoren

School ofEngineering

System & User

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13

R14

R15 (PC)

CPSR

FIQ

R0

R1

R2

R3

R4

R5

R6

R7_fiq

R8_fiq

R9_fiq

R10_fiq

R11_fiq

R12_fiq

R13_fiq

R14_fiq

R15 (PC)

CPSR

SPSR_fiq

Supervisor

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13_svc

R14_svc

R15 (PC)

CPSR

SPSR_svc

Abort

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13_abt

R14_abt

R15 (PC)

CPSR

SPSR_abt

IRQ

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13_irq

R14_irq

R15 (PC)

CPSR

SPSR_irq

Undefined

R0

R1

R2

R3

R4

R5

R6

R7

R8

R9

R10

R11

R12

R13_und

R14_und

R15 (PC)

CPSR

SPSR_und

ARM7 Register & Betriebszustände

Page 7: Architekturen der ARM Prozessoren

School ofEngineering

Betriebszustand:FIQIRQSupervisorUserUndefined

F = 1 FIQ disableI = 1 IRQ disable T = 1 Thumb mode

Condition Code Flags:N = NegativeZ = ZeroC = Carry Over V = Overflow (Ergebnis grösser als Platz im Register)

ARM7 Current Processor Status Register (CPSR)

(Mode)

Page 8: Architekturen der ARM Prozessoren

School ofEngineering

Zeigt welche Exception derProzessor gerade behandeltCondition 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 FlagICI/IT = Interrupt Continuable Instruction (ICI), IF-THEN instruction statusT = Thumb state, immer 1, löschen verursacht Fault Exception

Cortex-M3 Current Processor Status Register (CPSR)

Application

InterruptExecution

Page 9: Architekturen der ARM Prozessoren

School ofEngineering

ARM7 Betriebszustände

Mode

User Normale Programmausführung Eingeschränkter Zugriff

FIQ Fast Interrupt Ausführung Exception Mode

IRQ Allgemeine Interrupt Ausführung Exception Mode

Supervisor Beschützter Mode für Betriebssystem (Eintritt über SWI)

Exception Mode

Abort Unerlaubter Adressbereich adressiert (Speicherschutz) oder unaligned Data

Exception Mode

Undefined Unbekannte Anweisung ausgeführt (Coprozessor Anweisung)

Exception Mode

System Privilegierte Betriebsystem Anweisungen Uneingeschränkter Zugriff

Page 10: Architekturen der ARM Prozessoren

School ofEngineering

Cortex-M3 Betriebszustände

Privileged User

When running an Exception Handle Mode

When Running Main Program Thread Mode Thread Mode

OperationModes

PrivilegeLevels

Wechseln der Betriebszustände:MSR CONTROL, R0

Page 11: Architekturen der ARM Prozessoren

School ofEngineering

Exceptions

Page 12: Architekturen der ARM Prozessoren

School ofEngineering

ARM7 Exception Priorities

Priority Exception

Highest 1

Lowest

2

3

4

5

6

Reset

Data Abort

FIQ

IRQ

Prefetch Abort

Undefined Instruction SWI

Page 13: Architekturen der ARM Prozessoren

School ofEngineering

Cortex-M3 Exception Priorities

Exc.No.

ExceptionTyp

Priorität Funktion

1 Reset -3 (Höchste)

Reset

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 Einstellbar Instruction Prefetch oder Datenzugriffsfehler

6 Usage Fault Einstellbar Versuch auf ARM Befehlssatz umschalten oder ungültiger Befehl

7-10 -

11 SVC Einstellbar System Service call via SVC Befehl

12 Debug Einstellbar Debug Monitor

13 -

14 PendSV Einstellbar System Service steht an

15 Systick Einstellbar System Tick Timer

16-255 IRQ Einstellbar Interrupt Eingang 0-239

Page 14: Architekturen der ARM Prozessoren

School ofEngineering

ARM7 Exception Vectors

Prefetch Abort (instruction fetch memory abort)

Supervisor

0x0000001C

Exception Mode Address

Reset

Undefined instruction

Software interrupt (SWI)

Data Abort (data access memory abort)

IRQ (interrupt)

FIQ (fast interrupt)

Undefined

Supervisor

Abort

Abort

IRQ

FIQ

0x00000018

0x00000010

0x0000000C

0x00000008

0x00000004

0x00000000

Page 15: Architekturen der ARM Prozessoren

School ofEngineering

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

ExceptionVectors

Main Code

Memory Map des NXP LPC2138

Page 16: Architekturen der ARM Prozessoren

School ofEngineering

64 ByteExceptio

nVectorTable

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_Addr0x00000000

0x00000018

0x0000001c

0xFFFF FFFF

0x00000004

0x00000008

0x0000000c

0x00000010

0x00000014

32-bit

Exception Vector Table

Page 17: Architekturen der ARM Prozessoren

School ofEngineering

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 Reserved

6 0x18 Usage fault

5 0x14 Bus fault

4 0x10 MemManage fault

3 0x0C Hard fault

2 0x08 NMI

1 0x04 Reset

0 0x00 Starting Value for MSP

Cortex-M3 Exception Vectors

Page 18: Architekturen der ARM Prozessoren

School ofEngineering

● 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 Vectorsmit startup.s

Page 19: Architekturen der ARM Prozessoren

School ofEngineering

FLASH

main.c

startup.s

Startup.s

Page 20: Architekturen der ARM Prozessoren

School ofEngineeringStartup.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 Tabellestartet bei PC 0x0, 64 bytes

Externe C exception Routinenwerden deklariert

Konstanten Tabelle für ISR Adresse

Page 21: Architekturen der ARM Prozessoren

School ofEngineering

Übung 2

• Von welcher Adresse wird die erste Zeile des vom Anwender geschriebenenAssemblercodes eingelesen (kein Betriebssystem vorausgesetzt) ?

• An welcher Adresse befindet sich die erste Assembleranweisung der Fast InterruptRoutine ?

• An welcher Adresse befindet sich die erste Assembleranweisung des UndefinedInstruktion Handlers ?

Page 22: Architekturen der ARM Prozessoren

School ofEngineering

Übung 2 - Lösung

• Von welcher Adresse wird die erste Zeile des vom Anwender geschriebenenAssemblercodes eingelesen (kein Betriebssystem vorausgesetzt) ? 0x00000100

• An welcher Adresse befindet sich die erste Assembleranweisung der Fast InterruptRoutine ? 0x00007000

• An welcher Adresse befindet sich die erste Assembleranweisung des UndefinedInstruktion Handlers ? 0x00002000

Page 23: Architekturen der ARM Prozessoren

School ofEngineering

Einrichten von Interrupts im ARM7

Page 24: Architekturen der ARM Prozessoren

School ofEngineering

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

IRQARM7 TDMI

ARM 7: Core hat genau nur 2 Interrupt Leitungen

Page 25: Architekturen der ARM Prozessoren

School ofEngineering

1.Initialisieren der Interrupts im Hauptprogramm (main.c)

2.Erstellen der Interrupt Service Routine3.Eintragen der Interrupt Routinen im

Startup.s

ARM7: Aufsetzen von Interrupt Routinen

Beispiel am ARM7 ähnlich am Cortex-M3

Page 26: Architekturen der ARM Prozessoren

School ofEngineering

void main (void){IODIR1 = 0x00FF0000; // Set the LED pins as outputsPINSEL0 = 0x20000000; // Select the EINT1 function in the pin connect blockVICIntSelect = 0x00008000; // Enable a Vic Channel as FIQVICIntEnable = 0x00008000; // Enable the EINT1 interrupt in the VICIOCLR1 = 0x00FF0000; // Clear the LED'swhile(1); //Loop here forever}

ARM7: Interrupt Initialisierung in main.c

Page 27: Architekturen der ARM Prozessoren

School ofEngineering

1.Initialisieren der Interrupts im Hauptprogramm (main.c)

2.Erstellen der Interrupt Service Routine3.Eintragen der Interrupt Routinen im

Startup.s

ARM7: Aufsetzen von Interrupt Routinen

Beispiel am ARM7 ähnlich am Cortex-M3

Page 28: Architekturen der ARM Prozessoren

School ofEngineering

void fiqint (void) __fiq

{

IOSET1 = 0x00FF0000; // Set the LED pins

EXTINT = 0x00000002; // 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 FIQhandelt

Page 29: Architekturen der ARM Prozessoren

School ofEngineering

1.Initialisieren des Interrupt Controllers im Hauptprogramm (main.c)

2.Erstellen der Interrupt Service Routine3.Eintragen der Interrupt Routinen im

Startup.s

ARM7: Aufsetzen von Interrupt Routinen

Beispiel am ARM7 ähnlich am Cortex-M3

Page 30: Architekturen der ARM Prozessoren

School ofEngineering

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 derexternen FIQ Routine

Adresse der FIQ Routine

Adresseintrag der FIQ Routinein der Vektortabelle

ARM 7: Eintragen der FIQ Routinen Startadresse im Startup Code

Page 31: Architekturen der ARM Prozessoren

School ofEngineering

Benennung der Exception Routinen

Exception source Constants table C function headerUndefined Instruction Undef_Handler?A void Undef_Handler (void)__abortPrefetch Abort PAbt_Handler?A void Pabt_Handler (void) __abortData Abort DAbt_Handler?A void Dabt_Handler (void) __abortFast Interrupt fiqint?A void fiqint (void)__fiq

Benutze den gleichen Namenfür die C Interrupt Routine

Frei wählbarer Nameder Interrupt Routine,Müssen mit Headerübereinstimmen

Page 32: Architekturen der ARM Prozessoren

School ofEngineeringSoftware 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 resultcase ( SWI-1)……

SWI[cond] #3 // Bei Ausführung wird Exception Vector 0x00000008 in PC geladen

Page 33: Architekturen der ARM Prozessoren

School ofEngineering

Vectored Interrupt Controller (VIC)

Page 34: Architekturen der ARM Prozessoren

School ofEngineering

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

IRQARM7 TDMI

ARM 7 Core hat genau nur 2 Interrupt Leitungen

Page 35: Architekturen der ARM Prozessoren

School ofEngineering

1616 Vectored IRQ

Non Vectored IRQ

FIQFIQ

IRQARM7 TDMIVIC

ARM7 VIC erweitert diese Interrupt Leitungen

Page 36: Architekturen der ARM Prozessoren

School ofEngineering

0x401000

0x402010

0x402040

0x000000

PC

Int1

Int2

Main

Interrupt Vektoren

Unterschiedliche Interrupt Service Routinen

Page 37: Architekturen der ARM Prozessoren

School ofEngineering

64 ByteExceptio

nVectorTable

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

0x00000000

0x00000018

0x0000001c

ExceptionVector

0xFFFF F030 Vector Address Register

0xFFFF FFFF

ARM7 Exception Vector Tabelle

Page 38: Architekturen der ARM Prozessoren

School ofEngineering

ARM7

FIQ

VIC

vectC

ntl

0..

15

IRQ

EINT3

EINT2

EINT0

VICVectAddr 0

VICVectAddr 1

Highest PriorityInterrupt Slot

SPI0

I2C0

….

18 Chip interne und 4 externeInterrupt Quellen

Vector AddressRegisters

VICVectAddr 15

VICVectAddr 2

Vector Address Register

VICIntSelect

Lowest PriorityInterrupt SlotV

ICIn

tEn

ab

le

16 Interrupt Slots

>1

>1

Default Vector Address Register

Adresse0xFFFF030

Vectored Interrupt Controller im LPC2138

Page 39: Architekturen der ARM Prozessoren

School ofEngineering

External Interrupts

Page 40: Architekturen der ARM Prozessoren

School ofEngineering

Edge Triggered Interrupt

Level Triggered Interrupt

Edge DetectorS

R

Int

Clear_IntMikrocontroller

PeripherieBaustein

Int

Clear_Int

ARM-Core

Register

Int

ARM-Core

PeripherieBaustein Int

Latch

Edge Triggered vs. Level Triggered Interrupt

Page 41: Architekturen der ARM Prozessoren

School ofEngineering

=1Edge Detector

S

REINT

EXTINT

EXTMODEEINT0

EXTPOLAR

EXOR

GPIO Port 0.1 0RxD (UART0)PWM3

IC-Pin P0.1

PINSEL0 Bits 3..2

InterruptLatch

External Interrupt Register

Page 42: Architekturen der ARM Prozessoren

School ofEngineering

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

External Interrupt Register

Page 43: Architekturen der ARM Prozessoren

School ofEngineering

VicIntEnable Register

Aktiviert Interrupt Eingänge

Page 44: Architekturen der ARM Prozessoren

School ofEngineering

Bestimmt welche der bis zu 22 Quellen (Architektur erlaubt bis zu 32 Quellen) dem FIQ oder dem IRQ Ausgang zugeordnet sind1 = FIQ, 0 = IRQ

VicIntSelect Register

Page 45: Architekturen der ARM Prozessoren

School ofEngineering

● 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

Page 46: Architekturen der ARM Prozessoren

School ofEngineering

Nummerierung der Interrupt Quellen

Page 47: Architekturen der ARM Prozessoren

School ofEngineering

Eintritt in die Vectored Interrupt Routine

Page 48: Architekturen der ARM Prozessoren

School ofEngineering

64 ByteExceptio

nVectorTable

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

0x00000000

0x00000018

0x0000001c

ExceptionVector

0xFFFF F030 Vector Address Register

0xFFFF FFFF

ARM7 Exception Vector Tabelle

Page 49: Architekturen der ARM Prozessoren

School ofEngineering

Vector Address Register

0xFFFF FFFF

0xFFFF F030

0x0000 0018

0x0000 0000

IRQ Interrupt Vector

Oberes Adressendedes Microcontrollers

Unteres Adressendedes Microcontrollers

0x18 + 2 x 4 Byte – 0xFF0 = 0xFFFF F030

Auslesen des Vector Address Register

LDR PC,[PC,# -0x0FF0]

Page 50: Architekturen der ARM Prozessoren

School ofEngineering

Vector AddressRegister 0xFFFF F030

0xFFFF F034

0xFFFF F02C

-

0x0FF0

PC PC

LPC AdressRaum

LDR PC, [PC, # - 0x0FF0]

LDR PC, [PC, # - 0x0FF0]

LDR PC, [PC, # - 0x0FF0]

Adresse xy 0x018 0x01c 0x020Programm Counter

Fetch

Decode

Execute

InstructionPipeline

InterruptEreigniss

(0x020)

Darstellung der Instruktion:LDR PC, [PC, # - 0x0FF0]

Berechnen der Interrupt Einsprungadresse bei NXP

Instr. XY

Page 51: Architekturen der ARM Prozessoren

School ofEngineering

Übung 3

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

Page 52: Architekturen der ARM Prozessoren

School ofEngineering

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

0x18 + 2 x 4 Byte – 0x1000 = 0xFFFF F020

Page 53: Architekturen der ARM Prozessoren

School ofEngineering

Initialisieren des Interrupt Controllers

Page 54: Architekturen der ARM Prozessoren

School ofEngineering

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}

Page 55: Architekturen der ARM Prozessoren

School ofEngineering

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

Page 56: Architekturen der ARM Prozessoren

School ofEngineering

void main (void){void EXTINTVectoredIRQ (void) __irq; //Linker legt den InterruptAdressvektor festIODIR1 = 0x000FF000; //LED pins als Ausgänge einstellenPINSEL0 = 0x20000000; //EXTINT1 als Eingang wählenVICVectCntl0 = 0x0000002F; //Interrupt Slot für den //entsprechenden Vector wählenVICVectAddr0 = (unsigned)EXTINTVectoredIRQ; // Vector inAddressregister ladenVICIntEnable = 0x00008000; //Interrupt aktivierenwhile(1); //In Schleife laufen bis Interrupt eintritt}

Initialisieren des Interrupt Controllers für externen Interrupt

Page 57: Architekturen der ARM Prozessoren

School ofEngineering

Interrupt Routine

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

Page 58: Architekturen der ARM Prozessoren

School ofEngineering

Weitere Register im VIC