新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 改進(jìn)利用串口的FIFO接收數(shù)據(jù)

改進(jìn)利用串口的FIFO接收數(shù)據(jù)

作者: 時(shí)間:2016-11-20 來源:網(wǎng)絡(luò) 收藏
  1. /****************************************************************************
  2. #*名稱:UART_Initt
  3. #*功能:初始化UART0中斷以及中斷向量表的配置
  4. #*入口參數(shù):無
  5. #*出口參數(shù):無
  6. #****************************************************************************/
  7. voidUART_Init(void)
  8. {
  9. uint16Fdiv;
  10. U0LCR=0x83;//相關(guān)校驗(yàn)位、數(shù)據(jù)長(zhǎng)度等的設(shè)置,DLAB=1,可設(shè)置波特率
  11. Fdiv=(Fpclk/16)/BAUD;
  12. U0DLM=Fdiv/256;
  13. U0DLL=Fdiv%256;
  14. U0LCR=0X03;
  15. U0IER=0X01;//只使能接收中斷
  16. U0FCR=0x81;//使能發(fā)送和接收的FIFO,8字節(jié)觸發(fā)
  17. IRQEnable();//使能IRQ中斷(這一步注意,下午調(diào)試了好久,唉)
  18. VICIntSelect=0x00000000;//設(shè)置所有通道為IRQ中斷
  19. VICVectCntl0=0x20|6;//UART0通道分配到IRQslot0,優(yōu)先級(jí)最高
  20. VICVectAddr0=(uint32)UART0_IRQ;//設(shè)置UART0中斷程序地址
  21. VICIntEnable=0x40;//使能UART0中斷
  22. }
  23. void__irqUART0_IRQ(void)
  24. {
  25. intcount;
  26. switch(U0IIR&0x0F)
  27. {
  28. case0x02://產(chǎn)生發(fā)送中斷
  29. break;
  30. case0x04://FIFO接收數(shù)據(jù)到達(dá)8個(gè)字節(jié)
  31. for(count=0;count<8;count++)
  32. {
  33. Recive_Buffer[UART0Count++]=U0RBR;//保存接收到的數(shù)據(jù)
  34. }
  35. rcv_new=1;//標(biāo)志接收到新的數(shù)據(jù)
  36. break;
  37. case0x0c://FIF0中至少有一個(gè)數(shù)據(jù),而且在3.5到4.5個(gè)字符時(shí)間內(nèi)無數(shù)據(jù)進(jìn)(可判斷數(shù)據(jù)接收完畢)
  38. while((U0LSR&0x01)==0x01)
  39. {
  40. Recive_Buffer[UART0Count++]=U0RBR;
  41. }
  42. rcv_new=1;//標(biāo)志接收到新的數(shù)據(jù)
  43. break;
  44. default:
  45. break;
  46. }
  47. VICVectAddr=0x00;//結(jié)束中斷
  48. }


關(guān)鍵詞: 串口FIFO接收數(shù)

評(píng)論


技術(shù)專區(qū)

關(guān)閉