《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 业界动态 > TMS320C32扩展异步串口的方法

TMS320C32扩展异步串口的方法

2008-09-05
作者:胡 安 肖 飞1 张波涛2

    摘 要: 介绍了TMS320C32 DSP实现异步串行通信接口的三种" title="三种">三种方法:软件模拟实现、硬件实现、专用协议芯片实现。给出了具体实现的硬件接口和软件编程。在接口的第二种和第三种实现方法中,都使用了FPGA实现逻辑接口。
    关键词: 数字信号处理  异步串行接口  现场可编程逻辑阵列  电气传动控制

 

    高速数字信号处理器(DSP)在现代工业控制中,特别是电气传动控制中的应用非常广泛。大量文献介绍的应用于电气传动控制的DSP使用的是TI公司的TMS320系列DSP芯片,这其中又以TMX320C3X和TMS320F24X为主流应用产品。TMS320C32(以下简称为C32)是TMS320C3X系列产品中应用比较多的一种。在工业控制中,常常需要使用上位PC机来控制底层的DSP芯片,一般采用异步串行通信协议,使用RS-232或485来实现。C32自身带有的串口" title="串口">串口为同步串口,为了实现C32和PC机之间的串行口通信,必须扩展C32的全双工异步串口(UART)功能。
    C32实现UART接口的方法有三种:
    (1)使用C32的现有资源模拟串行口的功能;
    (2)使用可编程芯片(例如FPGA)实现同步和异步协议的转换;
    (3)使用专用的异步通信器件(ACE)实现,例如PC机上使用16C550系列实现UART。
1 使用C32的现有资源模拟串行口的功能[1]
    通过使用两个通用I/O引脚、两个定时器和一个外部中断,可以用软件模拟UART的功能。使用中断实现软件模拟UART采用的通讯格式为:波特率9600bps、8个数据位、一个停止位、无奇偶校验位。这种实现方法由Ted Fried高级计算机通信公司提供。
1.1 硬 件
    图1为硬件连接线图。接收线同时接到和XF1引脚。起始位数据的下降沿触发外部中断。传输线接到XF0引脚,使用上拉电阻输出。

 


1.2 软 件
1.2.1 接收数据

    根据UART协议,接收到的第一个数据是起始位。在软件中,起始位会触发一个外部中断。在的中断服务程序例程" title="例程">例程RXINT0中,定时器0首先被装入一个时间常数,这个时间常数的定时时间等于半个数据位的延迟时间;然后装入定时器0的中断向量表,并允许定时器中断0,程序返回主程序" title="主程序">主程序,等待定时器0中断。如果定时器0触发中断,RX-TMR-INT(接收定时器中断)例程则开始执行接收工作。第一个定时时间为半个数据位的时间,CPU在接收位的中间时刻采样XF1的数据,并且验证接收到的数据是否为一个低电平。如果验证正确,表示接收到的数据为一个起始位,就可以接收数据" title="接收数据">接收数据了。在接收数据时,重新装载定时器0的定时值为一个数据位的时间并且启动定时器0,程序返回主程序,等待定时器0中断的到来。
    在随后的定时器0的服务程序中,实现了在接收位的中间时刻采样接收线的状态来得到实际数据。将这些接收到的数据移位到一个存储器单元中。在第9次中断时,对接收到的停止位进行验证。如果正确,软件执行一个陷阱中断,程序返回到主程序。如果不正确,调用BAD_STOP_BIT子程序进行相应的错误处理。接收数据被处理完后,重新允许外部中断0,等待下一个起始位的到来。
1.2.2 发送数据
    发送数据例程开始于主程序装载一个数据到指定的存储器中,并且调用TX_MAIN例程。在这个例程中,状态定时器1的定时时间为一个数据位的时间,重新设置传输计数器的值,设置起始位,并且允许定时器1中断,返回主程序,等待定时器1中断的到来。只有传输计数器的值为0时,主程序才会允许重新装载下一个需要传输的数据到指定的存储器中。在定时器1的中断子程序TX_INT中,程序将要传输的数据(包含起始位、数据位和停止位)从XF0引脚上移位出去,直到传输计数器的值为0。
    具体的程序代码请见参考文献[1]。
2 使用FPGA实现异步和同步串行接口间的协议转换
    有许多应用需要使用硬件UART。使用FPGA可以将同步串行口协议转换为异步串行口通信协议。具体的逻辑框图如图2所示。

 


    系统使用的时钟为25MHz,FPGA中使用的时钟来源于C32的H3引脚。通信协议为:波特率9600bps、一个起始位、一个停止位、没有奇偶检验位。图3所示为传输电路。

 


    通过设置传输定时器的定时值可以得到需要的9600bps的波特率。传输端口被配置为爆发传输模式,它可以产生UART的一个起始位。8个数据位之后的停止位可通过电路来实现。图4为接收电路图。

 


    当电路检测到起始位时,接收电路开始工作。起始位的逻辑值为0。延迟电路在起始位的下降沿被激活。延迟电路的设置使数据的采样发生在每个数据位的中间时刻,它提高了系统抗噪声的能力。
