让微控制器性能发挥极限的方法
扫描二维码
随时随地手机看文章
如今微控制器需要执行广大范围的任务,包括管理实时控制算法、解码高速通信协定,以及处理高频传感器发出的信号。轮询方法(如检查端口以确定新数据是否经已到达)会消耗过多的CPU周期,而且对可靠服务I/O与外设的最大响应时间也往往太长。对于大多数嵌入式应用而言,开发人员以中断来满足对外设管理的实时要求。但中断只能够确定实时事件何时发生,开发人员仍然必须在数据丢失之前让CPU直接参与读取I/O和外设。处理一个中断可能需要同时中断其它对延时敏感的任务,带来任务转换支出,并引发一系列棘手问题,诸如如何管理多个中断同时发生时的延时,所有这些都会降低系统可预测性和处理器的效率。
微控制器要想处理实时I/O和外设的高数据速率和频率,便必须拥有更高的处理效率。但这个效率不能通过提高时钟频率来获得(因为需要更大功耗),而是要通过微控制器架构的内部改进来实现。实际上,微控制器已经开始集成用来卸载特殊任务模块的协处理器、可加快无惩罚型(penalty-free)内存访问速度的多信道DMA控制器,以及能在内部子系统之间发送信号以卸载I/O和外设管理任务的集成式事件系统。
卸载CPU任务还有很多方法
集成式协处理器在嵌入式微控制器中已获得相当广泛的应用,其中比较常见的协处理器是加密和TCP/IP卸载引擎。协处理器可高效卸载整个任务,或帮助执行复杂算法中的密集计算部分。例如,一个加密引擎可以把CPU上的AES计算任务从每次运算数千个周期缩减为数百个周期,而一个TCP/IP卸载引擎可以极小的CPU运行支出来终止一个以太网连接。此外,卸载引擎还能简化这些任务的实现过程,使开发人员无需编写扩充代码,便可以通过使用简单的API来加入先进的功能。
DMA和事件系统技术对开发人员来说是比较陌生的,因此并不常使用。DMA控制器通过执行数据访问(如在后台执行外设寄存器到内部或外部SRAM的数据访问),从CPU卸载数据移动管理任务。例如,开发人员可以配置DMA控制器,把一个数据块预载入片上RAM中,这样在CPU需要它之前就可以快速访问,从而消除了等待状态和相关延时。另外,DMA控制器还能够承担通信外设管理的大部分工作(见表1)。
表1 DMA控制器能够承担通信外设管理的大部分工作
利用DMA控制器所节省的周期数可以十分可观:许多嵌入式开发人员都已发现自己无法以有限的微控制器资源来满足应用的需求,直到认识了DMA,才突然明白原来还有大量额外的周期可用,数目有时甚至多达整个系统的30%到50%左右。许多开发人员都是在遇到处理方面的困难时,才首次发现这种未开发的潜力,尽管实际上这种潜力从一开始就可以使用。
熟知事件系统(event system)的开发人员就更少了。事件系统与DMA制器协同工作,可进一步减少CPU周期的负担,并降低总体功耗。事件系统是一条总线,能够将从微控制器上的一个外设发出的内部信号连接到另一个外设。当有事件在外设上发生时,它就可以在一个双周期的延时内触发其它外设采取行动,整个过程无需CPU参与,就和人体在手碰到火时无需大脑命令就自然做出反射动作的把手抽出来一样。
更确切地说,事件系统利用一个连接了CPU、数据总线和DMA控制器的专用网络在整个微控制器上进行信号路由(见图1)。在正常情况下,外设必须中断CPU来激活某个行动,包括读取外设本身。而事件系统通过直接在外设之间发送相关事件,便可有效地使CPU摆脱这些中断所带来的负担。开发人员可以灵活配置外设来使用不同的事件通道,从而定义特定的事件路由,以满足应用的某些需求。
图1 一个事件系统
灵活的卸载
DMA和事件系统配合工作,就可让开发人员卸载整个任务,这与协处理器的作用很类似,但两者间的关键区别是协处理器不是可编程的。协处理器采用硬件来执行一个已详细定义的任务,有时甚至是可配置的;而DMA控制器配合事件系统的可编程性使其适用于从最简单的到极复杂的各类任务。在采用DMA和事件系统的情况下,DMA负责管理整个微处理器架构上的数据传输;至于事件系统则控制这些低延时、高精度传输发生的时间。换言之,事件系统负责确保由DMA管理的数值在正确的时间/频率下被采样或输出。
图2所示为事件系统与DMA共同工作的原理模块示意图。ADC连接一个传感器,并会采集信号样本。内部计数器被设置为与采样频率相匹配,用以提供规律且精确的时间间隔。事件系统可以直接激活ADC的采样,而无需中断CPU,使采样频率比利用微控制器的时钟更为精确。当ADC停止并完成转换时,ADC便会触发DMA通过事件系统存储这些转换值。
图2 DMA控制器配合事件系统
事件管理可扩展为包含多个事件、连接多个外设的更复杂的配置。例如一个输入信号(事件1)可触发ADC采样(事件2),并把数值存储到DMA中(事件3),直到DMA缓冲器溢满(事件4)。在这种配置中,CPU只有在缓冲器数据溢满需要处理时才会被中断。
DMA控制器和事件系统还支持多通道,使开发人员能够配置一个与主CPU并行工作的互连结构,因此,可采用一种固定性方式来对多个并行实时任务进行协调。
固定性和延时
固定性在限制延时和管理实时嵌入式系统的响应性方面扮演着关键的角色。系统的固定性越高,它的响应性也就越稳定。影响固定性的主要因素在于系统必须同时处理的中断的数目。一般而言,系统里中断的数量愈大,愈容易破坏系统的固定性。
假设一个系统只有一个中断,并在50个周期内完成。这样一个中断的延时相应地在50个周期左右。要注意的是,即使最简单的中断,微控制器也需要约50个周期的时间来保存有限寄存器数目的环境信息,而且还需访问外设、保存数据、存储环境信息及清除管线。
然而,在固定性和延时方面,开发人员遇到的大多数问题并非处理单个中断这么简单,而是当众多中断同时发生时,应如何在即时满足所有要求。例如,如果有一个在75个周期内完成而优先权更高的中断进入系统,前一个中断的延时就会受到影响,因为它将被优先权更高的任务中断。这时,优先权较低之任务的延时便会变为50到125个周期。
当更多的中断出现时,优先权较低之中断的延时随固定性的下降而增加。一个50周期的任务可能多次被中断,并最终需要数百乃至数千个周期来完成。这一点十分重要,因为并非所有的中断都具有高优先权,一切都是相对性的。
固定性直接影响到响应性、可靠性和精度。当开发人员确切知道延时是50或500个周期,便可以在处理时可将之考虑在内。不过,如果延时介于50到500个周期之间,即便是最优秀的开发人员,所能做的也不过是假设一个典型延时(如200个周期)数值,然后把所有的偏离视为误差。此外,最坏的延时情况有可能出现在濒临实时期限的极值,威胁到系统的可靠性。
通过DMA控制器和事件系统来减少同时发生的中断(即便是低频中断),可以大大提高系统的固定性并减小延时,而更高的固定性还有助于精度等其它重要因素的提升。
[!--empirenews.page--]
如何获得更高的精度
下面以一个电源管理任务在驱动电机等大负载时实现交流电源效率的最大化为例,来说明固定性如何影响精度。因为大部分可用能量都在电压处于峰值并与电流同相时供应,所以这时系统的电流消耗量应该最大。反之,电压越接近零(即过零点),可用电能就越少,而效率也越低。利用功率因数校正(PFC),通过接入和断开大电容,调节负载保持交流电流和电压同相,便可以提高功效。
比较器一般用于过零检测,当电压下降至设定阈值以下或上升至阈值以上时,比较器便会接通。相对于使用比较器触发中断并驱使CPU开关电容的情况,事件系统可以把比较器事件直接发送到定时器/计数器输出,无需CPU干预即可控制开关。
低优先权任务(如PFC)的中断延时可能需要数千个周期,而具体延时取决于有多少个优先权更高的中断同时发生。延时较大意味着电容会晚于最佳时刻开关,这会显着降低总体效率。相比之下,事件路由的延时最多两个周期。
当把上面的数字跟微控制器的时钟频率一同考虑时,便会发现如果微控制器的时钟频率为32MHz,一个双周期延时所引入的误差其实微不足道(2/32M);而数千个周期的延时则可能大大影响高频任务(它们本身也需要每隔数千周期才会被处理)的精度。值得注意的是,若中断是由优先权较高的任务发出的,该延时可能降至50个周期左右。不过,这样一来会导致根据精度要求而不是根据系统功能的重要性来分配优先权,而且这只是把缺乏固定性引起的误差转移给了其它任务而已。
更高的精度在产生信号时也起着关键的作用,这里所指的并非单纯的信号采样。以创建100kHz波形为例,利用中断,波形的精度将受相对于信号速率的可变延时的影响,并根据任务切换和已堆积的其它中断数量而变得稍慢或稍快。注意,当波形平均而言准确时,在许多情况下,影响只来自是两个连续样本之间的相对差异。
高频信号处理
在大量嵌入式应用中,信号产生成为了一个越来越普遍的任务。信号用于产生声音、管理电压转换调节器、控制工业应用中的致动器,以及实现无数其它功能。信号的频率越高,采用中断时CPU上的负荷就越大,其他任务延时增加的可能性也越高。
对于发生频率较高的事件而言,CPU负荷是一大考虑因素。例如,高速传感器必须在下一个样本准备好之前进行采样,以防丢失数据。以一个流量计多轴定位系统或一个拥有每秒采集200万个样本采样速度的快速精确测量能力的仪表系统为例,单是采集样本,每秒便消耗了数十到数亿个周期。而若采用一个事件系统和DMA控制器,所有这些周期都可从CPU卸载,而且这些样本还会被实际处理,而不是简单地缓存。即使只是一个仅需要50个周期来完成、需要任务切换支出的简单任务,也能够从CPU卸载一亿个周期。鉴于这个原因,许多系统都使用独立的微控制器来管理各个高频传感器或电机。
对于频率较高的任务,事件系统和DMA控制器还能够实现以下事项:
• 精确的时间戳((time-stamping):为采样加上时间戳让开发人员能够使信号更好地与外部事件同步。在双周期延时的情况下,时间戳远比标注中断更精确,并可省去后者达数千个周期的延时。
• 过度采样:提高传感器分辨率的其中一个方法是过度采样。譬如,把计数器除以16,可以使采样样本数目增加到16倍,从而提高传感器的总体精度。由于CPU没有直接参与样本的采集和存储,故有可能出现过度采样,而无太多惩罚。
• 动态频率:某些应用只在某些时间或特定工作条件下才需要较高的感测精度。例如,水表在水流速度快速变化时,采样频率会较高;而在流量被切断或流速稳定时,又回复正常频率。采样频率不但易于调节,而且还不会影响即时响应能力。
• 降低堆栈大小:减少并行中断数目的另一个好处是能够维持较小的堆栈。由于每一个中断都必须通过在堆栈中增加数十个寄存器来执行环境信息保存,因此消除了好几个环境保存层,显著减低所需堆栈的大小,这将让应用能够使用更少的RAM存储器。
• 抗扩展能力:鉴于不同微控制器支持的外设数目不同,同一应用的中断数目可能随产品价格而各有不同。即便使用同一个微控制器系列,支持更多功能的较高端系统会有更多的中断,降低了总体固定性。因此,把设计移植到集成度更高的微控制器,可能会影响信号延时乃至采样和输出的精度。
• 实现简易软件改变:由于事件处理减少了CPU干预,所以系统可在不会影响实时响应的情况下实现软件改变。即便需要更多的CPU时间来处理额外的功能,事件处理和响应时间也将完全相同。否则,就很难在产品使用寿命期间为即时应用实现软件的改变。
自主控制
一个嵌入式微控制器可能要执行无数个任务来降低功耗、提高精度以及改善用户体验,而许多这类任务只不过是监控或是检测单个数值。例如电池监控器进行监测,直至电压降至某个数值以下。然后,系统就触发关断操作,在仍有足够电量时保存应用数据。
提升用户体验常常是许多消费类产品的主要卖点。例如,事件系统能够加快系统对唤醒按键或外设输入的响应速度,在两个周期内就可以做出反应。如果与采用中断的响应性比较,由于中断需要系统返回到工作模式,因此就降低了能效。基于这个原因,开发人员常常延长定时器的时间间隔,以致降低了响应性。
若利用中断,对于CPU处理能力而言,执行这类任务的成本太高,而且会增加延时,降低固定性。而采用事件系统和DMA控制器,开发人员就能够避免CPU执行这些功能。这不仅可减少系统必须管理的中断数量,而且还能简化任务的实现和管理。
例如,在一个在特殊工作条件下向用户发出警示信息的应用中,预先设置的声音文件可以存储在缓存中,再利用DMA通过适当的外设馈入到扬声器,而利用定时器,事件系统就可以确保44,056KHz的准确数据率。此外还有一个额外的好处,因为频率准确且稳定,声音保真度也得以提高。从性能角度来看,只要配置了DMA和事件系统,CPU就完全不用干预播放任务了。
说这些任务变得更“自由”可能显得有点夸张。不过,以这种方式执行这些任务,的确使其能够适用于更宽范围的应用。协处理器、DMA控制器和事件系统的结合能够释放控制器,让它只进行信号处理,而不必把大部分资源消耗在信号的周期密集型采集工作上。因此,CPU得以保存大部分处理能力进行信号处理。这样一来,就可以利用单个控制器管理多个高频任务。这也简化了系统设计,使用户能够以更低的成本在单个微控制器上执行更多任务,更容易实现多个信号之间的互连性,并提高能效。
对许多应用来说,能否支持多个任务可成为一项重要的产品差异化指标。例如,采用了DMA控制器和事件系统的电机控制应用,就能够使微控制器释放出足够的资源,使开发人员能够以在不增加系统材料成本的条件下实现PFC等先进功能。
除了通过卸载中断来提高微控制器的性能和能力之外,事件系统还能够把功耗最低降至1/7(具体数字取决于应用)。表2所示为一个需要每秒120万周期的应用的功率相关数据。在12MHz时,微控制器只有10%的时间在工作模式下,其余时间都处于待机模式。执行DMA控制器和事件系统可以卸载大量CPU每秒必须执行的周期数,使微控制器进入闲置或睡眠模式。鉴于工作模式下的耗电量远大于闲置睡眠模式下的,就算工作模式只出现少许百分比变化,所能节省的功率也可以是相当可观的。
表2 一个需要每秒120万周期的应用的功率相关数据
总结
架构方面的改进提高了CPU的总体能力,使得嵌入式微控制器系统性能不断提升。协处理器能够从CPU卸载已详细定义的计算密集型任务,DMA控制器可把整个系统的数据移动任务从CPU中解放出来,而事件系统可解决有关多个由频率触发中断的瓶颈问题。通过减少系统必须处理的并行中断的数目,开发人员能够提高系统固定性,从而降低延时,提高信号的分辨率和精度,改善稳定性和可预测性,并增强系统可靠性。这样一来,设计人员不但使用单个微处理器就能够执行以往需要多个微控制器才能完成的工作,而且还可降低系统的成本和功耗。