Yahoo Groups archive

Lpc2000

Index last updated: 2026-04-28 23:31 UTC

Message

Re: LPC2138 Timer0 Interrupt

2005-12-08 by mark_dell555

Make sure your global IRQ flag is clear, (I_BIT in CPSR needs to be
0).  Also you need to clear the VICVectAddr (VICVectAddr = 0x00000000)
at the end of your interrupt.  

Other then that it should work, however if wont occur 896 times per
second, more like once every 71s with a 60Mhz PCLK.

Mark

--- 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 gets
> 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;
> }
>

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.