First of all; you are not acknowledging your VIC interrupt. This will
cause your system to 'look' like it is not interrupting.
void decrement_timers() __irq
{
// occurs 896 times per second
system_timer--;
T0IR = 1;
VICVectAddr = 0; /* <--- Acknowledge VIC Interrupt !!! */
}
plus: Here is a snippet from an initialization routine that I use, and
it works perfectly:
extern unsigned long acquireFOSC(void); // VPB clock in Hertz
void Timer0_init (const unsigned vicSlot)
{
/*** some sundry global variable initializations here ***/
...
...
...
/*** now initialize the timer and install the service ***/
T0PR = (acquireFOSC () / 2000) - 1;/* Prescaler ~ .0005 sec */
T0MR0 = 1; /* Set MR0 count = .001 sec */
T0MCR = 0x03; /* Set to reset & interrupt */
VIC_install (vicSlot,VICCH_TMR0,TMR0_isr); //install the service
T0TCR = 1; /* Timer0 Enable */
}
--- In lpc2000@yahoogroups.com, "dodge1955" <sutton@h...> wrote:
>
> Can anyone tell me why my interrupt is not firing? The T0IR flag is
> set upon rollover of the TIMER0 32 bit timer, but my code is not
> vectored to the interrupt code. My variable 'system_timer' never
getsShow quoted textHide quoted text
> decremented.
>
> unsigned long system_timer, j;
>
> void decrement_timers() __irq
> {
> // occurs 896 times per second
>
> system_timer--;
>
> T0IR |= 1;
> }
>
> int main()
> {
> VPBDIV = 1;
>
> // set up delay timer (TIMER 0)
>
> VICIntSelect = 0; // all interrupts classified as IRQs
> VICVectCntl0 = 0x00000024;
> VICVectAddr0 = (unsigned int) decrement_timers;
> VICIntEnable = 0x00000010;
>
> // Disable Timer0 and Reset Interrupt Flag
>
> T0TCR = 0;
> T0IR |= 1;
>
> T0MR0 = 0;
> T0MCR = 1;
>
> T0CTCR = 0;
> T0PR = 0;
> T0TCR = 1;
>
> // just an infinite loop to check Timer0
>
> system_timer = 4000;
>
> j = 0;
> for(;;)
> {
> j = j + 2;
> }
>