数字信号处理器自20世纪80年代诞生以来,在短短的二十几年里得到了飞速发展,在通信、航空航天、医疗、工业控制方面得到了广泛应用,美国德州仪器公司是DSP研发和生产的领先者,也是世界上最大的DSP供应商。TMS320F2812是TI公司的一款用于控制的高性能、多功能、高性价比的32位定点DSP芯片,最高可以工作在150MHz主频下,片内集成了众多资源。目前,串行通信在各行各业发挥着重要作用,它可以将各种数据发送给计算饥以便我们实时监控。由于中国海洋石油国家科技重大专项“随钻地层压力测量系统研制”项目需要,作者设计了一种基于MAX3232的TMS320F2812异步串行通信系统,经过实验测试,该系统结构简单、传输可靠,达到了要求,可直接用于油田勘探开发的测井和多种数据采集与传输。
1 硬件电路
采用符合RS-232协议的MAX232芯片来实现F2812与PC之间的通信。MAX3232采用专有的低压差发送器输出级,利用双电荷泵在3.0~
5.5V电源供电时能够实现真正的RS-232性能,器件仅需四个0.1μF的外部小尺寸电荷泵电容,具有两路接收器和两路驱动器,提供1μA关断模式,有效降低功耗并延长便携式产品的电池寿命。在关断模式下,接收器保持有效状态,对外部设备进行监测,仅消耗1μA电源电流,原理电路如图1所示。
从图中我们可以看出MAX3232具有两路接收和驱动器,本次设计中仅用了其中一路,而另一路采取悬空方式。其引脚连接方式为:T1IN
与 F2812的SCITXDA相连,R1OUT与SCIRXDA相连,T1OUT和R1IN分别于DB9的2和3号引脚相连,其余引脚分别接4个0.1μF的电容。该电路设计简单,易于实现。
2 工作原理简述
异步串行通信接口(SCI)是一个采用发送、接收双线制的异步串行通信接口,即通常所说的UART口。所谓异步传输就是将比特分成组进行传送,组可以是8位的一个字符或更长。发送方可以在任何时刻发送这些比特组,而接收方不知道它们会在什么时候到达。因此,每次异步传输的信息都需要以一个起始位开头,它通知接收方数据已经到达了。在传输结束时,一个停止位表示这次传输信息的终止。异步传输实现容易,通常用于低速设备。
TMS320F2812的SCI模块具有很强大的功能。它包括两个外部引脚SCITXD和SCIRXD,分别复用到通用I/O口上,通过设置GPIO口为特殊功能口可以使能这两个外部引脚,可以编程配置多种的不同的通信速率和可编程的数据格式,具有四个错误检测标志位,可以工作在半双工或全双工通信模式,发送和接收可以采用中断和查询的方式进行,采用NRZ格式并且拥有13个寄存器来完成整个模块的控制,它还具有自动波特率检测和16级发送/接收等增强功能一本设计正是利用SCI模块的两个外部引脚SCITXD和SCIRXD分别连接MAX3232的一路接收发驱动器并通过DB9计算机接口来实现TMS320F2812和PC之间的相互通信。3 软件设计
3.1 SCI模块的初始化
对DSP芯片的控制是通过对它的寄存器的读写来完成的,TMS320F2812的SCI模块包括13个寄存器。要使SCI模块能够正常工作,必须对它进行初始化。其中设置主要包括:运行模式、协议、波特率、字符长度、奇/偶校验、停止位个数、中断使能及级别确定等。下面为本设计中对SCI模块的初始化程序:
void InitSciA ()
{
//配置SCITXD和SCIRXD
EALLOW:
GpioMuxRegs.CPFMUX.bit.SCITXDA_GPIOF4=1;
GpioMuxRegs.CPFMUX.bit.SCIRXDA_GPIOF5=1;
EDIS:
//软件复位SCI
SciaRegs.SCIGTL1.bit.SWRESET=0;
//设置字符格式、通信协议、通信模式
SciaRegs.SCICCR. bit. SCICHAR=7;
SciaRegs.SCICCR.bit.PARITYENA=0;
SciaRegs.SCICCR.bit.LOOPBKENA=0;
SciaRegs.SCICCR.bit.STOPBITS=0;
SciaRegs.SCICCR. bit.ADDRIDLE. MODE=0;
//设置波特率为9600,LSPCLK=30MHz
SciaRegs.SCIHBAUD=0x0001;
SciaRegs.SCILBAUD=0x0085;
//使能发送和接收器
SciaRegs.SCICTL1.bit.TXENA=1;
SciaRegs.SCICTL1.bit.RXENA=1;
//使能中断
PieCtrl.PIEIER9. bit.INTx1=1;
PieCtrl.PIEIER9. bit.INTx2=1;
//退出复位状态
SciaRegs.SCICTL1.bit.SWRESET=1;
}
3.2 SCI模块发送和接收数据的机制
SCI模块发送和接收数据有两种方式:一种是查询方式,另一种是中断方式。
查询方式:就是程序不断去查询各自的状态标志位。对于发送数据,需要查询的是TXRDY位,如果该位为1,说明SCITXBUF已经准备好接收下一个发送数据。当数据写入SCITXBUF后,该位会自动清零,此时如果TXENA=1,发送移位寄存器就会将SCITXBUF中的数据发送出去。而接收数据时需要查询RXRDY位,当SCIRXBUF已经准备好一个等待CPU读取的数据时,就会将该位置1,当数据被CPU读走后,RXRDY会自动清零。
中断方式:在该种方式下,需要我们首先使能外设级、PIE级和CPU级中断。此时TXRDY和RXRDY变成了中断标志位,当TXRDY为1时,就会产生中断事件,如果各级中断都已经使能,则程序会进入相应的中断处理函数,完成数据的发送。而当RXRDY置位时,就会产生接收中断,如果各级中断都已经使能,则程序进入相应的中断处理函数,完成数据的接收。这里值得注意的是,2812的外设的中断标志位一定要手动复位,但是SCI模块是个例外,它的中断标志位会在响应中断后自动复位。
通过对查询和中断方式程序的分析可以看出,查询函数位于主函数的for循环内,通过for循环不断查询TXRDY和RXRDY的状态,因此,程序的运行效率比较低,但是程序比较简单,易于实现。对于中断方式,只要相应的中断标志位置位,并且所有中断级都已被使能,就能直接进入中断处理函数,实现相应的功能。因此,程序的运行效率高,但程序比较复杂。综合考虑,最终选取数据接收采用中断方式,数据发送采用查询方式。图2和图3分别为查询方式和中断方式的程序流程图。
4 实验与测试结果
将串口调试工具做如下设置:将波特率设置为程序中的波特率19200bps,数据位8位,无极性校验,停止位1位,然后打开串口,将16进制复选框上的勾去掉,这样数据将按照ASCII码进行发送。在这里我们输入swpu,点击发送后,接收框马上显示swpu,说明SCI与PC通信成功。具体结果如图4所示。
除此之外,我们还可以通过CCS中的watchwindow来观察2812接收到的数据,如图5所示。
通过查ASCII码表我们可以得到表1所列。
由表1我们也可以看出2812与PC通信成功,发送和接收的数据一致。
通过硬件设计和软件调试,已经达到了项目要求。该系统结构简单、易于实现。