您的位置:首页 > 其它

改进利用串口的FIFO接收数据

2011-03-14 18:40 387 查看
/****************************************************************************
# * 名称: UART_Initt
# * 功能:初始化UART0中断以及中断向量表的配置
# * 入口参数:无
# * 出口参数:无
# ****************************************************************************/
void UART_Init(void)
{
uint16 Fdiv;
U0LCR=0x83;//相关校验位、数据长度等的设置,DLAB = 1,可设置波特率
Fdiv=(Fpclk/16)/BAUD;
U0DLM=Fdiv/256;
U0DLL=Fdiv%256;
U0LCR=0X03;
U0IER=0X01;//只使能接收中断
U0FCR=0x81;//使能发送和接收的FIFO,8字节触发
IRQEnable();//使能IRQ中断(这一步注意,下午调试了好久,唉)
VICIntSelect=0x00000000;// 设置所有通道为IRQ 中断
VICVectCntl0=0x20|6;//UART0通道分配到IRQslot0,优先级最高
VICVectAddr0=(uint32)UART0_IRQ;  //设置UART0中断程序地址
VICIntEnable=0x40;//使能UART0中断
}

void __irq UART0_IRQ(void)
{
int count;
switch(U0IIR&0x0F)
{
case 0x02://产生发送中断
break;
case 0x04://FIFO接收数据到达8个字节
for(count=0;count<8;count++)
{
Recive_Buffer[UART0Count++]=U0RBR;// 保存接收到的数据
}
rcv_new=1;//标志接收到新的数据
break;
case 0x0c://FIF0中至少有一个数据,而且在3.5到4.5个字符时间内无数据进(可判断数据接收完毕)
while((U0LSR&0x01)==0x01)
{
Recive_Buffer[UART0Count++]=U0RBR;
}
rcv_new=1;//标志接收到新的数据
break;
default:
break;
}
VICVectAddr=0x00;  //结束中断
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: