📄 uart0.c
字号:
#define IN_UART0
#include "config.h"
#define UCOS_UART0 0
#define UART_BPS 9600 // 串口通讯波特率
static OS_EVENT *Uart0Sem;
/*******************************************************************************
*名称: UART0_Init()
*功能: 初始化串口0.设置为8位数据位,1位停止位,无奇偶校验,波特率为9600
*******************************************************************************/
#if UCOS_UART0
uint8 UART0_Init (void)
{
uint16 Fdiv;
PINSEL0 = (PINSEL0 & (~0x0F)) | 0x05; // 设置I/O连接到UART0
U0LCR = 0x83; // DLAB=1,允许设置波特率
Fdiv = (Fpclk / 16) / UART_BPS; // 设置波特率
U0DLM = Fdiv / 256;
U0DLL = Fdiv % 256;
U0LCR = 0x03;
}
#else
uint8 UART0_Init (void)
{
uint16 Fdiv;
PINSEL0 = (PINSEL0 & 0xfffffff0) | 0x05;
U0LCR = 0x83;
Fdiv = (Fpclk / 16) / UART_BPS;
U0DLM = Fdiv / 256;
U0DLL = Fdiv % 256;
U0LCR = 0x03;
Uart0Sem = OSSemCreate(0);
if (Uart0Sem !=NULL)
{
return TRUE;
}
else
{
return FALSE;
}
}
#endif
/*******************************************************************************
*名称: UART0_SendByte()
*功能: 向串口发送字节数据,并等待发送完毕
*******************************************************************************/
#if UCOS_UART0
void UART0_SendByte(uint8 data)
{ U0THR=data; //发送数据
while((U0LSR&0x40)==0); //等待数据发送完毕
{
uint32 i;
for(i=0; i<50; i++);
}
}
#else
void UART0_SendByte(uint8 data)
{
OS_ENTER_CRITICAL();
U0THR = data;
while ((U0LSR & 0x40)==0);
{
uint32 i;
for(i=0; i<50; i++);
}
OS_EXIT_CRITICAL();
}
#endif
/*******************************************************************************
*名称:UART0_SendStr()
*功能:向串口发送一字符串
*******************************************************************************/
#if UCOS_UART0
void UART0_SendStr(uint8 *str)
{ while(1)
{ if(*str=='\0')
{UART0_SendByte('\r');
UART0_SendByte('\n');
break;
}
UART0_SendByte(*str++); //发送数据
}
}
char UART0_RecvByte(void)
{ while(!(U0LSR&0x01));
return U0RBR;
}
#else
void UART0SendStr(char *str)
{
OS_ENTER_CRITICAL();
while(1)
{
if( *str == '\0' ) break;
UART0_SendByte(*str++); // 发送数据
}
OS_EXIT_CRITICAL();
}
void UART0_SendStr(uint8 *str)
{
OS_ENTER_CRITICAL();
while(1)
{
if(*str=='\0')
{
UART0_SendByte('\r');
UART0_SendByte('\n');
break;
}
UART0_SendByte(*str++);
}
OS_EXIT_CRITICAL();
}
char UART0_RecvByte(void)
{
uint8 err;
OS_ENTER_CRITICAL();
while((U0LSR & 0x00000001) == 0 )
{
OSSemPend(Uart0Sem, 0, &err);
}
OS_EXIT_CRITICAL();
return U0RBR;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -