Nothing Special   »   [go: up one dir, main page]

Interrupts in ARM LPC2148

Download as rtf, pdf, or txt
Download as rtf, pdf, or txt
You are on page 1of 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