I got the ISR to run as a Vectored Interrupt. Here is the setup code.
SCB_EXTINT = 0x01; //clears EINT0 Interrupts
SCB_EXTMODE = 0x01; //Sets EINT0 to Edge Triggered
SCB_EXTPOLAR = 0x01; //Sets EINT0 to be rising edge sensitive
PCB_PINSEL1 |= 0x00000001; //Select PIN 14 as EINT0
VICVectAddr2 = (unsigned long)FIQ_ISR; // set interrupt vector
VICVectCntl2 = 0x2E; // use it for EINT0 Interrupt:
VICIntSelect &= 0xFFFBFFFF; //Select EINT0 as IRQ Interrupt
VICIntEnable |= 0x00004000; //Enable EINT0 Interrupts
SCB_EXTINT = 0x01; //clears EINT0 Interrupts
There was no way I could get it to run as a FIQ. This should work, but I wanted
to get the smaller latency of the FIQ.
FIQ interrupts (2103)
-
YahooArchive
- Posts: 1462
- Joined: Fri Oct 19, 2012 5:11 am
Re: FIQ interrupts (2103)
Check that you have assigned your FIQ_ISR handler to the correct location. This
depends on what your startup code is doing. In our case, using Astrobe, the
interrupt handler locations are remapped to RAM to allow the handlers to be
assigned dynamically at runtime.
Hence, in Oberon-07 the asignment is done as follows just before enabling the
EINT0 interrupt:
CONST
(* Interrupt handler address are remapped to RAM *)
FIQHandlerAddress = 04000003CH;
...
...
(* Install FIQ handler *)
SYSTEM.PUT(FIQHandlerAddress, SYSTEM.ADR(EintHandler));
Regards,
Chris
depends on what your startup code is doing. In our case, using Astrobe, the
interrupt handler locations are remapped to RAM to allow the handlers to be
assigned dynamically at runtime.
Hence, in Oberon-07 the asignment is done as follows just before enabling the
EINT0 interrupt:
CONST
(* Interrupt handler address are remapped to RAM *)
FIQHandlerAddress = 04000003CH;
...
...
(* Install FIQ handler *)
SYSTEM.PUT(FIQHandlerAddress, SYSTEM.ADR(EintHandler));
Regards,
Chris