📄 usart.c
字号:
//***************************************************************
// ARM BOOT ROUTE VER1.0@0x0C000000 for 44B0X release
// bjwork2007@gmail.com
// chenjun @ 2005-6-10
//***************************************************************
#include <stdarg.h>
#include "..\inc\usart.h"
#include "..\inc\NXP_ARM.h"
#include "..\inc\common.h"
#include "..\inc\sysinit.h"
typedef int *__va_list[1];
int vsprintf(char * /*s*/, const char * /*format*/, __va_list /*arg*/);
void UartSend(unsigned int ch,unsigned char data);
unsigned char UartReceive(unsigned int ch);
unsigned int UartRxState(unsigned int ch);
unsigned char UartGetkey(unsigned int ch);
void UartSendString(unsigned int ch,char *pt);
void printf(char *fmt, ...)
{
va_list ap;
char string[256];
va_start(ap, fmt);
vsprintf(string, fmt, ap);
UartSendString(CONSOLE_UART, string);
va_end(ap);
}
void UartInit(unsigned int ch)
{
char a;
if(ch == 0)
{ //if ch=0 then initialize uart0(COM1)
rU0FCR = 0x6; //disable uart0 T/R FIFO
rU0ACR = 0x0; //disable Auto-baud
rU0LCR = 0x83; //set flow control at none,set uart0 at 8,n,1 format
rU0SCR = 0x00;
rU0DLM = 0x00; //set baud rate
rU0DLL = PCLK/(EXT_OSC_CLK/4); //set baud rate
if(EXT_OSC_CLK == 12000000)
rU0FDR = 0x85; //set baud rate
else if(EXT_OSC_CLK == 11059200)
rU0FDR = 0x21; //set baud rate
rU0TER = 0x80; //enable TXD
rU0LCR = 0x3; //set flow control at none,set uart0 at 8,n,1 format
rU0IER = 0x0; //disable UART interrupt
a = rU0RBR; //clear RXD buffer
}
else //if ch=1 then initialize uart1(COM2)
{
rU1FCR = 0x6; //disable uart0 T/R FIFO
rU1ACR = 0x0; //disable Auto-baud
rU1LCR = 0x83; //set flow control at none,set uart0 at 8,n,1 format
rU1SCR = 0x00;
rU1DLM = 0x00; //set baud rate
rU1DLL = PCLK/(EXT_OSC_CLK/4); //set baud rate
if(EXT_OSC_CLK == 12000000)
rU1FDR = 0x85; //set baud rate
else if(EXT_OSC_CLK == 11059200)
rU1FDR = 0x21; //set baud rate
rU1TER = 0x80; //enable TXD
rU1LCR = 0x3; //set flow control at none,set uart0 at 8,n,1 format
rU1IER = 0x0; //disable UART interrupt
rU1MCR = 0x0; //disable cts
a = rU1RBR; //clear RXD buffer
}
}
void UartSend(unsigned int ch,unsigned char data)
{
if(ch == 0)
{ //if ch=0 then send data use uart0(COM1)
if(data=='\n') //if data is '\n' then frist send '\r' to HyperTerminal
{
while(!(rU0LSR & 0x20));//waiting for trans buffer empty
Delay(10); //delay for HyperTerminal
rU0THR = '\r'; //send newline to HyperTerminal
}
while(!(rU0LSR & 0x20)); //waiting for trans buffer empty
Delay(10); //delay for HyperTerminal
rU0THR = data; //send data to HyperTerminal
}
else
{ //if ch=1 then send data use uart1(COM2)
if(data=='\n') //if data is '\n' then frist send '\r' to HyperTerminal
{
while(!(rU1LSR & 0x20));//waiting for trans buffer empty
Delay(10); //delay for HyperTerminal
rU1THR = '\r'; //send newline to HyperTerminal
}
while(!(rU1LSR & 0x20)); //waiting for trans buffer empty
Delay(10); //delay for HyperTerminal
rU1THR = data; //send data to HyperTerminal
}
}
unsigned char UartReceive(unsigned int ch)
{
if(ch == 0)
{ //if ch=0 then send data use uart0(COM1)
while(!(rU0LSR & 0x1)); //waiting for buffer register has a received data
return rU0RBR; //return data
}
else
{ //if ch=0 then send data use uart1(COM2)
while(!(rU1LSR & 0x1)); //waiting for buffer register has a received data
return rU1RBR; //return data
}
}
unsigned int UartRxState(unsigned int ch)
{ //return uart rx state
if(ch == 0)
return (rU0LSR & 0x1); //uart0(COM1)
else
return (rU1LSR & 0x1); //uart1(COM2)
}
unsigned char UartGetkey(unsigned int ch)
{
return (ch == 0) ? rU0RBR : rU1RBR; //return rx data
}
void UartSendString(unsigned int ch,char *pt)
{
while(*pt > 0)
UartSend(ch, (unsigned char)(*pt++));
}
void sendbyte(unsigned int ch,char data)
{
if(ch == 0)
{
while(!(rU0LSR & 0x20)); //waiting for trans buffer empty
Delay(10); //delay for HyperTerminal or SSCOM3.0
rU0THR = (unsigned char)data; //send data to HyperTerminal or to SSCOM3.0
}
else
{
while(!(rU1LSR & 0x20)); //waiting for trans buffer empty
Delay(10); //delay for HyperTerminal or SSCOM3.0
rU1THR = (unsigned char)data; //send data to HyperTerminal or to SSCOM3.0
}
}
//*****************************************************************************************************************************
void ConsoleInit(void)
{
UartInit(CONSOLE_UART);
}
void putch(char data)
{
UartSend(CONSOLE_UART,(unsigned char)data);
}
void puts(char *str)
{
while(*str)
UartSend(CONSOLE_UART,(unsigned char)(*str++));
}
unsigned char getch(void)
{
return UartReceive(CONSOLE_UART);
}
unsigned char getkey(void)
{
return UartGetkey(CONSOLE_UART);
}
unsigned int kbhit(void)
{
return UartRxState(CONSOLE_UART);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -