您的位置:首页 > 其它

创龙TMS320C6748开发板———UART寄存器介绍及程序

2017-01-13 21:30 453 查看
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<<CSL_UART_LCR_DLAB_SHIFT));//锁存为配置波特率模式

divisor = 210000000 / (baud_rate * 16);

uartRegs->DLH = (divisor & 0x0000FF00) >> 8;

uartRegs->DLL = divisor & 0x000000FF;

uartRegs->LCR = ((CSL_UART_LCR_DLAB_DISABLE<<CSL_UART_LCR_DLAB_SHIFT));//锁存为配置THR、RBR模式

// enable xmtr/rcvr fifos.

uartRegs->FCR =(CSL_UART_FCR_RXCLR_CLR<<CSL_UART_FCR_RXCLR_SHIFT

| CSL_UART_FCR_TXCLR_CLR<<CSL_UART_FCR_TXCLR_SHIFT

|CSL_UART_FCR_FIFOEN_DISABLE<<CSL_UART_FCR_FIFOEN_SHIFT

);

// disable interrupts, flow control, and loop back.

// uart->IER= (

// (CSL_UART_IER_ERBI_ENABLE<<CSL_UART_IER_ERBI_SHIFT)|

// (CSL_UART_IER_ELSI_ENABLE <<CSL_UART_IER_ELSI_SHIFT)

// );

// config LCR for no parity, one stop bit, 8 data bits, no flowcontrol.

uartRegs->LCR = ((CSL_UART_LCR_DLAB_DISABLE<<CSL_UART_LCR_DLAB_SHIFT)//配置为THR、RBR模式

|(CSL_UART_LCR_SP_DISABLE<<CSL_UART_LCR_SP_SHIFT)//禁止强制奇偶校验

|(CSL_UART_LCR_EPS_ODD<<CSL_UART_LCR_EPS_SHIFT)//选择奇校验

|(CSL_UART_LCR_PEN_ENABLE<<CSL_UART_LCR_PEN_SHIFT)//禁止奇偶校验

|(CSL_UART_LCR_STB_1BIT<<CSL_UART_LCR_STB_SHIFT)//停止位1位

|(CSL_UART_LCR_WLS_8BITS<<CSL_UART_LCR_WLS_SHIFT)//字长为8位

);

uartRegs->IER= (

(CSL_UART_IER_ERBI_DISABLE<<CSL_UART_IER_ERBI_SHIFT)

);

uartRegs->MCR = ((CSL_UART_MCR_AFE_DISABLE<<CSL_UART_MCR_AFE_SHIFT)

// |(CSL_UART_MCR_LOOP_ENABLE<<CSL_UART_MCR_LOOP_SHIFT)//回环模式

|(CSL_UART_MCR_RTS_ENABLE<<CSL_UART_MCR_RTS_SHIFT));

uartRegs->MDR =((CSL_UART_MDR_OSM_SEL_16XOVERSAMPLING<<CSL_UART_MDR_OSM_SEL_SHIFT));//16倍采样

// take xmtr/rcvr out of reset.

uartRegs->PWREMU_MGMT= ((CSL_UART_PWREMU_MGMT_UTRST_ENABLE<<CSL_UART_PWREMU_MGMT_UTRST_SHIFT)|//发送器使能

(CSL_UART_PWREMU_MGMT_URRST_ENABLE<<CSL_UART_PWREMU_MGMT_URRST_SHIFT)|//接收器使能

(CSL_UART_PWREMU_MGMT_FREE_RUN <<CSL_UART_PWREMU_MGMT_FREE_SHIFT)//自由运行

);

}

void uart_Loopback(char *SRC,char *DST)
//回环模式

{

int jj;

for(jj=0;jj<34;jj++)

{

statu0=CSL_FEXT(uartRegs->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<SRC_len;jj++)

{

while(CSL_FEXT(uartRegs->LSR,UART_LSR_TEMT)==0);

(uartRegs->THR)=((*SRC++));

}

}

void uart_Resiver(char *DST,int DST_len)
//接收模式

{

int jj;

for(jj=0;jj<34;jj++)

{

while(CSL_FEXT(uartRegs->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); //接收

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: