/****************************************Copyright (c)**************************************************
**
**
**--------------File Info-------------------------------------------------------------------------------
** File name: UART0.c
** Last modified Date:
** Last Version: 1.0
** Descriptions: UART0 functions
**
**------------------------------------------------------------------------------------------------------
** Created by:
** Created date:
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include "config.h"
uint8 UART0TxPC = 0;
uint8 UART0TxLgth = 0;
uint8 UART0TxFin = 0;
uint8 UART0TxBUF[256];
uint8 UART0RxPC = 0;
uint8 UART0RxLgth = 0;
uint8 UART0BT = 0;
uint8 UART0BTPC = 0;
uint8 UART0RxFin = 0;
uint8 UART0RxBUF[256];
uint8 UART0RxBakBUF[256];
/****************************************************************************
* 名 称:UART0_Ini()
* 功 能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为115200
* 入口参数:bps 波特率
* 出口参数:无
****************************************************************************/
void UART0_Init(uint32 BPS)
{
uint16 Fdiv;
PINSEL0 = (PINSEL0 & 0xfffffff0) | 0x05; /* Select the pins for Uart 选择管脚为UART0 */
U0LCR = 0x83; // DLAB = 1,可设置波特率
Fdiv = (Fpclk / 16) / BPS; // 设置波特率
U0DLM = Fdiv / 256;
U0DLL = Fdiv % 256;
U0FCR = 0x00; /* initial FIFO 初始化FIFO */
U0LCR = 0x03;
U0IER = 0x03; /* enable RX TX interrupt禁止中断 */
}
/****************************************************************************
* 名 称:UART0_SendByte()
* 功 能:向串口发送字节数据,并等待发送完毕。
* 入口参数:data 要发送的数据
* 出口参数:无
****************************************************************************/
void UART0_SendByte(uint8 data)
{
while( (U0LSR&0x20)==0 ); // 等待U0THR为空
U0THR = data; // 发送数据
}
/****************************************************************************
* 名 称:UART0_SendStr()
* 功 能:向串口发送一字符串
* 入口参数:srt 要发送的字符串的指针
* 出口参数:无
****************************************************************************/
void UART0_SendStr(uint8 const *str)
{
while(1)
{
if( *str == '\0' ) break;
UART0_SendByte(*str++); // 发送数据
}
}
/****************************************************************************
* 名 称:UART0Printf(char *str)
* 功 能:向串口发送一字符串
* 入口参数:srt 要发送的字符串的指针
* 出口参数:无
****************************************************************************/
void Uart0Printf(char *str)
{
uint8 i = 0;
while(*str != '\0')
{
UART0TxBUF[i] = *str++;
i++;
}
UART0TxLgth = i;
UART0TxPC = 0x00;
UART0TxFin = 1;
UART0_SendByte(UART0TxBUF[0]);
}
/****************************************************************************
* 名称:UART0_Exception()
* 功能:串口UART0接收中断。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void UART0_Exception(void)
{
uint8 IIR, temp;
OS_ENTER_CRITICAL();
if(((IIR = U0IIR) & 0x01) == 0)
{ /* 有中断未处理完 */
temp = (IIR & 0x0e);
if(0x02==temp) /* THRE中断 */
{
UART0TxPC++;
if(UART0TxPC >= UART0TxLgth)
{
UART0TxPC = 0;
UART0TxLgth =0;
Com1Mark.bit.TFnd =0;
}
else
{
while( (U0LSR&0x20)==0 ); // 等待U0THR为空
U0THR = UART0TxBUF[UART0TxPC]; // 发送数据
}
}
if(0x04==temp) /* RDA中断 */
{
UART0RxBUF[UART0RxPC] = U0RBR; /* 接收数据 */
UART0RxPC++;
UART0BT = 1;
UART0BTPC = 0;
}
}
VICVectAddr = 0; // 通知中断控制器中断结束
OS_EXIT_CRITICAL();
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/