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

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

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

通过设置传输定时器的定时值可以得到需要的9600bps的波特率。传输端口被配置为爆发传输模式,它可以产生UART的一个起始位。8个数据位之后的停止位可通过电路来实现。图4为接收电路图。
当电路检测到起始位时,接收电路开始工作。起始位的逻辑擅为0。延迟电路在起始位的下降沿被激活。延迟电路的设置使数据的采样发生在每个数据位的中间时刻,它提高了系统抗噪声的能力。

