UART串口通信程序.docx
文本预览下载声明
PAGE \* MERGEFORMAT 5
1、UART串口通信
void Delay(int tt)
{ U32 i;
for(;tt0;tt--)
{
for(i=0;i10000;i++){}
}
}
void Uart_SendByte(int data)
{
int whichUart=0;
if(whichUart==0)
{
if(data==\n)
{
while(!(rUTRSTAT0 0x2));
Delay(1); //because the slow response of hyper_terminal
WrUTXH0(\r);
}
while(!(rUTRSTAT0 0x2)); //Wait until THR is empty.
Delay(1);
WrUTXH0(data);
}
}
void uart_init(int pclk,int baud)
{
int i;
if(pclk == 0)
pclk= PCLK;
rUFCON0 = 0x0;
rUCON0= 0x245;
rUMCON0 = 0x0;
rULCON0 = 0x3;
rUBRDIV0=( (int)(pclk/16./baud+0.5) -1 );
for(i=0;i100;i++);
Delay(400);
}
char Uart_Getch(void)
{
while(!(rUTRSTAT0 0x1)); //Receive data ready
return RdURXH0();
}
void Uart_TxEmpty(int ch)
{
if(ch==0)
{
while(!(rUTRSTAT0 0x4));
}
}
void Uart_SendString(char *pt)
{
while(*pt)
Uart_SendByte(*pt++);
}
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);
}
int Main(int argc, char **argv)
{
// int data;
char ch;
U8 key;
U32 mpll_val=0;
mpll_val = (9212)|(14)|(1);
ChangeMPllValue((mpll_val12)0xff, (mpll_val4)0x3f, mpll_val3);
ChangeClockDivider(key, 12);
MMU_DisableICache();
MMU_DisableDCache();
rGPBCON = 0x155555;
rGPHCON = 0x00faaa;
rGPHUP = 0x7ff;
uart_init(0,115200);
Uart_Printf(\nPlease enter char:);
ch=Uart_Getch();
Uart_Printf(\n);
Uart_SendByte(ch);
while(1)
{
Uart_SendByte(ch);
Uart_SendByte(,);
ch++;
Delay(100);
}
return 0;
}
显示全部