查看: 2720|回复: 0

eTPU:介乎软件和硬件之间(1)

[复制链接]

该用户从未签到

发表于 2008-9-24 08:41:58 | 显示全部楼层 |阅读模式
分享到:
   可编程的增强型定时处理单元(eTPU)模块在嵌入式系统领域具有非常特殊的地位。有些人对它推崇有加,另外一些人则不以为然。然而,所有与eTPU存在一定关系的人都很尊敬它。为什么会出现这种局面呢?为什么eTPU对有些人极具吸引力,而对另外一些人却毫无价值可言?

      实时嵌入式系统
      对于在实时嵌入式系统中运行的控制器,人们更加注重它们的精确而快速的定时,而不是它们的计算性能。处理器必须确保基于输入来生成控制信号。控制算法的算术运算要求受到了输入和输出处理时间的限制。每颗处理器都有其性能限制,这取决于应用的类型。我们可以想象,一颗处理器可能用于逻辑分析仪,而在逻辑分析仪中,输入信号采样需要快速逻辑运算,但对算术运算几乎没有什么要求。相反,另外一颗处理器可能用在算术运算占主导地位的MP3 dictaphone播放器中。快速定时应用需要快速中断服务。在开始中断服务时,首先会保存当前的CPU任务上
下文,而在中断服务结束时,又会恢复该任务,这是一种服务开销。事实已经证明,在有些应用中,中断服务开销可能占用多达70%的CPU时间。
        标准定时器基于输入捕获/输出比较原理。
         在处理输入信号时,如果检测到跳变(无论是上升还是下降),实际的计数器值就会写入捕获寄存器。同时,CPU产生中断。在CPU上运行的主程序必须保存当前的任务上下文,以处理中断。在中断结束后,又会恢复上下文,并返回到以前的任务。以后的任何跳变都检测不到,直到定时器中断服务结束。这也是中断服务的速度非常重要的原因。在处理输出信号时,CPU保存计数器的值,在计数器中,输出针脚的状态必须改变到匹配寄存器。在进行匹配时,针脚状态发生改变,CPU产生中断。CPU必须保存当前的任务上下文,使用一个新值来更新匹配寄存器,然后恢复以前的任务上下文。生成窄脉冲是非常困难的,此外,它还要取决于中断服务的速度。
       上述问题可以通过几条途径解决,例如,将CPU内核寄存器组扩大一倍。由于CPU仅切换到备用寄存器组,因此无需在中断服务之前保存运行任务的上下文。当中断服务结束时,CPU重新切换至第一个寄存器组,而上下文保持不变。不过,这种方法也有一定的局限性--即中断不能嵌套。其次,特殊任务的专用硬件模块也是解决这个问题的一种方法,并且更加常用。例如,PWM模块能够独立生成PWM信号,而不对CPU产生影响,CPU只设置所需的时间段和生成信号的任务处理周期。UART模块处理串行通信,与CPU交换已经接收的数据和即将传输的数据。处理器拥有的外围设备模块越多,它的通用性就越强。
         eTPU也属于外围设备模块,其功能是处理一些耗时的任务,从而减轻CPU的工作负荷。它可以处理可编程模块,这些模块与其它模块有所不同。实际上,eTPU是一颗协处理器,一颗与主CPU并行运行的微控制器。它设计用来处理一些时间关键任务。飞思卡尔半导体公司(前身为摩托罗拉半导体事业部)将eTPU模块作为其32位处理器MCF523x (ColdFire 系列)和MPC5500(PowerPC系列)的一部分,满足半导体市场需求。
         eTPU是定时处理单元(TPU)的后续产品。早在上世纪九十年代,TPU就被集成到摩托罗拉HC68K处理器中,后来又被集成到PowerPC MPC500中。上述设备一直垄断着引擎控制市场,TPU功不可没。在其它很多需要精确输入和输出信号的应用中,它们也得到了使用。当时还出现了TPU specter现象。我记得有这样一篇文章,作者描述了他在使用TPU时遇到的烦恼。他使用TPU微汇编程序来编写一个程序,将尽可能多的时间关键输出信号的处理工作从CPU转移到TPU上。在测试中,作者发现大约每24小时就产生一个rogue pulse。这位经验丰富的工程师花费很多周时间来检查这一错误。他使用软件来分析捕获到的数据,但没有什么结果。最后,他决定再次检查TPU代码,结果发现一个很小的影响其应用程序的BUG,遗憾的是,这个BUG还是在非常特殊的情况下才发现的。
        TPU的特征之一是不能停止运行实时应用,以进行调试。在一个仿真器中,我们很难模拟程序在任何可能情况下的运行。正因为如此,我们给TPU程序员的最好建议是:编写没有BUG的代码!现在,eTPU的开发变得更为轻松。eTPU代码可用C语言编写,提供一些内部功能,用于eTPU硬件控制。编译程序将该代码转换成为eTPU操作码,同时生成一些必需的数据,以保持在CPU上运行的主程序与在eTPU上运行的辅助程序之间的协调一致。与在微汇编程序中编写代码相比,使用C语言编写代码,人们通常不会犯太多的错误。然而,大多数希望在应用中使用eTPU的工程师都不需要熟悉eTPU编程。飞思卡尔系统应用工程师已经准备好了eTPU功能库。这些功能库涵盖了eTPU的所有重要应用领域,能够处理一般的输入和输出信号处理功能(如PWM调制、脉冲和频率测量),还能处理模拟标准的功能,以及特定的通信协议(如UART、SPI、I2C)或现成的引擎控制功能。此外,它的电机控制功能也非常值得一提。

表1:飞思卡尔eTPU功能库。
飞思卡尔公司通过飞思卡尔网站(http://www.freescale.com/etpu)免费提供eTPU功能库。点击该链接,您可以发现该功能库不仅包括对象模块,还包括所有功能的源代码和详细文档。如果您准备学习eTPU编程,功能库提供的源代码可以作为一个模板,帮助您编写自己的功能。
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条



手机版|小黑屋|与非网

GMT+8, 2024-11-13 03:44 , Processed in 0.112955 second(s), 15 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.