创龙TMS320C6748开发板———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<<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 Applica tion......\n\r";
char DST_uart[34];
setup_UART();//配置串口
uart_Transfer(&SRC_uart[0],34); //发送
uart_Resiver(&DST_uart[0],34); //接收
}
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值