Team,
Please suggest me what is missing/wrong? I'm unable to hit ISR even though the timer is reset and interrupt flag is set.
I'm not using real hardware but running in simulation mode only and for LPC23xx:
My startup code: Vectors LDR PC, Reset_Addr LDR PC, Undef_Addr LDR PC, SWI_Addr LDR PC, PAbt_Addr LDR PC, DAbt_Addr NOP ; Reserved Vector ; LDR PC, IRQ_Addr LDR PC, [PC, #-0x0120]
LDR PC, FIQ_Addr
void InitTimer1() {
/* Timer1 and Preset disabled */ T1TCR = 0x00; /* Timer Counter register, after PR is reset, this inc by 1 */ T1TC = 0x00; /* Prescalar register! Max value for prescalar counter */ T1PR = 0xFFFF; /* Prescale Counter register */ T1PC = 0x0; /* End user has to fill in the match value */ T1MR0 = 0x222; /* Reset TC and interrupt on match */ T1MCR = 0x03; /* 0000 0000 0000 0011 */ }
void InitVIC() {
VICIntSelect &= (~(1 << 5)); /* Timer 1 selected as IRQ */ /* Address of the ISR */ VICVectAddr5 = (unsigned long )Timer1_IRQ_Handler;
VICVectCntl5 = 0x20 | 5; VICIntEnable |= (1 << 5);/* Timer 1: (bit 5) interrupt enabled */
}
void Timer1_IRQ_Handler (void) __irq { unsigned static int i = 0; T0IR = 0x01; /* Clear Timer1 MR0 interrupt */ IOSET0 = ~ (1 << (i+1)); if ( i == 32) i = 1; i++; VICVectAddr = 0x00;/* Dummy write to ACK the VIC */
int main() { InitPLL(); EnableMAM(); SetPeripheralClock(); InitGPIO(); InitTimer1(); InitVIC();
/* Timer1 and Preset Enabled */ T1TCR = 0x01;
/* Rest of the code */ while (1);