#include "UART.h"
/****************************************
*函数名称:UartInit
*输 入:unFosc 晶振频率
unBaud 波特率
*输 出:无
*功 能:串口初始化
******************************************/
VOID UartInit(UINT32 unFosc,UINT32 unBaud)
{
P3_MFP &= ~(P31_TXD0 | P30_RXD0);
P3_MFP |= (TXD0 | RXD0); //P3.0 使能为串口0接收
//P3.1 使能为串口0发送
UART0_Clock_EN; //串口0时钟使能
UARTClkSource_ex12MHZ; //串口时钟选择为外部晶振
CLKDIV &= ~(15<<8); //串口时钟分频为0
IPRSTC2 |= UART0_RST; //复位串口0
IPRSTC2 &= ~UART0_RST; //复位结束
UA0_FCR |= TX_RST; //发送FIFO复位
UA0_FCR |= RX_RST; //接收FIFO复位
UA0_LCR &= ~PBE; //校验位功能取消
UA0_LCR &= ~WLS;
UA0_LCR |= WL_8BIT; //8位数据位
UA0_LCR &= NSB_ONE; //1位停止位
UA0_BAUD |= DIV_X_EN|DIV_X_ONE; //设置波特率分频
UA0_BAUD |= ((unFosc / unBaud) -2); //波特率设置 UART_CLK/(A+2) = 115200, UART_CLK=12MHz
UA0_IER |= RDA_IEN; //接收数据中断使能
NVIC_ISER |= UART0_INT; //使能串口0中断
}
/****************************************
*函数名称:UartSend
*输 入:pBuf 发送数据缓冲区
unNumOfBytes 发送字节总数
*输 出:无
*功 能:串口发送数据
******************************************/
VOID UartSend(UINT8 *pBuf,UINT32 unNumOfBytes)
{
UINT32 i;
for(i=0; i<unNumOfBytes; i++)
{
UA0_THR = *(pBuf+i);
while ((UA0_FSR&TX_EMPTY) != 0x00); //检查发送FIFO是否为空
}
}
/****************************************
*函数名称:UART0_IRQHandler
*输 入:无
*输 出:无
*功 能:串口0中断服务函数
******************************************/
VOID UART0_IRQHandler(VOID)
{
UINT8 ucData;
if(UA0_ISR & RDA_INT) //检查是否接收数据中断
{
while(UA0_ISR & RDA_IF) //获取所有接收到的数据
{
while (UA0_FSR & RX_EMPTY); //检查接收FIFO是否为空
ucData = UA0_RBR; //读取数据
UartSend(&ucData,1); //发送数据
//以下测试接收数据用
if(ucData == 0x11) P2_DOUT &= ~0xff;
if(ucData == 0xff) P2_DOUT |= 0xff;
}
}
}
/****************************************
*函数名称:main
*输 入:无
*输 出:无
*功 能:函数主体
******************************************/
INT32 main(VOID)
{
// unsigned char i,j;
PROTECT_REG
( //ISP下载时保护FLASH存储器
PWRCON |= XTL12M_EN; //默认时钟源为外部晶振
while((CLKSTATUS & XTL12M_STB) == 0); //等待12MHz时钟稳定
CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M; //设置外部晶振为系统时钟
//以下测试接收数据
//P2_PMD=0x5555; //GPIO设置为输出模式
)
UartInit(12000000,9600); //波特率设置为9600bps
while(1)
{
/* j=0;
//发送数据0~255
for(i=0; i<256; i++)
{
UartSend(&j,1);
j++;
Delayms(50);
} */
}
}
|