TMS320C54XX系列DSP与PC机间串行通信的实现_DSP论文
关键词:异步串行收发器 多通道缓冲串行接口 dsp mcbsp spi uart
dsp在电子工业领域得到了越来越广泛的应用。在dsp应用系统设计中,必不可少的是各种通信接口的设计。与并行接口相比,串行接口的最大特点是减少了器件引脚数目,降低了接口设计复杂性。串行数据传输可分为同步和异步两种模式。通用pc机的rs-232接口为通用异步接口uart(universal asynchronous receiver and transmitter),而motorola公司的串行外围设备接口spi、队列spi(qspi)、philips公司的内部ic总线(i2c),national公司的微总线(microwire)均为同步串行协议。
目前几乎所有的数字信号处理器都提供了一个或多个串行接口,然而,多数dsp芯片提供的是同步串口。在实际的应用中,也需要dsp能够与外设进行异步串行通信,如与pc机进行串行数据传输就要求dsp系统具uart串行接口。针对这种情况,本文研究并实现了一种简单、可靠的异步串口扩展方法。
1 扩展方案
综合分析dsp应用系统中扩展异步串行接口的方案,其基本方法和优缺点如下:
(1)在dsp的并行总线上扩展uart芯片(如ti公司的tl16c552),用硬件实现异步数据传输。优点是软件实现简单,缺点是在总线上还需扩展其它设备,这样做使目标系统复杂化,增大系统体积。
(2)利用dsp的mcbsp和dma,在不扩展其它硬件的情况下,用软件实现异步数据传输格式。这种方法的优点在于硬件简单,但软件复杂,加大了cpu的负担,所以不适合通信数据量大的场合。
(3)利用dsp的mcbsp同步串行接口,在扩展适当硬件的情况下,将同步数据变换为uart异步数据格式进行传输。这样,就充分利用了dsp的片上资源,使硬件系统尽量简单化。
综合考虑硬件连接和软件编程的方便性,本文采用第三种方案,应用美国maxim公司的max3111串行异步收发器,与dsp的mcbsp口直接连接。硬件上无需任何其它外围器件,同时由于异步数据的发送和接收由max3111以硬件方案实现,所以软件编程需要考虑的也只是dsp与max3111之间的同步数据通信。这样,用最简单的硬件连接和软件编程就能实现同步到异步的串行数据格式转换。
2 spi接口协议及dsp的多通道缓冲串行接口
2.1 spi接口协议
串行外围设备接口(spi)是motorola公司提出的一个同步串行外设接口,允许cpu与各种外围接口器件以串行方式进行通信、交换。它使用4条线:串行时钟线(sck)、主机输入/从机输出线(miso)、主机输出/从机输入线(mosi)、低电平有效的使能信号线(cs)。这样,仅需3~4根数据线和控制线即可扩展具有spi接口的各种i/o器件。其典型的接口示意图如图1所示。
2.2 mcbsp的功能与特点
tms320c54xx系列dsp芯片都具有2~3个高速、全双工、多通道缓冲串行接口(mcbsp),其方便的数据流控制可使其与大多数同步串行外围设备接口。mcbsp是在标准串行接口的基础上对功能进行扩展的,除具有标准串口的功能特点外,其灵活性体现在如下几个方面:
(1)双缓冲区发送,三缓冲区接收,允许连续数据流传输;
(2)可与spi、iom-2、ac97等兼容设备直接接口;
(3)可编程帧同步、数据时钟极性,支持外部移位时钟或内部频率可编程移位时钟;
(4)拥有相互独立的数据发送和接收帧同步脉冲和时钟信号;
(5)多通道发送和接收,最多可达128个通道,速度可为100mbit/s。
2.3 mcbsp的spi方式
tms320c54xx系列dsp芯片的mcbsp串口工作于时钟停止模式时与spi协议兼容。当将mcbsp配置为时钟停止模式时,发送器和接收器在内部得到同步,这时mcbsp可作为spi的主设备或从设备。发送时钟信号(bclkx)对应于spi协议中的串行时钟信号(sck),发送帧同步信号对应于从设备使能信号(cs)。在这种方式下对接收时钟信号(bclkr)和接收帧同步信号(bfsr)将不进行连接,因为它们在内部与bclkx和bfsx相连接。mcbsp工作于spi模式的主机时,与其它spi器件接口如图2所示。
3 max3111通用异步收发器
3.1 max3111功能特点
max3111通用异步收发器是maxim公司专门为小型微处理系统进行最优化设计的uart,它包括一个振荡器和一个可编程波特率发生器;具有一个可屏蔽的中断源;另具有一个8字节的接收fifo(先入先出)缓冲器。它应用spi/microwire接口技术直接与主控制器进行通信,线路简单、体积小,通信速率可达230kbit/s。另外其内部除具有uart之外,还包括两个rs-232电平转换器,这样无需再接入普通的max232进行电平转换,即可应用一个芯片实现微控器(具有spi/microwire接口)与pc机或其它设备之间的异步数据传输。
3.2 对max3111的操作
max3111通过spi接口与主设备进行16位数据的全双工同步通信,即主设备传送16位数据给max3111的同时,也可接收到max3111发送的16位数据。主设备在mosi线上向max3111发送的16位串行数据序列中包括传输格式控制字,如波特率设备、中断屏蔽、奇偶校验位等,同时还有发送的数据字。max3111在miso线上向主设备发送的16位数据序列中除了接收到的数据外,还包括中断标志等状态位。所以通过16位的实时数据传输,主设备可获得max3111工作状态信息,同时对其具有完全控制权利。这样,两个设备的控制、状态、数据的实时通信就保证了数据传输的可靠性和稳定性。
4 dsp与max3111的接口设计
dsp的mcbsp串行接口工作于spi模式时可直接与max3111进行连接,从而实现与rs-232设备进行异步数据传输。此时dsp作为spi协议中的主设备,其接口电路如图3所示。
dsp的发送时钟信号(bclkk)作为max3111的串行时钟输入,发送帧同步脉冲信号(bgsx)作为max3111的片选信号(cs)。bdx与din连接作为发送数据线,bdr与dout连接作为接收数据线。max3111的tx与t1in连接,rx与r1out连接,以便利用其片内的转换器实现uart到rs-232电平的转换。max3111的中断信号(irq)与dsp的外部中断相连。
在spi串行协议中,主设备提供时钟信号并控制数据传输过程。由max3111接口电路时序图(图4)可知,必须设置dsp的mcbsp于适当的方式才能保证与max3111的时序相配合。
max3111要求在数据传输过程中cs信号必须为低电平,在传输完毕后必须为高电平。此信号由mcbsp的bfsx引脚提供,因此必须正确设置dsp的帧脉冲发生器,使之在每个数据包传输期间产生帧同步脉冲,即在数据包传输的第一位变为有效状态,然后保持此状态直到数据包传输结束。
mcbsp的采样率发生器产生适当频率的时钟信号,由bclkx引脚输出,保证主从设备间的同步数据传输。因此必须正确设置dsp的采样率发生器时钟源(clksm)和时钟降频因子(clkgdv)。根据spi传输协议,必须正确设置数据发送延迟时间(xdatdly)。由图4可知max3111要求在sclk变高之间的半个周期开始传输数据。
所以必须为mcbsp选择合适的时钟方案,即设置mcbsp的时钟停止模式。在本应用中采用mcbsp的时钟停止模式2(clkstp=11b,clkxp=0),这样即可保证与max3111的时序相配合。
5 dsp的异步通信软件的设计
考虑到应用系统软件的可移植性和可读性,数据传输软件采用c语言进行编写,这样,可以利用dsp开发软件ccs2.0所提供的dsp/bios中的芯片支持库函数(csl)。csl提供c语言可调用的dsp外围接口库函数,其中包括dma模块、mcbsp模块、timer模块等。应用这些库函数可大大提高程序可读性,缩短软件开发周期。在本文所提到的应用中,主要调用mcbsp模块。数据传输软件主要包括以下几部分。
(1) mcbsp串口初始化
如上所述,在本应用中应将tms320c54xx dsp的mcbsp串行口配置为si模式,以dsp作为主设备。表1给出了应设置的寄存器或寄存器位的值,未涉及的寄存器保持其默认值即可。
表1 mcbsp设置为spi模式时相关寄存器值
位名称 | 位 值 | 描 述 | 所在寄存器 |
clkstp | 11b | 使能mcbsp的时钟贪婪模式,并使其在sclk变高之前半周期开始传输数据 | spcr1 |
clkxp | 0 | 设置bclkx信号的极性 | pcr |
clkxm | 1 | 设置bclkx引脚信号为输出(spi主设备) | pcr |
rwdlen1 | 000~101b | 设置接收数据包的长度(必须与xwdlen1的值相等) | rcr1 |
xwdlen1 | 000~101b | 设计发送数据包的长度(必须与rwdlen1的值相等) | xcr1 |
clksm | 1 | 采样率发生器时钟源cpu时钟 | srgr2 |
clkgdv | 1~255 | 设置采样率发生器的将频因子 | srgr1 |
fsxm | 1 | 设置bfsx引脚信号为输出 | pcr |
fsgm | 0 | 在每个数据包传输期间,bfsx信号都有效 | srgr2 |
fsxp | 1 | 设置bfsx信号为低电平有效 | pcr |
xdatdly | 01b | 提供正确bfsx信号启动时间 | xcr2 |
rdatdly | 01b | 提供正确的bfsx信号启动时间 | rcr2 |
根据表1,调用csl的mcbsp配置库函数即可完成mcbsp的初始化。
mcbsp_handle hport0; /*声明指向mcbsp的句柄*/
mcbsp_config portconfig={ /*定义寄存器设置结构*/
0x1800, /*设置串口控制寄存器1的值*/
0x0000, /*设置串口控制寄存器2的值*/
0x0040, /*设置接收控制寄存器的值*/
…
};
hport0=mcbsp_open(0,mcbsp_open_reset);/*打开第一个mcbsp串口*/
mcbsp_config (hport0,&portconfig);/*按结构设置mcbsp的各寄存器*/
(2)max3111工作模式及波特率设置
在进行通信之前,dsp必须首先根据命令序列格式向max3111写入配置命令字,之后才能进行正确的数据传输,如8位数据位、一位停止位、无奇偶校验位、波特率为115200、使能接收和发送中断的异步数据传输。dsp对max3111进行配置的简要过程为:
…
mcbsp_start(hport0, /*mcbsp开始数据传输*/
mcbsp_srgr_start|mcbsp_srgr_framesync
|mcbsp_rcv_start|mcbsp_xmit_start,0x200
);
while(!mcbsp_xrdy(hport0));/*等待发送寄存器为空*/
mcbsp_write16(hport0,0x6e0b); /*向ma3111写入配置命令字*/
…
(3)中断服务程序
在进行中断方式数据传输时,需要注意的是:虽然dsp的mcbsp有自身的发送和接收中断,但由于mcbsp与max3111之间的同步串行数据传输速率高于max3111将数据以一定波特率(最高230kbps)异步发送的速率,因此如果应用mcbsp的发送中断,将造成发送数据的丢失。同时,在spi协议中,数据的传输是由spi主设备发起的,所以在spi方式下的mcbsp并不能产生接收中断。因此,本方案应用的关键之一是将max3111的irq中断信号连接至dsp的一外部中断,以实现中断方式下可靠、正确的数据传输。
针对现有的多数据数字信号处理器(dsp)芯片上不提供异步串行收发器(uart)接口,而只有同步串行接口的情况。本文通过简单的硬件电路将同步接口转换为异步串行接口,充分利用了dsp的在片硬件资料,很好地解决了dsp的异步串口扩展问题。此方法在工程实践中已经得到应用。实践证明,在各种波特率下(最高可为230.4kbps),其查询和中断方式数据传输正确、可靠,各元件工作正常 ,并且在此硬件连接的基础上,利用dsp的dma功能进行串行数据接收及发送收到了良好效果,进一步提升了应用系统的性能。