刘 明
(中国航空计算技术研究所第18室,陕西西安 710119)
MPC5554[1]是汽车控制器中常用的一款芯片,其集成了DSPI和EDMA等众多模块。DSPI可与外部模块进行高速通信,但传输过程占用大量CPU资源,影响其他任务的执行。本文主要研究了在MPC5554芯片上,SPI和EDMA配合进行数据传输的方法,该方式在保障SPI高速、实时、高吞吐通讯的前提下,又解放了CPU,整个通讯过程基本无需CPU参与,这样CPU就可以给其他任务分配更多的资源,从而大幅提高系统性能。文中给出了SPI和EDMA之间与外设的连接方式。同时在汽车控制器中,数据传输通过多个周期传输任务进行,相同周期传输任务具有相同的优先级,不同周期任务的调度时机和调度周期不同,本文设计实现了采用时钟中断和查询方式进行周期传输任务调度的方法,给出了算法步骤,并举例对算法应用进行了说明。此方法已被应用在汽车控制器中,且系统运行稳定。
使用DSPI(串行/解串外围设备接口)模块的最简单的方式是将其配置为符合工业标准的SPI(串行外设接口)模式,是高速数据传输的理想选择。但SPI在与外设进行通信时,会占用较多的CPU资源,采用EDMA中断方式可在处理器最小程度的参与下,满足大数据量通信要求。本文将SPI和EDMA结合进行数据传输,该方法在保证SPI高速、实时的前提下,整个过程无需CPU参与,CPU可以并行执行其他任务[2]。
图1所示为DSPI和EDMA与燃油芯片的连接方式。通过EDMA将大量数据从内存传送到SPI缓冲区,再通过SPI配置将数据发送到燃油芯片;反之,燃油芯片将通信数据发送给SPI缓冲区,再通过EDMA将数据传送到内存中。EDMA传输主要通过TCD通道完成,发送和接收采用不同的TCD通道。
在 MPC5554 中有 DSPIA,DSPIB,DSPIC 和 DSPID[1],在此只使用DSPIA。其发送和接收缓冲均利用FIFO实现[3]。EDMA的TCD发送通道向DSPIA发送缓冲区发送数据,TCD接收通道从DSPIA接收缓冲区接收数据。DSPI的发送缓冲FIFO有4级深度,复位后,发送缓冲的FIFO产生EDMA请求以要求填充数据。当EDMA和DSPI被设置为共同操作后,EDMA将从其传输控制描述块定义的队列中开始读取数据填充SPI发送缓冲。发送缓冲中只要有待发送数据就会立刻传送到移位寄存器中被发送。接收缓冲FIFO也有4级深度,保证即使有延迟发生数据也能正常发送接收。
图1 DSPI、EDMA和燃油芯片连接方式
本文主要研究多个周期性的数据传输任务的调度方式,仅考虑调度时机和调度周期,不考虑任务优先级和任务抢占等其他因素。不同的周期任务一般均采用不同的调度时机和调度周期[4],设计采用时钟中断和查询方式的周期数据传输任务调度算法,使得每个周期任务能按照任务本身的调度时机和调度周期进行实时调度[5-8],不受其他周期任务干扰。算法步骤如下:
(1)获取每个周期任务的调度周期和调度时机,并求取这些时间值的最大公约数pnum。
(2)求取每个周期任务的调度周期和调度时机相对于pnum的倍数,并将周期任务入口和这些倍数存储在如图2所示的Struct数据结构中。
图2 周期任务信息
将每个周期任务的struct信息顺序存储在缓冲区中。
(3)设置时钟中断的时间值为pnum。
(4)在时钟中断触发后,对缓冲区中的每一个周期任务信息按照顺序进行查询。查询过程中对字段At_turn进行判断,若At_turn=0,则进入*function指定的周期任务入口执行周期任务,同时将At_period写入At_turn字段,否则At_turn减1。对一个周期任务处理完成后再进行下一个周期任务的查询和处理。伪代码如图3所示。
图3 算法伪代码
在某采用MPC5554[2]芯片的汽车控制器中,通过本文方法向燃油芯片持续发送数据,使得燃油芯片保持正常工作状态。在此汽车控制器中有4个数据传输周期任务,每个周期任务的调度时机和调度周期如表1所示。
表1 周期任务信息
4个任务的调度时机和调度周期时间的最大公约数为5 ms,设置时钟中断周期为5 ms,将每个周期任务的调度时机和调度周期与5 ms的倍数关系存储在各自任务结构中并写入缓冲区中,缓冲中的任务信息存储如下:
{
周期任务1入口,4,0;
周期任务2入口,6,1;
周期任务3入口,2,2;
周期任务4入口,4,3;
}
程序运行过程中,通过查询缓冲区中的任务信息,当任务的At_turn值达到0时,表示应该执行对应任务,同时将At_period值写入At_turn,重新开始调度周期的计数[9-11]。
在任务执行过程中,采用SPI和EDMA配合的方式进行数据传输。发送采用EDMA的TCD32通道,接收采用EDMA的TCD33通道。DSPIA和EDMA发送接收通道地址配置如图4所示,其他长度、模式等配置信息与发送过程相关。
图4 数据传输配置
在时钟中断触发后,以上周期传输任务部分执行情况如表2所示。
表2 周期传输任务调度执行表
采用本文周期传输任务调度的算法与 SPI及EDMA结合的方式进行数据传输可满足大量高速数据实时传输,且不影响CPU执行其他任务,算法易于实现、计算量少,采用的数据结构和软件结构易于修改和扩展,任务调度方式灵活、适用面广、可应用于其他周期任务的调度。但算法也存在一定的局限性,例如一次传输数据量受到SPI缓冲区深度的限制;周期传输任务的调度周期和调度时机各数据之间倍数关系越明显,则算法效率越高;若倍数关系不明显,最大公约数较小,则时钟中断会较频繁的触发,且查询操作运行次数会增加,影响算法运行效率;存储周期任务信息也会占用一定的存储空间,后期可完善算法减少信息存储和查询操作,从而进一步提高资源利用率。
[1] 龚光华,宫辉,安鹏.MPC5554/5553微处理器揭秘[M].北京:北京航空航天大学出版社,2010.
[2] 李军华,吴淑琴.XA270与 DSP的 SPI DMA通讯设计[J].电子测试,2010(7):81 -85.
[3] 李明磊,潘文亮.基于SPI接口和FIFO缓冲器的大容量高速实时数据存储方案[J].海洋技术,2010,29(2):30-32.
[4] 殷进勇,顾国昌,赵靖.优先约束的混合实时任务动态调度算法[J].计算机集成制造系统,2010,16(2):411-416,422.
[5] 朱智林,时晨,韩俊刚,等.周期性任务调度的装箱算法[J],计算机应用,2006,26(3):679 -681.
[6] 宋杰,檀林欣,曹竹冬,等.一种新型的实时调度算法[J].计算机技术与发展,2010,20(12):73 -76.
[7] 桑楠,李保宇,马红.多处理器的节能调度算法[J].电子科技大学学报,2008,37(1):116 -119.
[8] 白亮,万林,李辉.多处理机实时分类调度算法研究[J].西安理工大学学报,2007,23(2):182 -185.
[9] 方欢,陆阳,徐自军,等.井下机车运输调度的资源分配模型及无死锁优化调度[J].系统工程理论与实践,2013,33(8):2087-2096.
[10]李巧云,王冰,王晓明.随机机器故障下单机预测调度方法[J].系统工程理论与实践,2011,31(12):2387-2393.