+ UART寄存器介绍及程序
1、UART寄存器
(1)、FIFO控制寄存器(FCR)
RXFIFTL:接收FIFO中断触发(当FIFO中的数据量刚到达所要求(trigger level)的时候会产生中断);
DMAMODE1:如果FIFO使能的话此位可以使能DMA模式。
TXCLR:发送FIFO清除。
RXCLR:接收FIFO清除。
FIFOEN:FIFO模式使能。
(2)、队列控制寄存器(LCR)
DLAB:分配锁存访问位。
BC:暂停控制。
SP:强制奇偶校验。
EPS:奇偶校验选择。
PEN:校验使能。
STB:设置产生停止位。
WLS:发送接收字长度,当STB为0,WLS决定停止位的长度。
(3)、模式控制寄存器
AFE:自动流控使能。
LOOP:回环模式使能。
(4)、分频锁存寄存器(DLL and DLH)
DLL和DHH分别是分频值得高位和低位。
分配值=UART模块输入时钟频率/波特率/16;
或者:分配值=UART模块输入时钟频率/波特率/13;
(5)、电源和仿真管理寄存器(PWREMU_MGMT)
SOFT、FREE:特殊的仿真位。高级语言调试程序中出现一个断点时,该 仿真位决定定时器的状态。如果FREE位设为1,则当遇到一个断点时,定时器继续运行(即自由运行),在这种情况下,SOFT被忽略。但是,如果FREE为0,则SOFT有效。在此情况下,如果SOFT=0,则定时器停止,下一次TIM的值递减;如果SOFT=1,则当TIM减到0,定时器停止工作。
UTRST:UART发送复位。
URRST:UART接收复位。
(6)、模式定义寄存器(MDR)
OSM_SEL:0(16倍过采样);1(13倍过采样)
2、UART例程
//说明:本例程包含UART发送、接收、回环模式三个功能,可结合串口调试助手查看结果。
extern void setup_UART()//串口0作为接收控制参数的通道
{
baud_rate=115200;
// put xmtr/rcvr in reset.
uartRegs->PWREMU_MGMT = 0;
// set baud rate...assumes default 16x oversampling, the clock frequenceset 210MHz.
uartRegs->LCR = ((CSL_UART_LCR_DLAB_ENABLE DLH = (divisor & 0x0000FF00) >> 8;
uartRegs->DLL = divisor & 0x000000FF;
uartRegs->LCR = ((CSL_UART_LCR_DLAB_DISABLE FCR =(CSL_UART_FCR_RXCLR_CLR IER= (
// (CSL_UART_IER_ERBI_ENABLE LCR = ((CSL_UART_LCR_DLAB_DISABLE IER= (
(CSL_UART_IER_ERBI_DISABLE MCR = ((CSL_UART_MCR_AFE_DISABLE MDR =((CSL_UART_MDR_OSM_SEL_16XOVERSAMPLING PWREMU_MGMT= ((CSL_UART_PWREMU_MGMT_UTRST_ENABLE LSR,UART_LSR_TEMT);
while(CSL_FEXT(uartRegs->LSR,UART_LSR_TEMT)==0);
(uartRegs->THR)=((*SRC++));
while(CSL_FEXT(uartRegs->LSR,UART_LSR_DR)==0);
statu1=CSL_FEXT(uartRegs->LSR,UART_LSR_DR);
*DST++=(uartRegs->RBR);
}
}
void uart_Transfer(char *SRC,int SRC_len) //发送模式
{
int jj;
for(jj=0;jj LSR,UART_LSR_TEMT)==0);
(uartRegs->THR)=((*SRC++));
}
}
void uart_Resiver(char *DST,int DST_len) //接收模式
{
int jj;
for(jj=0;jj LSR,UART_LSR_DR)==0);
*DST++=(uartRegs->RBR);
}
}
main()
{
char SRC_uart[34] = "TronlongUART1 Application......\n\r";
char DST_uart[34];
setup_UART();//配置串口
uart_Transfer(&SRC_uart[0],34); //发送
uart_Resiver(&DST_uart[0],34); //接收
}