📄 uart.c
字号:
/*************************************************************************
* File Name:Uart.c
* Description:串口中断方式通信--CPU工作频率为20.5MHz(开发板外接8MHz),波特率
* 为19200bps,字符长度8位,奇偶校验位无,停止位1位。允许发送/接
* 收中断,允许接收超时、错误中断,启用FIFO,发送FIFO触发级别为
* 空,接收FIFO触发级别为12字节。不使用Modem自动流控。采用中断方
* 式通信。
* Date:2008-6-07
*************************************************************************/
#include "ISR.h"
#include "Uart.h"
#include "I2S.h"
#include "DMA.h"
extern char flag;
extern int count,count1;
/*
*************************************************************************************************************
- 函数名称 : void uart_init(void)
- 函数说明 : 串口初始化
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void uart_init(void)
{
UBRDIV0 = BRD; // 19200bps
ULCON0 = 0x03; // 帧长度8位,停止位1位,无校验
UFCON0 = 0x21; // 启用FIFO,发送FIFO触发级别为空,
// 接收FIFO触发级别为12字节
UCON0 = 0x0C5; // 接收中断/查询允许,发送中断允许
// 允许接收错误中断,允许接收超时中断
}
//###################################################
// 如果UART0/1接收错误,则引起错误中断,就会执行下面
// HandlerUERR01中断服务子程序,
// 读错误状态寄存器,如果是溢出错误,读接收缓冲区,以清除错误
/* UART0/1 Error Interrupt Handler */
__irq void HandlerUERR01(void)
{
unsigned char errdata, errflag;
errflag = UERSTAT0; // 读错误状态寄存器
if(errflag&0x01) // 溢出错误
errdata = URXH0; // 读接收缓冲区
I_ISPC = ((unsigned int)0x1<<14);// 清除UERR01 Error Interrupt
// 未进一步处理
}
// 如果UART0接收(超时)中断,则引起接收中断,就会执行下面
// HandlerURXD0中断服务子程序,从UART0接收缓冲区读走数据
/* UART0 Rx Interrupt Handler (包括超时中断) */
__irq void HandlerURXD0(void)
{
int rxcount, k;
char tmp;
rxcount = UFSTAT0&0x0f; // 接收FIFO的数据量
for(k=0; k<rxcount; k++)
tmp=URXH0 ; // 从接收FIFO读入数据
I_ISPC = ((unsigned int)0x1<<7);// 清除UART0 Rx Interrupt
}
// 如果UART0发送中断,则引起发送中断,就会执行下面
// HandlerUTXD0中断服务子程序,填充UART0发送缓冲区
/* UART0 Tx Interrupt Handler */
__irq void HandlerUTXD0(void)
{
I_ISPC = ((unsigned int)0x1<<3);// 清除UART0 Tx Interrupt
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -