论文导读:F2812内部有两路专用的串行通信模块SCIA、SCIB,应实际工程需要,仅使用一路SCIB与PC进行串行通信。PC的串行通信接口一般采用RS-232协议,该协议传输速率低,传输距离近,抗干扰能力弱,很难保障实际工程现场作业数据的精准性和较远距离传输的要求。因此工程中采用了平衡差分接收的RS-485协议,使得抗干扰能力和传输距离等性能得到了很大的提升,满足了实际需要。在今后的工程应用中将进一步完成PC与多DSP的串行传输,利用DSP进行数据采集和简单的数据处理,利用PC的高速完成数据的复杂处理,并将通信程序写成类库,提高程序的通用性。
关键词:PC,多DSP,串行通信,协议
1. TMS320F2812 DSP处理器概述
随着经济的进一步发展和科学技术的日新月异,高速信息处理和自动控制在各个生产领域的应用越来越显示出其举足轻重的地位。而DSP处理器的诞生、发展以及优越的性能正是满足了市场的这种需求,同时它又进一步的促进了经济的发展和科技的进步。
DSP处理器是对数字信号进行高速实时处理的专用处理器,处理速度比普通的CPU快的多。其中32位TMS320F2812 DSP的工作频率150MHz,堪比Intel 586处理器运算能力。用户不仅可以应用汇编语言、高级语言编写系统程序,也能够采用C/C++语言开发高效的数学算法。因此该类芯片在数字信号处理领域得到了相当广泛应用。在工程应用中,其多下位机的串行数据交互愈显重要,备受关注。
2. F2812 SCI接口特点
F2812提供两个SCI接口,均采用双线制通信的异步通信串行接口。为了减小串口通信时的开销,F2812的串口支持16级接收和发送FIFO,单独的发送器、接收器中断以及各自的单独启动位,可以进行半双工或者全双工操作,支持两种唤醒多处理器方式:空闲线唤醒和地址位唤醒。
3. F2812 SCI与PC的连接
F2812内部有两路专用的串行通信模块SCIA、SCIB,应实际工程需要,仅使用一路SCIB与PC进行串行通信。F2812SCIB与PC通信连接如图1-1所示。PC的串行通信接口一般采用RS-232协议,该协议传输速率低,传输距离近,抗干扰能力弱,很难保障实际工程现场作业数据的精准性和较远距离传输的要求。因此工程中采用了平衡差分接收的RS-485协议,使得抗干扰能力和传输距离等性能得到了很大的提升,满足了实际需要。

