Interrupts in ARM LPC2148
-
Upload
ultimatekp144 -
Category
Documents
-
view
160 -
download
17
description
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