3 使用ACE实现UART
    微机上最早使用的ACE是8250,16C550是8250的功能升级器件。器件在结构上的最大差别是16C550增加了接收和发送FIFO,因此器件能够处于交替工作模式,减轻CPU额外的软件负担。在这种模式下,无论是接收还是发送,在可访问的缓冲寄存器和不可访问的移位寄存器之间都增加了16字节的FIFO(包含放在接收FIFO中的3位错误数据字节),可以使系统负担最小且系统效率最高,而且所有的逻辑功能都在16C550芯片上完成。TL16C550A有两个管脚功能(N封装系列中引脚24和29,FN封装系列中的27和32)已经被改变,使用这两个信号可以允许信号使用DMA的方式来传输。
    TL16C550的主要功能为:TL16C550在接收外部器件或MODEM的数据时,完成串行到并行的转换;在接收CPU的数据时,完成数据的并行到串行的变换,并进行串行发送。在ACE器件工作的任何状态下,CPU可以读和通报ACE器件的状态。通报的状态信息包括:传输操作正在进行过程中、操作状态、遇到了何种错误等。TL16C550的内部包含一个可编程的波特率发生器,波特率为16×内部输入时钟频率,此内部输入时钟频率由输入的参考基准振荡器分频(由波特率分频寄存器的值决定)得到。TL16C550具有完全的MODEM控制能力。包含一个处理器中断系统,根据用户的专用需要而设计,在处理通讯连接时,计算量是最小的。TL16C550有两种封装形式:N PACKAGE(40脚)和FN PACKAGE(44脚)。TL16C550的管脚按功能可以分为:外部时钟输入及波特率控制信号;数据和地址总线;片选及读写控制信号;MODEM控制信号;复位及中断控制信号。
    如果C32要和PC机通讯,可使用TL16C550完成串行协议的转换。TL16C550的输出接口要和一个电平转换芯片连接,用于和PC机的串行通讯接口互联。完整的接口示意图如图5所示。

 


    其中的MAX232可以使用MAXIM公司的MAX3238来实现。
    接口电路分为两大部分:DSP C32和串行通讯芯片TL16C550之间的接口;串行通讯芯片TL16C550和PC机之间的接口。完整的电路原理图如图6所示。

 


    接口逻辑可以使用集成的CPLD实现,本系统中使用的是ALTERA公司的EPM7128SLC184-10。它将芯片TL16C550作为DSP C32的一个外设端口进行寻址。
    相应的接口逻辑使用AHDL语言描述,具体如下[3]:
    subdesign uartcon 
    (
       dspa[23..12] :input;  %DSP C32 的高位地址线输入信号%
       ios          :input;  %DSP C32的外设端口选择信号%
       dsprw        :input;  %DSP C32的read/write signal %
       resetin      :input;  %系统的复位信号输入端%
       dspint1      :output; %DSP C32的中断1信号输入端 %
       tlmr         :output; %TL16C550A的复位输入端%
       tlintrpt     :input;  %TL16C550A的中断输出端%
       tlcs         :output; %TL16C550A的片选端%
       tlrd         :output; %TL16C550A的读允许端口%
       tlwr         :output; %TL16C550A的写允许端口%
         )
     begin
       defaults
           tlcs=1;
       end defaults;
       tlmr=!resetin;       %TL16C550A的复位输入端的信号定义和通常的相反%
       int1=!tlintrpt;      %DSP C32的中断输入端为低电平有效 %
           TABLE
           dspa[23..12],ios,dsprw=>t;cs,tlrd,tlwr;
           H″818″, 0,  1=>0, 0, 1;
           H″818″, 0,  0=>0, 1, 0;
       END TABLE;
    end
    TL16C550A一共使用8个地址对内部寄存器进行访问和控制。相对DSP C32系统而言,如果使用了上面的译码逻辑电路,则占用的8个地址为:0X818000~0X818007。
    TL16C550A串行接口寄存器的寻址表如表1所示。

 


    在程序中,使用逻辑地址0X818000~0X818007对TL16C550A的各个寄存器进行寻址就可以了。
    本文介绍的三种实现C32异步串行口的方法,前两种方法使用不是非常方便,而且占用了大量的C32系统资源,一般都使用第三种方法来实现C32和PC机之间的通信。
    使用TL16C550实现DSP和PC机的通信,接口方便、控制简单、编程灵活,试验证明它是非常简便可靠的实现方法。
参考文献
1 TMS320C3X General-purpose Applications.Texax Instruments,1998
2 TMS320C3X Users Guide.Texas Instruments, 1992
3 宋万杰.CPLD 技术及其应用.西安:西安电子科技大学出版社,2001
4 TL16C550 Data Sheet.Texas Instruments,1996
5 MAX3238 Data Sheet.Maxim Instruments, 2002

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。