Hello I'm new to both ARM and Crossworks and trying to understand interrupts, i order
to do so, i've created a small serial program to echo characters received, however it never seems to call the ISR. Ive tried adding VECTORED_IRQ_INTERRUPTS and STARTUP_FROM_RESET to the Preprocessor Definitions
section of the startup.s file... I would appreciate a little guidance
Program as follows :-
#include "targets/LPC210X.H"
#define Fosc 12000000 // Crystal Frequency #define Fcclk (Fosc * 5) // System Frequency #define Fcco (Fcclk * 4) // CCO Frequency #define Fpclk (Fcclk / 4) * 1 // VPB Clock Frequency
unsigned char rec; unsigned char rec_new;
/********************************************************************** IRQ_UART0()
**********************************************************************/ void IRQ_UART0 () __attribute__ ((interrupt ("IRQ"))); void IRQ_UART0 () { if( (U0IIR&0x0F)==0x04 ) { rec = U0RBR; rec_new = 1; } VICVectAddr = 0x00; } /********************************************************************** SendByte() **********************************************************************/ void SendByte(unsigned char data) { U0THR = data; while( (U0LSR & 0x20)==0 ); } /********************************************************************** UART0_Ini() **********************************************************************/ unsigned char UART0_Ini(unsigned int baud) { unsigned long temp;U0LCR = 0x80; // Line Control Register = DLAB temp = (Fpclk / 16)/baud; U0DLM = temp / 256; // Divisor Latch MSB U0DLL = temp % 256; // Divisor Latch LSB U0LCR = 0x83; // 8 bits, no Parity, 1 Stop bit U0LCR = 0x03; // DLAB = 0
return(1); } /********************************************************************** Main()
**********************************************************************/ int main(void) { PINSEL0 = 0x00000005; // GPIO = TXD (UART0) & RxD (UART0) PINSEL1 = 0x00000000; // No Change from Resetrec_new = 0; // Reset rec_new flag
UART0_Ini(115200); // Set Baud Rate and intalise UART
U0FCR = 0x01; // FIFO Control Register - Enable FIFO U0IER = 0x01; // Interrupt Enable Register - Enable RX Data Available Interrupt
VICIntSelect = 0x00000000; // Clear Interrupt Select register VICVectCntl0 = 0x26; // UART0 IRQ slot 0 VICVectAddr0 = (int)IRQ_UART0; // Address of URAT0 ISR VICIntEnable = 0x00000040; // Enable Interrupts - UART0
while(1) { if(rec_new==1) { SendByte(rec); if (rec==0x0D) SendByte(0X0A); rec_new = 0; } } return 0; }
Thank you
--------------------------------------- Posted through