改进利用串口的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; //结束中断 }
相关文章推荐
- STM32利用串口空闲中断在串口DMA配置下接收变长数据
- STM32串口DMA方式接收数据,类似环形FIFO
- MATLAB利用串口接收数据,并实时显示图形
- STM32串口DMA方式接收数据。类似环形FIFO。超省CPU资源!
- 利用epoll接收串口数据和socket进程通信问题
- 利用select接收串口数据 亲测可用小demo
- c#中,确保数据接收完整的 串口处理程序
- MFC串口发送数据大于128数据出错的解决办法(发送0xFE接收得到0x3F等问题)
- 颜色传感器上位机调试软件(串口接收数据实时显示颜色!)
- STM32的串口采用DMA方式接收数据测试
- 单片机串口接收多字节数据
- STM32CubeMX串口接收数据(中断方式,HAL库)
- linux多线程下打开串口发送和接收数据
- C# 串口接收数据中serialPort.close()死锁的实例
- STM32F207运用串口空闲中断+DMA接收不定长数据
- STM32串口接收不定长数据原理与源程序
- 串口接收数据c#
- C#对串口数据接收的处理
- QT 的 串口接收的数据 QByteArray 类怎么得到16进制
- STM32串口接收粉尘传感器数据