📄 uart.cpp.bak
字号:
#include "Uart.h"
int iUartConfig(uint uiPort,ST_UART_CONFIG * pstUartConfig)
{
volatile uint * puiULCON[2] = {&rULCON0,&rULCON1}; //UART 线控制
volatile uint * puiUCON[2] = {&rUCON0,&rUCON1}; //UART 控制寄存器
volatile uint * puiUFCON[2] = {&rUFCON0,&rUFCON1}; //UART FIFO控制寄存器
volatile uint * puiUBRDIV[2] = {&rUBRDIV0,&rUBRDIV1}; //UART 波特率分频寄存器
volatile uint * puiUMCON[2] = {&rUMCON0,&rUMCON1}; //UART MODEM控制寄存器
(*puiULCON[uiPort]) = 0x00; // 初始化
switch(pstUartConfig->parity) //奇偶
{
case COM_ODDPARITY:
(*puiULCON[uiPort]) |= (4<<3);
break;
case COM_EVENPARITY:
(*puiULCON[uiPort]) |= (5<<3);
break;
default : break;//COM_NOPARITY
}
switch(pstUartConfig->datalen)//数据长度
{
case COM_CHR6:
(*puiULCON[uiPort]) |= 1;
break;
case COM_CHR7:
(*puiULCON[uiPort]) |= 2;
break;
case COM_CHR8:
(*puiULCON[uiPort]) |= 3;
break;
default : break;//COM_CHR5
}
switch(pstUartConfig->stop)
{
case COM_STOP2:
(*puiULCON[uiPort]) |= (1<<2);
break;
default : break;//COM_STOP1
}
(*puiUCON[uiPort]) = 0x05; // 中断或轮询方式读取发送数据
(*puiUFCON[uiPort]) = 0x00;//FIFO disable
// 波特率
(*puiUBRDIV[uiPort]) = ( (int)(MCLK/16./pstUartConfig->baud + 0.5) -1 );//config baudrate
if(pstUartConfig->afc == EN_AFC)
{
(*puiUMCON[uiPort]) = 0x10;
}
else//DIS_AFC
{
(*puiUMCON[uiPort]) = 0x01;
}
return 0;
}
void vUartSendByte(uint uiPort, uchar ucData)
{
volatile uint * puiUTRSTAT[2] = {&rUTRSTAT0,&rUTRSTAT1}; //UART TX/RX状态寄存器
volatile uchar * pucUTXH[2] = {&rUTXH0,&rUTXH1}; //UART 发送寄存器
while(1)
{
if( ((*puiUTRSTAT[uiPort])&0x06) == 0x06 )
{
break;
}
}
(*pucUTXH[uiPort]) = ucData;
}
uchar ucUartRecvByte(uint uiPort)
{
volatile uint * puiUTRSTAT[2] = {&rUTRSTAT0,&rUTRSTAT1};
volatile uchar * pucURXH[2] = {&rURXH0,&rURXH1};
while(!((*puiUTRSTAT[uiPort])&0x01));
return (*pucURXH[uiPort]);
}
void vUartSendStr(uint uiPort, uchar * pucStr)
{
while(*pucStr)
{
if(*pucStr == '\n')
{
vUartSendByte(uiPort,'\r');
}
vUartSendByte(uiPort,*pucStr++);
}
}
void vUartPrintf(const char *fmt,...)
{
va_list ap;
char string[256];
va_start(ap,fmt);
vsprintf(string,fmt,ap);
vUartSendStr(UART0_PORT, (uchar *)string);
va_end(ap);
return;
}
int iUartInit(void)
{
ST_UART_CONFIG stUartConfig;
stUartConfig.baud = COM_115200;
stUartConfig.parity = COM_NOPARITY;
stUartConfig.datalen = COM_CHR8;
stUartConfig.stop = COM_STOP1;
iUartConfig(0,&stUartConfig);
stUartConfig.baud = COM_57600;
iUartConfig(1,&stUartConfig);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -