基于VxWorks的多路高速串口的通信方法设计
信号经过1:10功分器,分给10个RF接收模块,完成RF接收,输出串行信号,每路串口为串行信号的最大速率115.2kbps,RF接收模块每20ms发一个数据包,一个数据包最大为30bit。之后串行信号经过3片OX16C954(每片有4路UART)转换成并行总线信号,输出给MPC860T(CPU)。每片OX16C954设置有128B的环形缓冲区,所以经过时间缓冲区就会被写满。为了保证不丢失数据,应该在8.8ms内完成对10个终端接收模块进行一次接收。OX16C954中断门限设为64B,当接收缓冲超过64B时,OX16C954产生接收中断。在OX16C954还设置有超时中断,当从接收最后一个停止位中心开始计时,在四个符号周期内没有接收新的信息,即
就产生超时中断。批中断的应用如图3。多个串口通过CPLD共享一个中断源,在中断频繁,多个串口同时产生中断的情况下,实现了批中断,节约了中断资源,提高了中断效率。
本系统的设计基于VxWorks操作系统。VxWorks操作系统提供对多种处理器的广泛支持,具有完善的开发环境、开放的软件接口、优异的实时性能和全面可靠的网络功能及良好的可裁剪性,适用于各种嵌入式环境的开发。
程序实现过程:系统加电待操作系统启动之后,应用程序首先根据主控和PC机的IP地址,得到它们的MAC地址,为以后进行UDP数据传送做准备;初始化MPC860T的Port C口,把PC12、PC15初始化为数据输出口,分别用于点亮运行时的状态灯和设置/清除硬件看门狗;初始化OX16C954,打开10路串口,接收终端模块的数据;同时向终端模块发送数据,初始化UDP协议栈;最后,进入无限循环中,从各个串口收集数据,解开数据包,以UDP的方式,把话音包发给PC机,把非话音包发给主控;同时,从网络上接收来自主控的UDP数据,根据端口号,把数据转发给各个终端模块。PC机不直接向DPM发送UDP数据,只有主控向各个终端发送数据,故由DPM至PC机的数据为单向。管理看门狗,每循环一次,开关一次看门狗,处理一次状态灯。整个程序的流程如图4所示。
在10路都没有数据的极限情况下测量轮询开销VP。在这种极限情况下,应用全中断的方式,10路串口没有数据不会产生中断,中断开销为0;应用全轮询的方式,CPU每次只查询外部寄存器但不接收数据,所以每次CPU都是空转,测量出来的为轮询的固定开销VP=163.84μs。在这种情况下,中断显然要优于轮询。
3.1 均衡负载
在多路负载均衡的情况下,测量中断吞吐率OI=B1为达到OX16C954中断门限后,触发的接收中断所接收的数据量(B1≥64B);B2为产生超时中断时所接收的数据量(B2≤64B)。轮询吞吐率OP=
B′为轮询接收的数据量。如图5所示,在VxWorks系统中1tick=1/8000(s)。因为设置了中断门限,所以中断在数据量低的时刻有一个跃变;轮询的跃变由轮询的周期设置,如果改变轮询周期,跃变点将发生转移。轮询的吞吐率随输入数据量的增加而呈线性增长;在数据量低时中断要优于轮询,随着数据量的增长轮询就要优于中断,在两者相交的时刻,通过实验可以找到γ和PUMAX的值。
3.2 非均衡负载情况
非均衡负载情况,即m1路数据负载大、m2路数据负载小的情况(m1+m2=10)下,测量OI、OP和OC(中断和轮询相结合的吞吐率)。如图6所示,在横坐标为1处,为m1=3,m2=7的情况,由于应用了批中断,中断的效率要优于轮询,中断和轮询相结合的方法要略优于中断;在横坐标为2处,为m1=5,m2=5的情况,相结合的方法要略优于中断和轮询;在横坐标3处为m1=7,m2=3的情况,相结合的方法近似轮询,要优于中断。
本文在综合分析各种串口接收方式不足的基础上,提出了中断和轮询相结合的方法。实验结果表明,在满足系统实时性要求的前提下,改进后的高速多串口系统吞吐率比应用单一的中断或轮询方式在多路高速串口系统中、各串口负载不均衡的情况下,得到了明显的提高。
评论