您的位置:控制工程论坛网论坛 » 嵌入式系统 » 一种基于TMS320C55x DSP的UART通信设计

junhong07

junhong07   |   当前状态:在线

总积分:7915  2024年可用积分:1

注册时间: 2008-01-15

最后登录时间: 2019-06-23

空间 发短消息加为好友

一种基于TMS320C55x DSP的UART通信设计

junhong07  发表于 2009/10/16 23:04:44      1206 查看 0 回复  [上一主题]  [下一主题]

手机阅读

摘要:全双工异步串行通信在TMS320C55xDSP上的通常实现方式是利用DSP的McBSP接口加外接芯片实现,这种设计方法增加了实现UART的硬件成本和电路设计复杂度。提出了一种直接利用DSP的MCBSP接口和DMA通道实现UART的方法,给出了使用C语言和CSL的编程方法。与传统实现方法相比,具有实现成本低,硬件电路简单,移植性强等特点,稍加修改可应用于C5000和C6000各系列芯片中。 
关键词:DSP;全双工异步串行通信;多通道缓冲串口;DMA ;过采样

1 引言:
MS320C55x数字信号处理器通过多通道缓冲串口(McBSP)提供了与外设的多种同步串行通信方式。然而,由于DSP中串行通信由数据信号、帧同步信号和时钟3种信号配合实现,其中帧同步信号和数据信号由不同的数据线传输。而异步串行通信则在一根传输线上实现数据发送或接收,且不需要专门的时钟信号线。因此DSP与异步设备的接口,如UART通信实现相对复杂,需要对McBSP的相关寄存器进行正确初始化。DSP中实现全双工异步通信的通常做法是使用专用的串行接口芯片,如TL16C550,这种设计方法编程相对简单,但增加了设计成本和电路复杂度。本文介绍了一种TMS320C55x DSP芯片利用McBSP和DMA直接实现UART的方法,基于该方法实现的DSP异步串行通信模块已成功应用于控制偏振图像采集处理的DSP硬件设备中。 www.51kaifa.com/
2 UART在DSP上的实现
异步串行通信要求DSP能够模拟和检测到UART的帧信号。由于DSP串口是同步串口,而且DSP时钟为高速时钟,经分频或倍频后无法保证与UART的异步串行时钟精确同步。DSP的帧同步信号无法与UART的帧信号同步,造成串行通信信号中信号位的偏移。最好的解决方法是减小偏移和对接收的数据流进行过采样,本文采用了对UART信号的16倍过采样。www.51kaifa.com/
2.1 McBSP设置
    DSP的McBSP通过3种信号实现同步通信:数据、帧同步和时钟。异步通信发送和接收各在一条线上进行,具有自己的帧时序。
    UART的通信时钟由使用的通信波特率(每秒传输的数据位个数)决定,通常为2400,9600,19200等。DSP与UART异步通信时,由于DSP的内部时钟频率通常都不是UART时钟频率的整数位,因而会造成双方通信时数据位的偏移,为了尽量减小这种偏移,McBSP的串口时钟需要正确的设置时钟频率以达到与UART波特率相匹配。
数据包(PKTBITS)由起始位、数据位、奇偶校验位和停止位组成,起始位为1位,停止位通常为1,1.5,2位,数据数通常为8位,如何使用校验,那么数据包还包括1位校验位。以上数据位中,每1位都被DSP以16倍波特率的时钟频率过采样。
发送时,为保证UART能收到半个停止位,需要将DSP的McBSP发送端口设置为2相的数据帧。第1相为16位的数据字,第2相为8位的数据字。那么第1相数据长度为(起始位+数据位+校验位)个字,第2相长度为停止位的字长。发送时的总帧长(TxPKTBITS)为这两相的总字长。接收数据包格式与发送相似,其结构如图2所示。DSP的串口发送引脚与外部串口设备的接收引脚相连,不使用FSX引脚和CLKX引脚。
接收时,McBSP通过接收帧同步信号引脚(FSR)检测数据的到来,根据帧同步信号的不同,帧同步信号可配置成上升沿触发或下降沿触发,由于UART的起始位为低电平,因此使用下降沿触发。将UART发送数据信号与McBSP的数据接收引脚DR和FSR相连,实现用UART的发送信号触发McBSP的接收帧同步信号。在McBSP接收一帧数据期间,为了防止下降沿再次触发一帧数据接收,McBSP应该设置为接收数据包期间忽略帧同步信号。


图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楼 0 0 回复