|
void Init_Uart0(void)<br />{<br /> #if(UART0)<br /> {<br /> uint16 Fdiv0,parity0;<br /> Fdiv0=parity0=0;<br /> PINSEL0=PINSEL0|(Uart0_Pin_Set<<Uart0_Pin_Sel); //设置P0.0和P0.1为TXD0和RXD0<br /> U0LCR=0x80; //线控制寄存器,b7=1允许设置波特率<br /> Fdiv0=(Fpclk1/16)/Uart0_baud; //波特率时钟必须是波特率的16倍<br /> U0DLM=Fdiv0/256; //除数锁存MSB寄存器<br /> U0DLL=Fdiv0%256; //除数锁存LSB寄存器,与U0DLM一起存放波特率时钟的VPB时钟16位分频值<br /> Fdiv0=Uart0_datab-5; //设置数据位<br /> if(Uart0_stopb==2)Fdiv0=Fdiv0|0x04; //判断是否是2个停止位<br /> parity0=0;<br /> if(Uart0_parity!=0) //如果有校验<br /> {<br /> parity0=Uart0_parity-1;<br /> Fdiv0=Fdiv0|0x08; //允许校验<br /> }<br /> Fdiv0=Fdiv0|(parity0<<4); //设置奇偶校验<br /> U0LCR=Fdiv0;<br /> U0FCR=0x01; //FIFO控制寄存器,b0=1使能FIFO,b7b6=00使接收FIFO在收到1个字节的时候就激活中断<br /> U0IER=0x03; //中断允许寄存器,b0=1收中断允许,b1=1发中断允许<br /> VICVectCntl3=Enable_Uart0|Int_uart0;//向量控制寄存器1,b5=1向量IRQ使能,0x06是UART0中断通道号,UART0的优先级是3<br /> VICVectAddr3=(uint32)IRQ_Uart0; //向量地址寄存器,存放UART0中断服务程序入口地址<br /> VICIntEnable=VICIntEnable|(1<<Int_uart0);//中断允许寄存器,每一位对应一个中断源,0x06允许UART0中断,写入0无效<br /> }<br /> #endif<br />}
|