Roddger的专栏

首页博文目录订阅
正 文

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

(2006/11/15 11:12)

文中的图片在这里可能看不到,可以到下面链接去看:

http://blog.163.com/z_x_mail/blog/static/1199993320061015101216747

可编程的增强型定时处理单元(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编程,功能库提供的源代码可以作为一个模板,帮助您编写自己的功能。

 

让我们更近距离地了解电机控制eTPU的可能性。老版本的TPU已经能够控制步进式电机--在最短时间内到达需要的位置;处理来自正交解码器的信号,进行位置和速度测量;为电源逆变器生成辅助的PWM信号。然而,在使用eTPU时,飞思卡尔工程师向前迈进了一大步。他们能够最充分地利用eTPU的新功能和更好的算术运算性能。因此,eTPU可以成为一种完全成熟的电机控制协处理器。例如,他们将eTPU用于直流电机、无刷直流电机(BLDC)、永磁同步电机(PMSW)和交流感应电机(ACIM)控制用途,包括电流、速度和位置闭环。eTPU功能库还包括一些用于PMSW和ACIM矢量控制的功能,这被视为最先进的控制技术之一。当使用eTPU作为电机控制协处理器时,CPU的唯一工作就是设置所需的值,如所需的扭矩、速度或电机位置。eTPU模块负责处理所有的必要任务,而不会产生中断,也不会干扰CPU。由于eTPU是为处理两相信号设计的,因此不可能独立测量一些类似数据,例如相电流或直流总线电压。相反,它能通过DMA转移,确保CPU不会受到干扰,触发模数转换器,接收取样值。

 

eTPU详解

eTPU模块包含了它运行所需的所有微控制器:数据和程序存储器、微引擎、任务调度器以及32条I/O通道。

 

图1:eTPU方块图。

 


I/O通道

32条I/O通道中的任何一条都可以配置作为输入或输出通道。每条通道还包含两个硬件"输入捕获/输出比较"动作单元,能在无需服务的情况下处理两个事件,例如,先生成上升沿,然后生成下降沿,或捕获两个连续沿的时间。凭借这种能力,它可能生成或测量非常窄的脉冲。在一个或两个事件后,通道会请求CPU服务。实际上,对CPU来说,这并不是中断,该通道只是通知调度器:必须读取捕获的值,为以后的事件设置通道动作单元。

 

调度器

由于eTPU拥有32条通道,但只有一个微引擎,很多通道可能在同一时间请求服务,因此就必须决定首先应为哪条通道服务。这就是调度器的工作。调度器根据用户设置的各条通道的优先级和内部调度算法做出决定。一方面,这种算法使它能够更快、更高频率地为高优先级通道服务,另一方面,它又能防止低优先级通道被高优先级通道消除。一旦选择了通道,微引擎就在可用通道上下文中开始其服务。事件服务不能中断,出于这个原因,下一个服务必须在当前服务完成后才能处理。

 

调度器的决定过程正好占用3个eTPU周期。对于在100MHz系统频率下(既不是配有eTPU的处理器之间的最大频率,也不是最小频率)运行的处理器而言,事件服务可在事件发生后的60纳秒后开始。这要比CPU中的中断延迟快得多。相反,当几个服务请求同时发出时,这个时间可能会长很多。良好的eTPU功能不应在一条通道的服务上花费太多时间,以保证不延迟其它通道。对时间要求非常苛刻的任务应作为不同事件的几个服务或一个事件的几个服务进行调度组织。


微引擎

除了算术逻辑单元以外,eTPU微引擎还包括一个乘法和除法单元,使eTPU变得更为强大。eTPU微引擎基本整数大小为24位。一个eTPU周期占用两个CPU时钟周期。可以通过一条eTPU指令,访问存储器或为通道硬件服务,从而进行算术运算。

 

eTPU整数大小为什么是24位,而不是16位或32位?24位分辨率对定时模块意味着什么?我们想一下,一颗100MHz处理器,带有eTPU时钟定时器,在50MHz (100MHz/2)的最大频率下运行。这意味着eTPU时间分辨率是20纳秒(1/50MHz)。eTPU能在指定时间内转换输出针脚,精确度达到±10纳秒,另外,它还能捕获跳变时间,同样达到±10纳秒的精确度。这真的非常不错,并且没有不必要地过度精确(取决于应用)。同时,eTPU硬件能在上述准确度范围内,生成或测量最大宽度达到0.335秒(224*20纳秒)的脉冲。对于16位分辨率,其最大脉冲宽度将为0.0013秒,这是远远不够的,而如果是32位准确率,其最大脉冲宽度是1分钟25秒,这又是不必要的。


代码和数据存储器

在eTPU模块初始化期间,CPU将eTPU二进制程序代码(选定的eTPU功能集)加载到eTPU代码存储器中。然后,eTPU代码存储器就被锁住。一旦eTPU运行,代码存储器就只能由eTPU访问,而且为只读。eTPU和CPU都可以访问数据存储器,可以进行读写。数据存储器管理数据交换空间,以便在eTPU和CPU之间交换数据(参数、变量和结果)。

 

应用中的eTPU使用

 

截至目前,我们已经介绍了eTPU的功能、eTPU的用途以及它的内部结构。现在,让我们了解一下工程师的工作,他们才是那些在真实应用中使用eTPU的人。在使用飞思卡尔eTPU库时,只需要两个简单的步骤。

 

第一步的目标是创建eTPU二进制程序代码。eTPU代码存储器的空间不足以容纳飞思卡尔的整个eTPU库。但是,没有一种应用会同时需要所有功能。我们可从库中选择必要的功能,并将它们集中在一起,这就足够了。飞思卡尔网页上提供了一个用于这种用途的简单编辑工具。如图2所示,用户选择希望在其应用中使用的eTPU功能,然后点击"Compile(编辑)"按钮,即可生成eTPU二进制程序代码,并能随时下载到用户的计算机中。

 


图2:飞思卡尔网页上的eTPU功能选择器。

 


第二步的目的是配置eTPU。出于这一目的,使用"eTPU图形化配置工具"将非常有用。它能帮助用户轻松地设置eTPU模块选项,设置所有eTPU功能参数。这个工具可以在飞思卡尔网页上(http://www.freescale.com/etpu)免费下载。图3显示了如何使用eTPU图形化配置工具,进行eTPU配置。

 


图3:eTPU图形配置工具。

 

第一个控制平面包括处理器选择和时钟频率设置。在第二个控制平面中,用户可以选择所需的功能。第三个控制平面用于设置全局eTPU选项,最重要的是选择内部时钟和通道输入数字过滤器。第四个控制平面上带有通道设置,为特殊通道和特殊功能参数分配的eTPU功能都在此设置。

 

eTPU功能的通道分配以及功能参数的设置决定了eTPU的负载。图形化配置工具可以计算出该负载,并以百分比的形式表示出来。在大多数情况下,结果都相当不错,只有在少数几个应用中,eTPU负载比较高。在这种情况下,应该考虑在eTPU上运行的功能的定时,这一点非常重要。必须确认:可能出现的最大服务延迟不会过长,及至影响到正常的功能。而且,这并不是一项无关紧要的任务。我们需要了解调度器算法、eTPU功能的通道分配、功能参数、输入信号参数、通道优先级,以及所有事件的服务时间。更简单的途径是使用eTPU模拟器,模拟最关键的场景,了解定时。


eTPU应用示例

最后,让我们介绍几个使用eTPU模块的应用。

 

通信网关

ColdFire MCF5235处理器控制通信网关,这些网关通过串行链路,在TCP/IP网络中的计算机和一系列通过串行链路连接到网关的传感器之间传输数据。MCF5235带有三个用于串行通信的UART模块。它还可以使用由8 UART eTPU功能分配的16条eTPU通道,连接另外8个传感器。在8 x 57.6 KB/S的传输速度下,eTPU模块负载约为56%。

 

简单逻辑分析仪

该应用基于ColdFire MCF5235处理器,处理器放置在只有信用卡大小的评估板上。它为eTPU和CPU分别单独处理时间关键任务和高级控制任务提供了很好的范例。eTPU模块负责管理输入逻辑信号取样。与普通逻辑分析仪不同,它不会定期对输入信号进行取样,只是在任何输入的状态发生变化(上升和下降沿),跳变时间被捕获时,它才会取样。这就是eTPU的工作。CPU提取数据块,并对它们进行处理。处理器内核上运行操作系统uClinux,包括TCP/IP支持、Web服务器和其它部件。逻辑分析仪连接到局域网,网络中的任何PC都可以控制它,并显示测量的信号。必须将正在逻辑分析仪内运行的Web服务器的地址键入到Web浏览器中。您可以在逻辑分析仪网页上设置测量参数、设置触发、查看测量的信号,并阅读文档。

 


图4. 逻辑分析仪的方块图及实现。

 


两个永磁同步电机矢量控制驱动

PowerPC MPC5554处理器包括一个eTPU模块,带有64条通道、两个引擎和一个共享数据及程序存储器。eTPU用于两个永磁同步电机(PMSM)的独立矢量控制驱动。CPU程序只设置每台电机所需的扭矩。从定时的角度看,以下配置似乎是最佳的。一个eTPU引擎只负责处理来自两台电机的位置传感器(正交编码器)的信号。它可以实现每秒50万个脉冲的处理能力。两台电机(安装了编码器,每转1024个脉冲)可以同时在15 000 rpm的理论速度下运行。然后,备用引擎负责管理PWM信号生成,并控制两台电机。其负载是恒定的,与电机速度无关。在20kH的PWM频率和20kH的控制环路更新的条件下,它承担78%的负载。

 

结语

eTPU在汽车行业的嵌入式系统中占据着非常重要的地位。然而,它也可以在其它一些领域中得到很好的使用。eTPU是一个可编程的外围设备模块,是一种介乎嵌入式软件和硬件模块之间的处理单元。在为eTPU编程时,软件工程师面临一些困难,因为他们必须符合eTPU硬件的要求。硬件工程师通常说,只有硬件才是可靠的,包含软件的任何产品总是存在这样那样的缺陷。飞思卡尔提供的现成eTPU功能库使这种情况得到一定改观。该库可以帮助软件工程师避免错误。根据对eTPU web工具的访问次数的评估,我们可以说,eTPU的使用正在日渐增多。在评估eTPU库、源代码模块、文档和配置工具的下载数量时,我们也注意到了同样的上升趋势。我们可以设想开发人员正在关注这一领域,而且还在试图充分利用这些免费的工具和库。我们将看到eTPU会取得多大的成功,它在现代嵌入式系统中的使用是否会越来越多,因为它的功能实在值得我们关注。

 

 

作者:Milan Brejl博士,Michal Princ
飞思卡尔半导体公司系统应用工程师

评 论
1楼 52RD网友 发表于 2019/12/4 15:20 回复
——已屏蔽——
博 主
进入Roddger的首页
博客名称:嵌入式相关
日志总数:31
评论数量:520
访问次数:262756
建立时间:2006/11/9 16:53
导 航
公 告
评 论
链 接