0% found this document useful (0 votes)
646 views5 pages

Interrupts in ARM LPC2148

This program initializes UART1 on the LPC2148 microcontroller to 9600 baud for printing messages. It configures GPIO0.14 to trigger an external interrupt on the rising edge which calls the FIQ interrupt service routine. The main function prints messages about the example and waits in a loop for the interrupt. When the interrupt occurs, it prints a message from the FIQ service routine and clears the interrupt flag.

Uploaded by

ultimatekp144
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as RTF, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
646 views5 pages

Interrupts in ARM LPC2148

This program initializes UART1 on the LPC2148 microcontroller to 9600 baud for printing messages. It configures GPIO0.14 to trigger an external interrupt on the rising edge which calls the FIQ interrupt service routine. The main function prints messages about the example and waits in a loop for the interrupt. When the interrupt occurs, it prints a message from the FIQ service routine and clears the interrupt flag.

Uploaded by

ultimatekp144
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as RTF, PDF, TXT or read online on Scribd
You are on page 1/ 5

/****************************************************/

/* 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"

// LPC2148 MPU Register

#include <stdio.h>
// For Used Function printf

/* pototype section */
void init_serial0 (void);

// Initil UART-0

int putchar (int ch);

// Put Char to UART-0

int getchar (void);


void FIQ_Handler (void) __fiq;
Service

// Get Char From Uart-0


// EINT1(FIQ) Interrupt

int main(void)
{
init_serial0();
9600,N,8,1

// Initilial UART0 =

// 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;

// Set GPIO0.14 = EXTINT1

= 0x00000002;

// Clear External

// Initial Interrupt Vector


VICIntSelect
= 0x00008000;
(External Interrupt1)

// Select Interrupt-15

VICIntEnable
= 0x00008000;
(External Interrupt1)

// 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

// Loop Here Wait Interrupt


while(1);

// Call Printf
// Call Printf Function
// Call Printf

/******************************/
/* 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;

// Wait
// Write CR

}
while (!(U0LSR & 0x20));

// Wait

TXD Buffer Empty


return (U0THR = ch);
// Write Character
}

/*****************************/
/* Read Character From UART0 */
/*****************************/
int getchar (void)
{
while (!(U0LSR & 0x01));
RXD Receive Data Ready

// Wait

return (U0RBR);
// Get Receice Data & Return
}

/********************************/
/* External Interrupt-1 Service */
/********************************/
void FIQ_Handler (void)

__fiq

{
printf("Hello From......External Interrupt-1\n");
Function
EXTINT = 0x00000002;
// Clear External Interrupt1 Flag
}

// Call Printf

You might also like