Hi am new to this forum.I have recently ordered a "free" KEIL evalution software CD for ARM development tools.I am working on LPCE2214 OLIMEX board. Am able to toggle a PORT pin and also on TIMER and serial port in "polling" mode. But when I enable ISR funstions using VIC,my program in not jumping to ISR.but in debug mode i could see the jump to ISR. also I have DefaultISR in my code.here am attaching my code with this mail. // This program is created for LPC-E2214 board #include "lpc22xx.h" #define OSCILLATOR_CLOCK_FREQUENCY 14745600 //in MHz #define PLOCK 0x400 //in MHz void Initialize(void); void feed(void); void UART0Initialize(unsigned int baud); void UART0WriteChar(unsigned char ch0); unsigned char UART0ReadChar(void); unsigned char UART0ReadChar_nostop(void); unsigned int processorClockFrequency(void); unsigned int peripheralClockFrequency(void); void tc0(void)__irq; static void DefDummyInterrupt(void)__irq; void init_timer(void); void InitVIC(void); long volatile timeval; void wait (void) /* wait function */ { unsigned long i; i = timeval; while ((i + 10) != timeval); /* wait 100ms */ } int main() { /**** VARIABLES ****/ unsigned char ch0 = 0x0; unsigned char ch1 = 0x0; long i=0; /**** INITIALIZATION ****/ // Frequency initialization Initialize(); // UART initialization UART0Initialize(9600); init_timer(); InitVIC(); while(1) { UART0WriteChar('3'); wait(); UART0WriteChar('2'); wait(); } } void Initialize(void) { // Setting Multiplier and Divider values PLLCFG=0x23; feed(); // Enabling the PLL */ PLLCON=0x1; feed(); // Wait for the PLL to lock to set frequency while(!(PLLSTAT & PLOCK)) ; // Connect the PLL as the clock source PLLCON=0x3; feed(); // Enabling MAM and setting number of clocks used for Flash memory fetch (4 cclks in this case) MAMCR=0x2; MAMTIM=0x4; // Setting peripheral Clock (pclk) to System Clock (cclk) VPBDIV=0x1; } void feed(void) { PLLFEED=0xAA; PLLFEED=0x55; } /* Setup the Timer Counter 0 Interrupt */ void init_timer (void) { T0MR0 = 149999; // 10mSec = 150000-1 counts T0MCR = 3; // Interrupt and Reset on MR0 T0TCR = 1; // Timer0 Enable VICVectAddr0 = (unsigned long)tc0; // set interrupt vector in 0 VICVectCntl0 = 0x20 | 4; // use it for Timer 0 Interrupt VICIntEnable = 0x00000010; // Enable Timer0 Interrupt // Timer0 Enable } /* Timer0 Compare-Match Interrupt Handler (ISR) */ /* Timer Counter 0 Interrupt executes each 10ms @ 60 MHz CPU Clock */ /* Timer Counter 0 Interrupt executes each 10ms @ 60 MHz CPU Clock */ void tc0 (void) __irq { ++timeval; T0IR = 1; // Clear interrupt flag VICVectAddr = 0; // Acknowledge Interrupt } void DefDummyInterrupt(void)__irq { ; } void InitVIC() { VICDefVectAddr = (unsigned long)DefDummyInterrupt; } /**** UART0 ****/ void UART0Initialize(unsigned int baud) { unsigned int divisor = peripheralClockFrequency() / (16 * baud); U0LCR = 0x83; //devisor U0DLL = divisor & 0xFF; U0DLM = (divisor >> 8) & 0xFF; U0LCR &= ~0x80; //set functionalite to pins: port0.0 -> TX0, port0.1 -> RXD0 PINSEL0 = PINSEL0 & ~0xF | 0x5; } void UART0WriteChar(unsigned char ch0) { //when U0LSR_bit.THRE is 0 - U0THR contains valid data. while ((U0LSR && 0x20) == 0); U0THR = ch0; } unsigned char UART0ReadChar(void) { //when U0LSR_bit.DR is 1 - U0RBR contains valid data while ((U0LSR && 0x01) == 0); return U0RBR; } unsigned int processorClockFrequency(void) { //return real processor clock speed return OSCILLATOR_CLOCK_FREQUENCY * (PLLCON & 1 ? (PLLCFG & 0xF) + 1 : 1); } unsigned int peripheralClockFrequency(void) { //VPBDIV - determines the relationship between the processor clock (cclk) //and the clock used by peripheral devices (pclk). unsigned int divider; switch (VPBDIV & 3) { case 0: divider = 4; break; case 1: divider = 1; break; case 2: divider = 2; break; } return processorClockFrequency() / divider; } Please look into this and It would be a great help for me as i have been trying for it from past 2 weeks. I think, abviously iam missing some things. I have not changes any things in startup.s file. please guide me.appreciate your help. Thanks
help help hellp..please..