Content originally posted in LPCWare by Italia on Mon Jul 21 11:53:08 MST 2014
Hi,
i'm using LPCXpresso and LPC-link programmer with LPC2468 CPU. I wrote the following code, and i have a strange behavior of timer. When i debug step by step the timer takes random values to each advancement of step. That means that i pass from 0x002 to 0x6788 and later to 0x10 and so on.
Can someone say me an example of the ISR hangling in LPCXpresso using Timer0??
I post the code:
void delayMS(unsigned int milliseconds);
void initClocks(void);
void initTimer0(void);
void T0_Interrupt(void);
void setupPLL0(void);
void feedSeq(void);
void connectPLL0(void);
unsigned int i=0;
int main(void)
{
initClocks(); //Initialize CPU and Peripheral Clocks @ 60Mhz
initTimer0(); //Initialize Timer0
IO0DIR = 0xFFFFFFFF; //Configure all pins on Port 0 as Output
IO0PIN = 0xF;
T0TCR = 0x01; //Enable timer
i++; //Only to test timer instrucion by instruction
i++;
i++;
i++;
while(1); //Infinite Idle Loop
}
void initTimer0(void)
{
T0CTCR = 0x0;
T0PR = 0;
T0MR0 = DELAY_MS-1;
T0MCR = MR0I | MR0R; //Set bit0 & bit1 to High which is to : Interrupt & Reset TC on MR0
//----------Setup Timer0 Interrupt-------------
VICVectAddr4 = (void*)T0_Interrupt; //Pointer Interrupt Function (ISR)
VICIntEnable = 0x10; //Enable timer0 int
T0TCR = 0x02; //Reset Timer
}
__attribute__ ((interrupt ("irq")))
void T0_Interrupt(void)
{
long int regVal;
regVal = T0IR; //Read current IR value
T0IR = regVal; //Write back to IR to clear Interrupt Flag
}