?? uart0.c
字號:
#define IN_UART0
#include "config.h"
#define UCOS_UART0 0
#define UART_BPS 9600 // 串口通訊波特率
static OS_EVENT *Uart0Sem;
/*******************************************************************************
*名稱: UART0_Init()
*功能: 初始化串口0.設(shè)置為8位數(shù)據(jù)位,1位停止位,無奇偶校驗,波特率為9600
*******************************************************************************/
#if UCOS_UART0
uint8 UART0_Init (void)
{
uint16 Fdiv;
PINSEL0 = (PINSEL0 & (~0x0F)) | 0x05; // 設(shè)置I/O連接到UART0
U0LCR = 0x83; // DLAB=1,允許設(shè)置波特率
Fdiv = (Fpclk / 16) / UART_BPS; // 設(shè)置波特率
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()
*功能: 向串口發(fā)送字節(jié)數(shù)據(jù),并等待發(fā)送完畢
*******************************************************************************/
#if UCOS_UART0
void UART0_SendByte(uint8 data)
{ U0THR=data; //發(fā)送數(shù)據(jù)
while((U0LSR&0x40)==0); //等待數(shù)據(jù)發(fā)送完畢
{
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()
*功能:向串口發(fā)送一字符串
*******************************************************************************/
#if UCOS_UART0
void UART0_SendStr(uint8 *str)
{ while(1)
{ if(*str=='\0')
{UART0_SendByte('\r');
UART0_SendByte('\n');
break;
}
UART0_SendByte(*str++); //發(fā)送數(shù)據(jù)
}
}
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++); // 發(fā)送數(shù)據(jù)
}
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 + -