图1-1 PC与F2812串行通信连接图
图中74LBC184是一RS485模块,其引脚/RE和DE与F2812的一个通用口相连,控制串口数据的输入和输出。
4.PC与多DSP串行传输协议的设计
4.1 数据帧的定义
数据帧是串行通信中数据链路层中所传输数据的最小单位。根据F2812 SCI的结构特点以及实际传输数据效率的需要,定义数据帧每帧为16字节,格式如表1-1所示,。
表1-1 数据帧格式
地址 |
命令 |
数据 |
校验码 |
1字节 |
1字节 |
12字节 |
2字节 |
其中地址代表从机(即接收方)地址,从机的编号0-255。每个从机都必须有唯一一个地址码,只有数据帧中地址码和自身地址码一致才接收该帧,否则丢弃。命令字表示该数据帧的类型,即通知从机执行什么样的操作。命令字与帧类型的对应关系可根据实际需要自行指定。实际常用数据帧类型如表1-2所示。
表1-2 命令字与帧类型对应关系
命令字 |
类型 |
1 |
请求信号帧(SYN) |
2 |
回应信号帧(ACK) |
4 |
重发信号帧(RESEND) |
7 |
忙信号帧(BUSY) |
8 |
终止信号帧(BYE) |
15 |
数据信号帧(DATA) |
32 |
长度信号帧(LENGTH) |
校验码是主机对12字节数据信息的CRC校验结果。从机在收到数据帧后,会对帧内数据部分重新校验,如果两者不同,则向主机发重发信号。
4.2 传输协议的设计
为了方便描述,定义A为发送方即主机,B为接收方即从机。步骤1-4表示握手阶段,步骤5-7表示数据传输阶段,步骤8-9表示传输终止阶段。
1.A发SYN给B,等待返馈ACK;
2.B收到SYN信号后,发回ACK信号;
3.A在收到ACK信号后,发送16字节的长度信息,其中第三、四字节表示待发送数据的长度(高位在前,低位在后),第十五、十六字节表示对该长度的校验和;
4.B收到16字节的长度信号帧后,若校验和错误则发RESEND信号,然后重复步骤1-4。若果正确,则发ACK信号;
5.A在接收到ACK信号后,打包发送数据;
6.B收取数据报,进行校验,若校验和错误,则发送RESEND信号,然后重复步骤5-6;若正确则发ACK信号;
7.A收到ACK信号后,继续打包发送余下数据,然后重复步骤6-7;
8.若所有数据发送完毕,发送BYE信号,终止传输,等待反馈;
9.B收到BYE信号后发送ACK信号,终止传输;
10.A收到ACK信号后终止传输。
在上述3个阶段的所有步骤中都存在超时处理。另外,如果某数据帧传输时因错误而引起的重发次数超过了3次,也就中断此次通信。
5.PC与多DSP串行传输协议的实现
5.1 DSP SCI初始化
F2812在通信之前要进行一系列的初始化,包括系统初始化和SCI初始化等。SCI模块初始化程序如下:
ScibRegs.SCICCR.all=0x0007;
ScibRegs.SCICTL1.all=0x0003;
ScibRegs.SCIHBAUD=0x0000;
ScibRegs.SCILBAUD=0x0079;
ScibRegs.SCICTL2.bit.TXINTENA=1;
ScibRegs.SCICTL2.bit.RXBKINTENA=1;
ScibRegs.SCIFFTX.all=0xE060;
ScibRegs.SCIFFRX.all=0xE070;
ScibRegs.SCICTL1.all=0x0023;
该段程序完成了SCIB的初始化,1bit 停止位,无循环模式,无极性,字符长度8 bits,异步模式。设置波特率为38400bps。使能SCI发送中断并使SCI退出复位。
5.2 DSP SCI 通信程序设计
DSP在串口收到一帧数据以后,发生接收中断,进入中断服务程序。从机中断服务程序的部分代码如下:
if(Address==dataframe.address)
{
switch(dataframe.command)
{
case1:
发送ACK信号;break;
case8:
发ACK信号,终止传输;break;
case15:
进行数据校验,正确发ACK;错误发RESEND;break;
……
}
}
else
{
…丢弃
}
该从机中断服务程序首先检测数据帧中的地址信号,如果和自身的地址不匹配,则丢弃该帧。否则启动定时器并进行相应得数据处理。利用SWITCH多分支结构,依据帧中的命令信号对帧进行相应分析,完成串行通信的握手和数据的交互。
6.结束语
本文讨论了多TMS320F2812 DSP串行通信协议的设计,介绍了硬件的连接,阐述了软件的设计。在今后的工程应用中将进一步完成PC与多DSP的串行传输,利用DSP进行数据采集和简单的数据处理,利用PC的高速完成数据的复杂处理,并将通信程序写成类库,提高程序的通用性。
参考文献:[1] 龚建明/熊光明. Visual C++/Turbo C 串口通信编程实践. 电子工业出版社.2007年9月.
[2] 周瑜萍等. Visual C++ 6编程宝典. 电子工业出版社.
[3]谭思亮等. Visual C ++ 串口通信工程开发实例导航. 人民邮电出版社.2003年1月.
[4].范逸之/江文贤等. C++ Builder与RS-232 串行通信控制. 清华大学出版社.2002年6月.
[5]. 赵世廉.TMS320×240×DSP原理及应用开发指南. 北京航空航天大学出版社. 2007.7
[6]. 万山明.TMS320F281×DSP原理及应用实例. 北京航空航天大学出版社. 2007.7
[7]. 苏奎峰等. TMS320F×281×DSP原理及C程序开发. 北京航空航天大学出版社. 2008.2
|