Main.c
#include "2440addr.h"
#include "mmu.h"#include "2440lib.h"
static void __irq IRQ_ISR_UART0(void)
{
if(rSUBSRCPND & 0x1)
{
Uart_Printf("\nHello World!\r\n");
rUTXH0 = rURXH0;
ClearSubPending(BIT_SUB_RXD0);
}
ClearPending(BIT_UART0);
}
void Uart0INT_init(void)
{
Uart_Init(0,115200);
Uart_Select(0);
rPRIORITY = 0x00000000;
rINTMOD = 0x00000000;
ClearSubPending(BIT_SUB_RXD0);
ClearPending(BIT_UART0);
pISR_UART0 = (U32)IRQ_ISR_UART0;
EnableIrq(BIT_UART0);
EnableSubIrq(BIT_SUB_RXD0);
}
int Main()
{
MMU_Init();
rGPHCON |= 0xa0;
rGPHUP = 0x0;
Uart0INT_init();
while(1);
}
2440lib.c
//***************************[ UART ]******************************
static int whichUart=0;
void Uart_Init(int pclk,int baud)
{
int i;
if(pclk == 0)
pclk = PCLK;
rUFCON0 = 0x0; //UART channel 0 FIFO control register, FIFO disable
rUFCON1 = 0x0; //UART channel 1 FIFO control register, FIFO disable
rUFCON2 = 0x0; //UART channel 2 FIFO control register, FIFO disable
rUMCON0 = 0x0; //UART chaneel 0 MODEM control register, AFC disable
rUMCON1 = 0x0; //UART chaneel 1 MODEM control register, AFC disable
//UART0
rULCON0 = 0x3; //Line control register : Normal,No parity,1 stop,8 bits
// [10] [9] [8] [7] [6] [5] [4] [3:2] [1:0]
// Clock Sel, Tx Int, Rx Int, Rx Time Out, Rx err, Loop-back, Send break, Transmit Mode, Receive Mode
// 0 1 0 , 0 1 0 0 , 01 01
// PCLK Level Pulse Disable Generate Normal Normal Interrupt or Polling
rUCON0 = 0x245; // Control register
rUBRDIV0=( (int)(pclk/16./baud+0.5) -1 ); //Baud rate divisior register 0
//UART1
rULCON1 = 0x3;
rUCON1 = 0x245;
rUBRDIV1=( (int)(pclk/16./baud+0.5) -1 );
//UART2
rULCON2 = 0x3;
rUCON2 = 0x245;
rUBRDIV2=( (int)(pclk/16./baud+0.5) -1 );
for(i=0;i<100;i++);
}
void Uart_Select(int ch)
{
whichUart = ch;
}
void Uart_Printf(char *fmt,...)
{
va_list ap;
char string[256];
va_start(ap,fmt);
vsprintf(string,fmt,ap);
Uart_SendString(string);
va_end(ap);
}