微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 改进利用串口的FIFO接收数据

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

时间:11-20 来源:互联网 点击:

  1. /****************************************************************************
  2. #*名称:UART_Initt
  3. #*功能:初始化UART0中断以及中断向量表的配置
  4. #*入口参数:无
  5. #*出口参数:无
  6. #****************************************************************************/
  7. voidUART_Init(void)
  8. {
  9. uint16Fdiv;
  10. U0LCR=0x83;//相关校验位、数据长度等的设置,DLAB=1,可设置波特率
  11. Fdiv=(Fpclk/16)/BAUD;
  12. U0DLM=Fdiv/256;
  13. U0DLL=Fdiv%256;
  14. U0LCR=0X03;
  15. U0IER=0X01;//只使能接收中断
  16. U0FCR=0x81;//使能发送和接收的FIFO,8字节触发
  17. IRQEnable();//使能IRQ中断(这一步注意,下午调试了好久,唉)
  18. VICIntSelect=0x00000000;//设置所有通道为IRQ中断
  19. VICVectCntl0=0x20|6;//UART0通道分配到IRQslot0,优先级最高
  20. VICVectAddr0=(uint32)UART0_IRQ;//设置UART0中断程序地址
  21. VICIntEnable=0x40;//使能UART0中断
  22. }
  23. void__irqUART0_IRQ(void)
  24. {
  25. intcount;
  26. switch(U0IIR&0x0F)
  27. {
  28. case0x02://产生发送中断
  29. break;
  30. case0x04://FIFO接收数据到达8个字节
  31. for(count=0;count<8;count++)
  32. {
  33. Recive_Buffer[UART0Count++]=U0RBR;//保存接收到的数据
  34. }
  35. rcv_new=1;//标志接收到新的数据
  36. break;
  37. case0x0c://FIF0中至少有一个数据,而且在3.5到4.5个字符时间内无数据进(可判断数据接收完毕)
  38. while((U0LSR&0x01)==0x01)
  39. {
  40. Recive_Buffer[UART0Count++]=U0RBR;
  41. }
  42. rcv_new=1;//标志接收到新的数据
  43. break;
  44. default:
  45. break;
  46. }
  47. VICVectAddr=0x00;//结束中断
  48. }

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top