改進(jìn)利用串口的FIFO接收數(shù)據(jù)
- /****************************************************************************
- #*名稱:UART_Initt
- #*功能:初始化UART0中斷以及中斷向量表的配置
- #*入口參數(shù):無
- #*出口參數(shù):無
- #****************************************************************************/
- voidUART_Init(void)
- {
- uint16Fdiv;
- U0LCR=0x83;//相關(guān)校驗(yàn)位、數(shù)據(jù)長(zhǎng)度等的設(shè)置,DLAB=1,可設(shè)置波特率
- Fdiv=(Fpclk/16)/BAUD;
- U0DLM=Fdiv/256;
- U0DLL=Fdiv%256;
- U0LCR=0X03;
- U0IER=0X01;//只使能接收中斷
- U0FCR=0x81;//使能發(fā)送和接收的FIFO,8字節(jié)觸發(fā)
- IRQEnable();//使能IRQ中斷(這一步注意,下午調(diào)試了好久,唉)
- VICIntSelect=0x00000000;//設(shè)置所有通道為IRQ中斷
- VICVectCntl0=0x20|6;//UART0通道分配到IRQslot0,優(yōu)先級(jí)最高
- VICVectAddr0=(uint32)UART0_IRQ;//設(shè)置UART0中斷程序地址
- VICIntEnable=0x40;//使能UART0中斷
- }
- void__irqUART0_IRQ(void)
- {
- intcount;
- switch(U0IIR&0x0F)
- {
- case0x02://產(chǎn)生發(fā)送中斷
- break;
- case0x04://FIFO接收數(shù)據(jù)到達(dá)8個(gè)字節(jié)
- for(count=0;count<8;count++)
- {
- Recive_Buffer[UART0Count++]=U0RBR;//保存接收到的數(shù)據(jù)
- }
- rcv_new=1;//標(biāo)志接收到新的數(shù)據(jù)
- break;
- case0x0c://FIF0中至少有一個(gè)數(shù)據(jù),而且在3.5到4.5個(gè)字符時(shí)間內(nèi)無數(shù)據(jù)進(jìn)(可判斷數(shù)據(jù)接收完畢)
- while((U0LSR&0x01)==0x01)
- {
- Recive_Buffer[UART0Count++]=U0RBR;
- }
- rcv_new=1;//標(biāo)志接收到新的數(shù)據(jù)
- break;
- default:
- break;
- }
- VICVectAddr=0x00;//結(jié)束中斷
- }
評(píng)論