接口寄存器说明
UARTx_THR UART :传输数据寄存器
UARTx_RBR UART :接收缓存寄存器
UARTx_DLL UART :波特率配置低8 位寄存器
UARTx_DLH UART :波特率配置高8 位寄存器
UARTx_IER UART :中断使能寄存器
UARTx_IIR UART :中断识别寄存器
UARTx_LCR UART :线路控制寄存器
UARTx_MCR UART :调制控制寄存器
UARTx_LSR UART :线路状态寄存器
UARTx_SCR UART :暂存寄存器
UARTx_GCTL UART :全局控制寄存器
例子代码分析
代码请参考板卡驱动代码的 RS232 程序。
div = SYSCLK/rate/16; //计算波特率配置值
*pUART0_GCTL=0x0009; //配置UART 工作模式
*pUART0_LCR=0x0080;// DLAB=1 允许访问DLL 和DLH
*pUART0_DLL=div;
*pUART0_DLH=div>>8; //DLL DLH 分别赋值
*pUART0_LCR=0x0003;// 允许访问 RBR THR 和IER
*pUART0_IER=0x0001;// 接收中断允许
*pSIC_IAR0 = 0xffffffff;
*pSIC_IAR1 = 0xffffffff; // UART 中断等级定义
*pSIC_IAR2 = 0xf3ffffff;
register_handler(ik_ivg10, UART0_ISR); //注册中断
*pSIC_IMASK0 = 0x00400000; //使能中断
*pUART0_THR=TXbuf[i]; //向UART0 传输数据寄存器写数据
while(!(*pUART_LSR&0x0020)); //等待传输完成
EX_INTERRUPT_HANDLER(UART0_ISR) //UART 接收数据中断函数
{
if(*pUART0_LSR&DR) //判断是否有新的数据。
{
if(cont>512) //防止buff 溢出,测试代码,将接收到的数据重复写入512 字节的buff
cont = 0;
RXbuf[cont]=*pUART0_RBR; //读取数据
cont++;
}
}