×
单片机 > 单片机程序设计 > 详情

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

发布时间:2020-08-26 发布时间:
|
  1. /****************************************************************************   
  2. # * 名称: UART_Initt 
  3. # * 功能:初始化UART0中断以及中断向量表的配置 
  4. # * 入口参数:无 
  5. # * 出口参数:无 
  6. # ****************************************************************************/  
  7. void UART_Init(void)  
  8. {  
  9. uint16 Fdiv;  
  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.   
  24. void __irq UART0_IRQ(void)  
  25. {  
  26. int count;  
  27. switch(U0IIR&0x0F)  
  28. {  
  29. case 0x02://产生发送中断  
  30. break;  
  31. case 0x04://FIFO接收数据到达8个字节  
  32. for(count=0;count<8;count++)  
  33. {  
  34. Recive_Buffer[UART0Count++]=U0RBR;// 保存接收到的数据  
  35. }  
  36. rcv_new=1;//标志接收到新的数据  
  37. break;  
  38. case 0x0c://FIF0中至少有一个数据,而且在3.5到4.5个字符时间内无数据进(可判断数据接收完毕)  
  39. while((U0LSR&0x01)==0x01)  
  40. {  
  41. Recive_Buffer[UART0Count++]=U0RBR;  
  42. }  
  43. rcv_new=1;//标志接收到新的数据  
  44. break;  
  45. default:  
  46. break;  
  47. }  
  48.  VICVectAddr=0x00;  //结束中断  
  49. }  
 
关键字:串口  FIFO  接收数据

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会