"); //-->
图1 UART接收数据包的帧格式
接收完一帧数据后,需要对数据解码,收于DSP发送和接收时钟是UART串口时钟频率的16位,因此每个UART数据位对应于DSP中1个16位字(停止位对应8位字)。在McBSP接收寄存器中将接收帧设置为2相,第1相16位字,字长为RxPKTBITS(起始位+数据位+校验位),第2相为8位字,对应于停止位字数。此外,接收帧延时值应该设置为1位。
3.2 McBSP时钟采样率设置
McBSP与UART通信时,McBSP接收到一帧的帧同步信号后,该帧期间之后出现的帧同步信号将被忽略。为了获得最大数据流量,一帧数据发送结束时,其停止位后紧接着为起始位,帧同步信号的检测依赖于停止位到起始位的下降沿。为了正确检测到帧同步信号,高电平应该至少保持一个时钟周期以上时间。
理想情况下,串口时钟信号边沿与数据位边沿精确对应,此时,每个数据位对应16倍时钟周期。起始位和串口时钟的下降沿偏最小,如图3所示。
图2 McBSP串口时钟与UART时钟精确同步时的时序
正常通信时,McBSP的帧同步信号与UART串口的时钟之间会有一定的偏差,如图所示。
图3 McbSP串口时钟与UART时钟存在偏差时的时序
存在偏差时,为保证McBSP能检测到接收到信号的下降沿,McBSP的串口采样时钟频率必须准确设置。其设置方法如公式1、2所示。其中,DIV是McBSP寄存中串口采样时钟分频值,DSPCLK是DSP的CPU时钟频率,baudrate为通信波特率。
(1)
(2)
通信波特率为19200,DSP时钟频率为75MHz,接收数据包为10位(1位起始位,8位数据位,无校验,1位停止位:PKTBITS=10,RxPKTBITS=9.5),根据公式1计算得DIV ,由于分频值DIV为整数,因此取DIV 。根据公式2计算得DIV ,取整后得DIV 。取DIV最佳值为244。TMS320VC55x DSP以常用波特率通信时的分频值如表1所示。
表1 常用波特率下TMS320VC55x的McBSP串口DIV值
|
75-MHz DSP Clock |
100-MHz DSP Clock |
||||
Baud Rate |
Divisor Minimum |
Exact Divisor |
Divisor Maximum |
Divisor Minimum |
Exact Divisor |
Divisor Maximum |
19200 |
240 |
244.14 |
248 |
320 |
325.52 |
331 |
38400 |
120 |
122.07 |
124 |
160 |
162.76 |
165 |
57600 |
80 |
81.68 |
82 |
107 |
108.51 |
110 |
115200 |
40 |
40.69 |
41 |
54 |
54.25 |
55 |
3.2 DMA设置
UART通信时,DSP发送和接收到的数据存储在数据存储器中,为了实现DSP的高速处理,减少DSP响应McBSP数据寄存器中断的次数。发送和接收数据与McBSP发送和接收寄存器DXR和DRR之间的数据传输通过DMA通道完成。这里以使用DMA通道4和通道5为例,其中,DMA通道4作为数据接收通道,DMA通道5做为数据发送通道。将通道4和通道5的同步事件分别设置为McBSP串口接收事件和串口发送事件,DMA通道4的源地址为McBSP的接收寄存器DRR地址,目的地址为数据存储器中存放接收数据的变量地址;DMA通道5的源地址为数据存储器中待发的数据,目的地址为McBSP的DXR寄存器地址。每当McBSP接收到数据时,会触发DMA通道4将接收到的数据拷贝到DSP数据存储器的相应置,同时目的地址指针自动加1;发送数据时,DMA通道5将待发送数据拷贝到DXR,将数据依次发出。
发送数据时,待发字符被打包成适于UART接收的数据格式,以发送16进制无符号数0xAA为例,首先发送起始位,然后是数据位最低位,最后发送停止位。该数值在数据存储器中按地址由低到高的存放格式为:0x0000,0x0000,0xFFFF,0x0000,0xFFFF,0x0000,0xFFFF,0x0000,0xFFFF,0xFFFF。
接收到数据后,取过采样到的每个16位二进制数据字的中间四位,若中间四位中1的个数不小于3,则表示收到当前的UART数据位值为1;若中间四位中0的个数不小于3,则表示收到当前的UART数据位值为0。否则认为数据传输出错。
4 程序设计
在McBSP和DMA寄存器设置正确的基础上,利用TI公司提供的Code Composer Studio集成开发环境编写了UART串口通信软件,软件开发中使用了CSL(片上支持库),使整个开发过程快速、直观、具有很强的可读性。程序流程如图所示:
图4 TMS320VC55x UART程序流程图
5 实验分析
硬件和软件设计完成后,进行了测试实验,实验上位机为PC机,DSP处理器为TI公司的TMS320VC5509A,通信波特率为19200,DSP外部晶振频率为20MHz,CPU时钟频率为100MHz,UART数据格式为1位起始位,8位数据位,1位停止位,无校验。多次实验结果表明数据发收准确,无误码现象发生。
6 结论
DSP系统直接与外部全双工异步串行设备的通信时,通过正确的使用DSP上的McBSP和DMA通道,利用16倍过采样原理准确的计算McBSP通信接口的采样值和配置相关寄存器,能够实现DSP与外部异步设备的可靠通信。与传统的采用串并转换芯片的实现方法相比,具有更低的成本更简单的外部电路。本文中的程序针对TI公司的TMS320VC5509x DSP芯片编写,通过对少数寄存器的修改,该程序可直接应用于TI公司的C5000和C6000系列DSP芯片上。
本文作者创新点:提出了一种直接利用DSP的McBSP接口和DMA通道实现UART的方法,具有实现成本低,硬件电路简单,移植性强等特点。
参考文献:
1 TMS320VC5509A Fixed-Point Digital Signal Processor Data Manual. Texas Instruments
2 TMS320VC5501/5502/5503/5507/5509/5510 DSP Multichannel Buffered Serial Port (McBSP) Reference Guide. Texas Instruments
3 Implementing a Software UART on the TMS320C54x with the McBSP and DMA. Texas Instruments
4 TMS320VC5503/5507/5509/5510 DSP Direct Memory Access (DMA) Controller Reference Guide
5 TMS320C55x Chip Support Library API Reference Guide. Texas Instruments
6 TMS320C6000 McBSP: UART. Texas Instruments
7 安颖,刘丽娜.基于DSP的高速信号采集与处理系统的设计【J】.微计算机信息,2005,1:57-58。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。