Philips LPC2101 User Manual page 58

Table of Contents

Advertisement

Philips Semiconductors
Volume 1
do and how to process the interrupt request. However, it is recommended that only one
interrupt source should be classified as FIQ. Classifying more than one interrupt sources
as FIQ will increase the interrupt latency.
Following the completion of the desired interrupt service routine, clearing of the interrupt
flag on the peripheral level will propagate to corresponding bits in VIC registers
(VICRawIntr, VICFIQStatus and VICIRQStatus). Also, before the next interrupt can be
serviced, it is necessary that write is performed into the VICVectAddr register before the
return from interrupt is executed. This write will clear the respective interrupt flag in the
internal interrupt priority hardware.
In order to disable the interrupt at the VIC you need to clear corresponding bit in the
VICIntEnClr register, which in turn clears the related bit in the VICIntEnable register. This
also applies to the VICSoftInt and VICSoftIntClear in which VICSoftIntClear will clear the
respective bits in VICSoftInt. For example, if VICSoftInt = 0x0000 0005 and bit 0 has to be
cleared, VICSoftIntClear = 0x0000 0001 will accomplish this. Before the new clear
operation on the same bit in VICSoftInt using writing into VICSoftIntClear is performed in
the future, VICSoftIntClear = 0x0000 0000 must be assigned. Therefore writing 1 to any
bit in Clear register will have one-time-effect in the destination register.
If the watchdog is enabled for interrupt on underflow or invalid feed sequence only then
there is no way of clearing the interrupt. The only way you could perform return from
interrupt is by disabling the interrupt at the VIC (using VICIntEnClr).
Example:
Assuming that UART0 and SPI0 are generating interrupt requests that are classified as
vectored IRQs (UART0 being on the higher level than SPI0), while UART1 and I
generating non-vectored IRQs, the following could be one possibility for VIC setup:
VICIntSelect = 0x0000 0000
VICIntEnable = 0x0000 06C0
VICDefVectAddr = 0x...
VICVectAddr0 = 0x...
VICVectAddr1 = 0x...
VICVectCntl0 = 0x0000 0026
VICVectCntl1 = 0x0000 002A
After any of IRQ requests (SPI0, I
redirect code execution to the address specified at location 0x0000 0018. For vectored
and non-vectored IRQ's the following instruction could be placed at 0x0000 0018:
LDR pc, [pc,#-0xFF0]
This instruction loads PC with the address that is present in VICVectAddr register.
User manual
=>
Rev. 01 — 12 January 2006
; SPI0, I2C0, UART1 and UART0 are IRQ =>
; bit10, bit9, bit7 and bit6=0
; SPI0, I2C0, UART1 and UART0 are enabled interrupts
; bit10, bit9, bit 7 and bit6=1
; holds address at what routine for servicing
; non-vectored IRQs (i.e. UART1 and I2C) starts
; holds address where UART0 IRQ service routine starts
; holds address where SPI0 IRQ service routine starts
; interrupt source with index 6 (UART0) is enabled as
; the one with priority 0 (the highest)
; interrupt source with index 10 (SPI0) is enabled
; as the one with priority 1
2
C, UART0 or UART1) is made, microcontroller will
UM10161
Chapter 5: VIC
2
C are
© Koninklijke Philips Electronics N.V. 2006. All rights reserved.
58

Advertisement

Table of Contents
loading

This manual is also suitable for:

Lpc2103Lpc2102

Table of Contents