📄 uart.c
字号:
#include <stdarg.h>
#include "Def.h"
#include "smdk2410.h"
#include "Uart.h"
//推荐nPClock=50*1024*1024
void UartInit(U32 nPClock)
{
GPHCON=vGPHCON; //0x0016faaa (GPH0-3)用于UART0
GPHUP=vGPHUP; //0x000007ff
UFCON0=0x0; //FIFO禁用
UMCON0=0x0; //流量控制禁用
ULCON0=0x3; //8数据位,1停止位,无校验
UCON0 =0x245; //收发轮循 0010 0100 0101
UBRDIV0=(int)(nPClock/(UART_BAUD_RATE * 16)) - 1; //115200速率
}
void UartPutChar(char chVal)
{
while((UTRSTAT0 & UTRSTAT_TX_EMPTY) == 0);
UTXH0=chVal;
}
void UartPrint(const char *pszBuf)
{
while(*pszBuf)
UartPutChar(*pszBuf++);
}
void UartPutInt(unsigned int nVal)
{
char pszBuf[12]={0};
int i;
for(i=10;i>0;i--)
{
pszBuf[i]=nVal%10+48;
nVal=nVal/10;
if(nVal==0)
break;
}
char *pszTemp=pszBuf;
while(0==(*pszTemp))
pszTemp++;
UartPrint(pszTemp);
}
void UartPutPointer(unsigned int nVal)
{
char pszBuf[11]={0};
int i;
for(i=9;i>=2;i--)
{
int iTemp=nVal%16;
if(iTemp>9)
pszBuf[i]=iTemp+87;
else
pszBuf[i]=iTemp+48;
nVal=nVal/16;
}
pszBuf[i--]='x';
pszBuf[i]='0';
char *pszTemp=pszBuf;
while(0==(*pszTemp))
pszTemp++;
UartPrint(pszTemp);
}
void UartPutHex(unsigned int nVal)
{
char pszBuf[9]={0};
int i;
for(i=7;i>=0;i--)
{
int iTemp=nVal%16;
if(iTemp>9)
pszBuf[i]=iTemp+87;
else
pszBuf[i]=iTemp+48;
nVal=nVal/16;
if(nVal==0)
break;
}
if(i%2!=0){
i--;
pszBuf[i]=48;
}
char *pszTemp=pszBuf;
while(0==(*pszTemp))
pszTemp++;
UartPrint(pszTemp);
}
//只支持%c %d %u %x %X %s %p
void UartPrintf(const char *pszFmt,...)
{
char chTemp;
va_list vl;
//
va_start(vl, pszFmt);
while(*pszFmt){
if(pszFmt[0]=='%' && pszFmt[1]=='c'){
chTemp=va_arg(vl,int);
UartPutChar(chTemp);
pszFmt+=2;
}else if(pszFmt[0]=='%' && (pszFmt[1]=='d' || pszFmt[1]=='u')){
UartPutInt(va_arg(vl,unsigned int));
pszFmt+=2;
}else if(pszFmt[0]=='%' && (pszFmt[1]=='x' || pszFmt[1]=='X') ){
UartPutHex(va_arg(vl,unsigned int));
pszFmt+=2;
}else if(pszFmt[0]=='%' && pszFmt[1]=='s'){
UartPrint(va_arg(vl,char *));
pszFmt+=2;
}else if(pszFmt[0]=='%' && pszFmt[1]=='p'){
UartPutPointer(va_arg(vl,unsigned int));
pszFmt+=2;
}else{
UartPutChar(*pszFmt);
pszFmt++;
}
}
va_end(vl);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -