Interrupts in ARM LPC2148

download Interrupts in ARM LPC2148

If you can't read please download the document

description

ARM Based LPC2148 Interrupts

Transcript of Interrupts in ARM LPC2148

/****************************************************/ /* Examples Program For "CP-JR ARM7 USB-LPC2148" /* Target MCU : Philips ARM7-LPC2148 /* /* /* /* : X-TAL : 12.00 MHz */ */ */ */ */ */

: Run Speed 60.00 MHz (With PLL) : PLL Setup = M(5),P(2)

: VPB Clock = CPU Clock = 60.00 MHz */

/* Keil Editor : uVision3 V3.03a /* Compiler : Keil CARM V2.50a

*/ */

/* Create By : Eakachai Makarn (WWW.ETT.CO.TH) /* Last Update : 17/May/2006 /* Function */

: Example Use UART1 Show FIQ(EINT1) */

/****************************************************/ // Print Message to UART1 (9600,N,8,1) // Used GPIO0.14 Trigger Interrupt (FIQ Vector) // Press SW-LOAD For Trigger External Interrup-1

#include "LPC214x.H" #include // For Used Function printf

// LPC2148 MPU Register

/* pototype section */ void init_serial0 (void); int putchar (int ch); int getchar (void); void FIQ_Handler (void) __fiq; Service // Initil UART-0 // Put Char to UART-0 // Get Char From Uart-0 // EINT1(FIQ) Interrupt

int main(void) { init_serial0(); 9600,N,8,1 // Initial External Interrupt-1(GPIO0.14) EXTMODE |= 0x02; // Select External Interrupt-1 = Edge Select Trigger EXTPOLAR |= 0x02; // Select External Interrupt-1 = Rising Edge Trigger PINSEL0 Interrupt EXTINT Interrupt1 Flag |= 0x20000000; = 0x00000002; // Set GPIO0.14 = EXTINT1 // Clear External // Initilial UART0 =

// Initial Interrupt Vector VICIntSelect = 0x00008000; (External Interrupt1) VICIntEnable = 0x00008000; (External Interrupt1) // Select Interrupt-15 // Enable Interrupt-15

printf("CP-JRARM7 USB-LPC2148...Example FIQ Interrupt\n");// Call Printf Function printf("Interrupt-1 Rising Edge Trig By GPIO0.14\n"); Function printf("Press Switch-LOAD For Trigger Interrupt-1\n\n"); printf("Hello From......Main Function\n"); Function // Call Printf // Call Printf Function // Call Printf

// Loop Here Wait Interrupt while(1);

}

/******************************/ /* Initial UART0 = 9600,N,8,1 */ /* VPB(pclk) = 60.00 MHz */

/******************************/ void init_serial0 (void) { PINSEL0 &= 0xFFFFFFF0; // Reset P0.0,P0.1 Pin Config PINSEL0 |= 0x00000001; // Select P0.0 = TxD(UART0) PINSEL0 |= 0x00000004; // Select P0.1 = RxD(UART0)

U0LCR &= 0xFC; // Reset Word Select(1:0) U0LCR |= 0x03; // Data Bit = 8 Bit U0LCR &= 0xFB; // Stop Bit = 1 Bit U0LCR &= 0xF7; // Parity = Disable U0LCR &= 0xBF; // Disable Break Control U0LCR |= 0x80; // Enable Programming of Divisor Latches

// U0DLM:U0DLL = 60.00 MHz / [16 x Baud] // = 60.00 MHz / [16 x 9600]

//

= 390.6 = 391 = 0187H

U0DLM = 0x01; // Program Divisor Latch(391) for 9600 Baud U0DLL = 0x87;

U0LCR &= 0x7F; // Disable Programming of Divisor Latches

U0FCR |= 0x01; // FIF0 Enable U0FCR |= 0x02; // RX FIFO Reset U0FCR |= 0x04; // TX FIFO Reset U0FCR &= 0x3F; }

/****************************/ /* Write Character To UART0 */ /****************************/ int putchar (int ch) { if (ch == '\n') { while (!(U0LSR & 0x20)); TXD Buffer Empty U0THR = 0x0D; } while (!(U0LSR & 0x20)); // Wait // Write CR // Wait

TXD Buffer Empty return (U0THR = ch); // Write Character }

/*****************************/ /* Read Character From UART0 */ /*****************************/ int getchar (void) { while (!(U0LSR & 0x01)); RXD Receive Data Ready return (U0RBR); // Get Receice Data & Return } // Wait

/********************************/ /* External Interrupt-1 Service */ /********************************/ void FIQ_Handler (void) { printf("Hello From......External Interrupt-1\n"); Function EXTINT = 0x00000002; // Clear External Interrupt1 Flag } // Call Printf __fiq