新闻中心

EEPW首页 > 设计应用 > 基于MPC5554的周期数据传输关键技术

基于MPC5554的周期数据传输关键技术

作者:时间:2016-10-10来源:网络收藏

摘要:针对周期涉及的数据如何传输和调度,主要研究SPI和EDMA结合的方法,并利用时钟中断及查询进行调度的方法。采用的方法和调度方法能完成大量数据传输,避免CPU消耗,保证数据传输实时性。且最终通过一个示例说明,数据传输的过程并对各项技术优缺点进行了分析与讨论。

本文引用地址:http://www.eepw.com.cn/article/201610/306149.htm

关键词 ;数据传输;

MPC5554是汽车控制器中常用的一款芯片,其集成了DSPI和EDMA等众多模块。DSPI可与外部模块进行高速通信,但传输过程占用大量CPU资源,影响其他任务的执行。本文主要研究了在MPC5554芯片上,SPI和EDMA配合进行数据传输的方法,该方式在保障SPI高速、实时、高吞吐通讯的前提下,又解放了CPU,整个通讯过程基本无需CPU参与,这样CPU就可以给其他任务分配更多的资源,从而大幅提高系统性能。文中给出了SPI和 EDMA之间与外设的连接方式。同时在汽车控制器中,数据传输通过多个周期传输任务进行,相同周期传输任务具有相同的优先级,不同周期任务的调度时机和调度周期不同,本文设计实现了采用时钟中断和查询方式进行周期传输任务调度的方法,给出了算法步骤,并举例对算法应用进行了说明。此方法已被应用在汽车控制器中,且系统运行稳定。

1 SPI与EDMA结合的数据传输方式

使用DSPI(串行/解串外围设备接口)模块的最简单的方式是将其配置为符合工业标准的SPI(串行外设接口)模式,是高速数据传输的理想选择。但SPI在与外设进行通信时,会占用较多的CPU资源,采用EDMA中断方式可在处理器最小程度的参与下,满足大数据量通信要求。本文将SPI和 EDMA结合进行数据传输,该方法在保证SPI高速、实时的前提下,整个过程无需CPU参与,CPU可以并行执行其他任务。

1.1 与外部设备的连接方式

图1所示为DSPI和EDMA与燃油芯片的连接方式。通过EDMA将大量数据从内存传送到SPI缓冲区,再通过SPI配置将数据发送到燃油芯片;反之,燃油芯片将通信数据发送给SPI缓冲区,再通过EDMA将数据传送到内存中。EDMA传输主要通过TCD通道完成,发送和接收采用不同的 TCD通道。

a.jpg

1.2 SPI和EDMA配置

在MPC5554中有DSPIA,DSPIB,DSPIC和DSPID,在此只使用DSPIA。其发送和接收缓冲均利用FIFO实现。 EDMA的TCD发送通道向DSPIA发送缓冲区发送数据,TCD接收通道从DS PIA接收缓冲区接收数据。DSPI的发送缓冲FIFO有4级深度,复位后,发送缓冲的FIFO产生EDMA请求以要求填充数据。当EDMA和DSPI被设置为共同操作后,EDMA将从其传输控制描述块定义的队列中开始读取数据填充SPI发送缓冲。发送缓冲中只要有待发送数据就会立刻传送到移位寄存器中被发送。接收缓冲FIFO也有4级深度,保证即使有延迟发生数据也能正常发送接收。

2 数据周期传输任务调度算法

本文主要研究多个周期性的数据传输任务的调度方式,仅考虑调度时机和调度周期,不考虑任务优先级和任务抢占等其他因素。不同的周期任务一般均采用不同的调度时机和调度周期,设计采用时钟中断和查询方式的周期数据传输任务调度算法,使得每个周期任务能按照任务本身的调度时机和调度周期进行实时调度,不受其他周期任务干扰。算法步骤如下:

(1)获取每个周期任务的调度周期和调度时机,并求取这些时间值的最大公约数pnum。

(2)求取每个周期任务的调度周期和调度时机相对于pnum的倍数,并将周期任务入口和这些倍数存储在如图2所示的Struct数据结构中。

b.jpg

将每个周期任务的struct:信息顺序存储在缓冲区中。

(3)设置时钟中断的时问值为pnum。

(4)在时钟中断触发后,对缓冲区中的每一个周期任务信息按照顺序进行查询。查询过程中对字段At_turn进行判断,若At_turn=0,则进入*function指定的周期任务入口执行周期任务,同时将At_period写入At_turn字段,否则At_turn减1。对一个周期任务处理完成后再进行下一个周期任务的查询和处理。伪代码如图3所示。

c.jpg

3 应用

在某采用MPC5554芯片的汽车控制器中,通过本文方法向燃油芯片持续发送数据,使得燃油芯片保持正常工作状态。在此汽车控制器中有4个数据传输周期任务,每个周期任务的调度时机和调度周期如表1所示。

d.jpg

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,重新开始调度周期的计数。

在任务执行过程中,采用SPI和EDMA配合的方式进行数据传输。发送采用EDMA的TCD32通道,接收采用EDMA的TCD33通道。DSPIA和EDMA发送接收通道地址配置如图4所示,其他长度、模式等配置信息与发送过程相关。

e.jpg

在时钟中断触发后,以上周期传输任务部分执行情况如表2所示。

f.jpg

4 结束语

采用本文周期传输任务调度的算法与SPI及EDMA结合的方式进行数据传输可满足大量高速数据实时传输,且不影响CPU执行其他任务,算法易于实现、计算量少,采用的数据结构和软件结构易于修改和扩展,任务调度方式灵活、适用面广、可应用于其他周期任务的调度。但算法也存在一定的局限性,例如一次传输数据量受到sPI缓冲区深度的限制;周期传输任务的调度周期和调度时机各数据之间倍数关系越明显,则算法效率越高;若倍数关系不明显,最大公约数较小,则时钟中断会较频繁的触发,且查询操作运行次数会增加,影响算法运行效率;存储周期任务信息也会占用一定的存储空间,后期可完善算法减少信息存储和查询操作,从而进一步提高资源利用率。



评论


相关推荐

技术专区

关闭