超越超低功耗MCU数据表:

能源效率究竟意味着什么?

博士撰写
原文于年811日发表于 Elektronik 16/2015
http://www.elektroniknet.de/halbleiter/mikrocontroller/artikel/120997

对于电池供电的设备,以及(IOT)的“物联网”专用控制器,能耗发挥了突出作用。没有人感激不必每天晚上充电的电池驱动设备。

电子零件制造商,诸如微处理器和微控制器,越来越多地采用半导体技术和电路设计技术,大大减少这些组件的功耗。

嵌入式微处理器基准协会(EEMBC)成立于1997年,开发了基准测试,帮助开发人员了解他们的系统的性能和能耗特点,并帮助他们选择适合其应用程序的最佳处理器。受欢迎的性能基准测试,如CoreMark,MultiBench和FPMark,都来自EEMBC。

最近,EEMBC已开发ULPBench及附带的EnergyMonitor,让用户准确地,系统地分析和比较超低功耗微控制器的能耗。该EnergyMonitor可以测量待测器件在3V工作电压和小于或等于28毫安的电流消耗运行中的能耗。

取决于它是否是一个IoT边缘节点或其它电池驱动的应用程序,“超低功率”(ULP)的要求可以差异很大。例如,当处理非常有限的电力资源(如能量采集)时,期望最低功率消耗。在另一方面,安全系统花费大部分时间在微控制器的休眠模式下,用于执行任务只是偶尔的。此外,ULP还意味着所有的任务在有限的时间内运行,以便尽可能将系统恢复到睡眠状态。无论如何,然而,实际执行中将利用指定的模式组合,以及其他措施,以满足ULP的要求。一个ULP应用程序靶向几个月或多年的运行,将向开发人员呈现一些挑战,以有效地优化系统的行为。越来越多的微控制器在它们的规格和数据表中承诺ULP的属性,但这些并不总是很容易地重现在现实世界中。

EEMBC ULPBench建立于数据表的权利要求,并提供一种可靠地评估和比较微控制器能源效率的方法。在ULPBench方法的背后,所有相关厂商都表示已经在EEMBC工作组中被定义,在这篇文章中提出的测量结果无法否认厂商没有指责自己的本职工作。

ULPBench的描述

ULPBench分为如下两个部分。第一,微控制器的效率全面测量不同的软件测试。这些测试的特点是普遍应力模式,可在8,16和32位微控制器之间互换。测试利用微控制器的低功耗模式,并结合一个活跃的时期,分析活性的影响 和低功耗的运行条件。 第二,所谓的EEMBC EnergyMonitor,包含EnergyMonitor板,做出身体能量消耗的测量。以前在Electronik发表的ULPBench详细说明是题为“低功耗微控制器揭示EEMBC基准测试结果”的文章 [1]

筹备ULPBench测试测量

一下步骤:

Figure 1: EEMBC EnergyMonitor Board 图 1: EEMBC EnergyMonitor 板
(点击查看全图)

EnergyMonitor,其内置的图形用户界面,预计微控制器运行ULPBench-CoreProfile软件。EEMBC提供ULPBench-CoreProfile软件的源代码(目录:基准测试,TES负荷,平台)。

如果目标(DUT)是由EEMBC支持的标准平台之一,构建基础架构可以直接从源代码的平台目录中获取。否则,用户必须端口基准测试,使用EEMBC提供的模板目录中适当的目标。EEMBC社区感谢提供此类端口,并希望在未来可看到更多的端口。

一旦ULPBench核型材二进制安装在目标上,EnergyMonitor的VCC与GND连接,且EnergyMonitor GUI启动(bin/Energy Monitor.exe), 可以很容易地运行,并产生正式基准测试结果。

ULPBench-EnergyMonitor

通过点击按钮“运行ULPBench”,在核心配置文件中,EnergyMonitor提供测试板,现有和测量消耗的能量。

当基准运行时,状态被描述在“EnergyMonitor GUI的累计能量(UJ)图”中。 在运行结束时,GUI计算EEMBC ULPMark,在右上角显示。对于每个周期的平均能量消耗,显示在GUI的“历史”框中。

通过使用文件菜单中的“提交”选项,一次成功的基准测试运行后,用户能够报告他们的结果到EEMBC的网站数据库。随后,网络浏览器提交页面打开,用户可以输入目标设备的所有细节。

被分析的平台

本节描述了我们分析的微控制器,也包括了我们在每个平台上实施的ULPBench经验的细节。

德州仪器公司MSP430FR5969 LaunchPad开发套件

德州仪器公司MSP430FR5969是一个16位微控制器,其中包括FRAM(铁电RAM),因其超低功耗,长寿命和高写入速度闻名。MSPEXP430FR5969启动板开发套件 [2] 是用于MSP430FR5969的评估模块。

Figure 2: EEMBC ULPBench result for the MSP430FR5969 图 2: MSP430FR5969的EEMBC ULPBench结果
(点击查看全图)

EEMBC ULPBench 的“入门” 文档,包含关于MSP EXP430FR5969[3]的一节。 它为那些希望实现基准测试额用户提供了非常详尽的协助。该文件建议使用IAR嵌入式工作平台(免费版8KB),可以从在www.ti.com/tool/iar-kickstart下的IAR网站下载(注:需要注册IAR)。图2中所示,EEMBC ULPBench产生MSP430FR5969。121值是不错的,但没有我们预期的FRAM器件那样高。我们将在下一节解释这一结果。

德州仪器公司MSP430FG4618/ F2013实验板

来自德州仪器公司的MSP430系列表示各种各样的超低功耗16位微控制器。这些包含特征的分类,其中的衍生物中的绝大多数都配有传统的闪存存储器,而不是FRAM。我们发现它有些奇怪,TI还没有对任何EEMBC ULPBench-网站公布这些基于闪存控制器的ULPBench值。

在此测试练习中,我们使用了MSP430FG4618实验板 [4]。“入门” 文档 [5] 可以用作仅给予一般方向意义的指导,时建议使用,IAR嵌入式工作平台的免费版本,可以从www.ti.com/tool/iar-kickstart下载 (需要注册IAR)。

出于测试,可以从上一节使用相同的代码,但在选项部分选择替代微控制器。

Figure 3: EEMBC ULPBench for the MSP430FG4618 图 3: MSP430FG4618的EEMBC ULPBench结果
(点击查看全图)

32 kHz晶振X1(LFXT类型)在实验板上必须改装。如图3所示是MSP430FG4618的EEMBC ULPBench结果,但只有31.74的结果是灾难性的。我们认为,如此低的结果是因为专用16位CPU低效处理该控制器,其活动模式显著长于几乎所有的竞争者,以便处理给定的工作量。问题是由MSP430的事实组成,即在180纳米的工艺中制造,因此,它是特别高耗能,即使在活动模式中亦是相同。

MSP432P401R启动板

德州仪器公司MSP432P401x控制器系列是最新加入高效超低功耗混合信号微控制器的组合。MSP432P401x的核心现在是一个ARM Cortex-M4处理器 [6],替代了使用专有的16位CPU,并且包括各种配置选项和丰富的外设。

在我们的实验中,我们能够运行一次“眨眼”的程序, 但在试图运行ULPBench时遇到了困难。我们发现,这个问题的根源是由于控制器的32千赫石英. TI(德州仪器公司)协助分析错误和更换电路板。

Figure 4: EEMBC ULPBench for the MSP432P401R 图 4: MSP432P401R的EEMBC ULPBench结果
(点击查看全图)

然而,更换板后,观察到类似的行为,且ULPBench启动不可靠。这一问题归咎于TI的石英参数设置不理想:水晶设置到最低驱动强度不起作用。之后,我们将其配置为一个稍高的驱动力,板便开始按预期运行。如图4所示,MSP432P401R的ULPBench结果(调整适当的设置之后)。这种新的设备有大约五倍的效率,高于之前讨论的16位导数。

微芯片(Microchip )PIC24FJ64GA202

微芯片PIC24FJ64GA202是一个16位微控制器,集成硬件加密模块和公司的所谓超低功耗技术(XLP)。该微控制器系列还包括128 KB的闪存,8 KB RAM和先进的外围设备。这些特性的组合,可以针对这些微控制器的低功耗嵌入式安全应用程序

Figure 5: EEMBC ULPBench for the PIC24FJ64GA202 图 5: PIC24FJ64GA202的EEMBC ULPBench结果
(点击查看全图)

为了帮助EEMBC的ULPBench程序移植,微芯片为我们提供了一个很容易的适应hardware_setup.c文件。当我们使用微芯片专有的编译器来编译代码,我们得到的ULPBench结果是40。另一方面,当微芯片为我们提供一个预编译二进制文件,我们得到的结果是77.43(图5)。

整理这种差异,我们与微芯片工作人员举行了电话会议,会议上他们阐明了获得我们测量的各种选项。第一,确保控制器不在调试模式。第二,删除相应的跨接线(JP9),并连接EnergyMonitor至J10(2和3);这些步骤确保防止寄生功耗。尽管如此,77.43值不把PIC放在最高处,我们认为,这是微控制器的相对较弱的CPU计算能力,要求微控制器在能源匮乏的有效模式时能够保持较长的时间。

STMicro’s STM32L476RG

Figure 6: EEMBC ULPBench for the STM32L476RG 图 6: STM32L476RG的EEMBC ULPBench结果
(点击查看全图)

意法半导体STM32L476xx设备,支持高达80MHz的时钟频率,是基于ARM的Cortex-M4超低功耗微控制器。Cortex-M4内核有一个浮点单元(FPU)与单精度,虽然这并不为ULPBench效率增加价值。STMicro公司提供了一个STM32开发板称为 "Nucleo",使用具有成本效益的和灵活的方式来调查STM32L476RG。ST Nucleo-L476提供了整个项目,和Keil集成开发环境的板块。当我们试图构建ULPBench代码,我们最初收到了30个编译器错误。ST接收编译,下载和调试技巧后,我们仍然目睹了比较高的EnergyMonitor值。在 文件项目ulp_stm32l4xx.uvprojx内有关IRAM的内容是存在差异的;这些差异通过停用BFB2置在更改引模式之后已完成EEMBC ULPBench的STM32L476RG结果是121(图6)虽然这是一个很好的值,它仍然没有堪与TI同样基于Cortex-M4的MSP432。

飞思卡尔(Freescale)的FRDM-KL27Z

FRDM-KL27Z是飞思卡尔基于ARM Cortex-M0+ [7] 的Kinetis L-KL17和KL27系列的超低成本开发平台。该平台包括一个集成的调试接口的闪存编程和控制。

为了支持我们的能源分析项目,飞思卡尔为我们提供了IAR工作台KL27Z的ULPBench端口。大多数的平台的硬件可以通过参照FRDM-KL27Z用户指南来制备。但是,飞思卡尔不得不澄清,ULPBench二进制文件必须被下载到OpenSDA的平台,而不是附加的JLINK编程器。

Figure 7: EEMBC ULPBench for the 32-bit KL27Z 图 7: 32-bit KL27Z的EEMBC ULPBench结果
(点击查看全图)

图7显示了ULPBench32位KL27Z的结果为80.17。这一结果略高于Microchip的16位PIC,虽然Cortex-M0+具有比Microchip专有的16位CPU更显著的计算能力。

Silicon Labs公司Giant Gecko入门套件(EFM32GGSTK3700)

Giant Gecko 入门套件(EFM32GGSTK3700)是评估和测试EFM32GG990F1024的平台。EFM32GG990F1024是ARM Cortex-M3基础,配有高达48MHz的时钟频率的微控制器。该微控制器是继承购买的挪威公司,Energy Micro公司的产品线的一部分。ULPBench可以使用Simplicity Studio 和 IAR Embedded Workbench建造EFM3。

Figure 8: EEMBC ULPBench for the EFM32GG990F1024 图 8: EFM32GG990F1024的EEMBC ULPBench结果
(点击查看全图)

令人失望地看到, ULPBench的EFM32GG990F1024的结果只有59(图8),尤其是在能源微隆吹捧它的Cortex-M3的EFM32被誉为“世界上最节能的微控制器。” 这个结果可以归因于180纳米器件过时的TSMC制造工艺。直到几年前,超低功耗MCU并没有建于主流的铸造厂,然而,对IoT边缘节点芯片的需求正在迅速改变这种状况。

Silicon Labs公司Zero Gecko入门套件(EFM32ZGSTK3200)

Zero Gecko入门套件(EFM32ZG-STK3200)是评估和测试EFM32ZG222F32的平台。 除了它的Cortex-M3 MCUs,Silicon Labs还提供了EFM32ZG222F32,基于ARM Cortex-M0+的另一种类微控制器的组成部分。这些MCU具有达24 MHz的时钟速度,也是广大的Gecko系列的一部分。

Figure 9: EEMBC ULPBench for the EFM32ZG222F32 图 9: EFM32ZG222F32的EEMBC ULPBench结果
(点击查看全图)

EEMBC ULPBench的结果是115(图9),比Silicon Labs公司的Cortex-M3的衍生物几乎高一倍。这也有趣的指出,Silicon Labs和飞思卡尔的Cortex-M0+设备ULPBench结果相差几乎35; 可能是因为前者是建立在台积电180ELL(“超低漏电”)上。

爱特梅尔(Atmel )SAML21

全新爱特梅尔智能平台是物联网应用中预期电池寿命将持续多年的特别设计。根据电源SAM-L21-系列数据表的规格该设备在主动模式和200 nA的睡眠模式下的耗电量降低到35微安/ MHz。除了低功耗,这些微控制器还支持全速USB主机和设备,AES和电容式触摸感应。在我们的分析中,我们使用了爱特梅尔的SAM智能L21 Xplained Pro评估套件,它非常适用于评估,及适合爱特梅尔SAM-的ARM Cortex-M0-L21+微控制器。

在我们分析中,爱特梅尔为Xplained Pro评估套件的修改提供了说明,具体地说,该套件的修改需要去除非常小的SMD元器件,并切断电路板上的导电迹线。这些改变是必要的,以防止寄生功率消耗(即在单板上开启除了单片机本身的其他应用)。

通常情况下,用户的程序可以通过USB使用Xplained Pro评估套件嵌入式爱特梅尔调试器(EDBG)下载到板上。然而,在需要微量切削修改后,这已不再可用。或者,你可以使用爱特梅尔SAM-ICE或的J-Link JTAG仿真器,使得通过10针连接器,调试接触。

Figure 10: EEMBC ULPBench for the Atmel SAM L21 图 10: Atmel SAM L21的EEMBC ULPBench结果
(点击查看全图)

当我们建立了ULPBench代码,在爱特梅尔Studio中的汇编很快,且没有错误。当我们运行ULPBench,请注意,欠压检测保险丝被禁用。爱特梅尔SAM L21得到了161 的ULPBench结果- 显得更加卓越,因为它是通过一个初步设备来实现的(即非出货数量)。对于版本B设备,爱特梅尔预计,强化价值。在我们分析的所有基于Cortex-M0+的微控制器中,SAM21L显然居于上风-100% 超过飞思卡尔KL27的值!

瑞萨(Renesas)RL78

Figure 11: EEMBC ULPBench for the RL78 图 11: RL78的EEMBC ULPBench结果
(点击查看全图)

16位RL78/ G14微控制器结合了低功耗(CPU:66微安/ MHz,待机(STOP):240 NA),配有44 DMIPS(32兆赫)的计算功率。为了评估该微控制器,我们可以用QB-R5F104LE-TB目标板,其中包括瑞萨的片上调试仿真器E1和编程人员。然而,瑞萨,不能支持这个项目,因此,我们指的是制造商中可直接比较的代表。随着ULPBench的结果为84.67(图11),RL78达到Microchip的PIC先前的描述值。

底线

EEMBC ULPBench从制造商中获得微控制器ULP性能的数量式备份报表。ULPBench的第一个版本不包括微控制器的外围设备能耗 - 只有CPU和代表的存储器系统。ULPBench后续版本将包括传统的外设,如A / D转换器,SPI和PWM支持。

在我们分析中,我们动手做了各种微控制器的调查,所有这一切都作为“超低功耗”的MCU销售。此外,所有我们调查的微控制器,分别来自继续致力于EEMBC的ULPBench工作小组的制造商,并因此,支持这一基准及其相关的测量方法。

在我们的调查过程中,我们所用的开发环境如IAR Embedded Workbench, Keil MDK 5, Microchip’s MPLAB 2.35, 和Atmel’s Studio 6.2,在我的整个调查过程中,我使用了像IAR Embedded Workbench, Keil MDK 5, Microchip’s MPLAB 2.35, Atmel’s Studio 6.2这样的开发环 境,它都具有高度的复性。有一些使用些工具的经验是非常有帮助的

此外,在我们的调查中,制造商通常给予我们对于硬件和工具链配置 慷慨支持 -无数电子邮件和一些电话会议的帮助获取了这里所显示的结果。

Figure 12: The collective EEMBC ULPBench scores 图 12: 全体EEMBC ULPBench得分
(点击查看全图)

收集的EEMBC ULPBench评分示于图12。引人注目的是峰值衍生几乎全部来自32位ARM CPU的控制器(即M4和M0+)-没有专有16位CPU 的MCU可以接近专它,除了在 FRAM控制器中的TI,它的存储系统电源效率大大抵消了CPU的弱点。

将会发生什么?

当然,你可以理所当然地讨论如何代表现实世界超低功耗应用的ULPBench。应用程序将总是具有不同的占空比(激活模式到睡眠模式的比率)和不同的工作负荷,这将带来不同的结果。在另一方面,制造商 -生产一个公平的比较 - 已赞同ULPBench格式。而且,即使有在实际应用中的偏差,这个基准提供了一个线索,它的微架构和制造技术具有能源效率的领先优势。

最终,你将不得不进行更详细的评估,为你的应用选择合适的芯片。但ULPBench,以及我们的调查工作,应该可以帮助你节省巨大数额的时间。因此,我们在未来将继续这些研究,专注于最新产品和EEMBC ULPBench的后续版本。

附录:Atmel SAML21应用实例

在这个部分,我们将通过SAML21实例展示运行ULPBench的必要端口。在ULPBench目录“模板”中,它包括了特定板端口。具体来说,这些是board.h 和 hardware_setup.c文件,如下所示:

board.h

#ifndef _BOARD_H_

#define _BOARD_H_

// Get board and chip defines

#endif /* _BOARD_H_ */

hardware_setup.c

/*********************************************************

(C) 2014 EEMBC(R) and ULPBench(TM). All rights reserved.

EEMBC ULPBench Software is a product of EEMBC and is provided under the terms of the ULPBench License that is distributed with the official EEMBC ULPBench Software release. The Software is the proprietary intellectual property of EEMBC and its members and is protected under all applicable laws, including all applicable copyright laws. If you received this EEMBC ULPBench Software without the accompanying ULPBench License, you must discontinue use and download the official release from http://www.eembc.org/benchmark/ulp_sl.php.

**********************************************************/

//=============================================================================

// Platform.c

//

// Platform-specific declarations

//=============================================================================

//=============================================================================

// board/chip defines

#include „board.h"

#include „TesTPI.h"

#include „CoreProfile.h"

//=============================================================================

void RTC_Start( void )

{

// $$$ Code to init the RTC.

}

void hardware_setup_part1( void )

{

// $$$ init device phase 1 (device specific startup)

RTC_Start();

}

void hardware_setup_part2( void )

{

// $$$ init device phase 2 (device specific, after TES started)

}

//=============================================================================

/*__interrupt*/ void pltTimer_ISR (void)

{

tesTimerInterrupt();

// $$$ Code to finish Sleep mode.

}

The following settings are required for the Atmel SAML21 port to the EEMBC ULPBench. Detailed knowledge of the respective microcontroller’s registers is necessary to implement the port.

board.h

#ifndef _BOARD_H_

#define _BOARD_H_

// Get board and chip defines

#include <compiler.h>

#include <gclk.h>

#include <port.h>

#endif /* _BOARD_H_ */

hardware_setup.c für SAML21

/*********************************************************

(C) 2014 EEMBC(R) and ULPBench(TM). All rights reserved.

EEMBC ULPBench Software is a product of EEMBC and is provided under the terms of the ULPBench License that is distributed with the official EEMBC ULPBench Software release. The Software is the proprietary intellectual property of EEMBC and its members and is protected under all applicable laws, including all applicable copyright laws. If you received this EEMBC ULPBench Software without the accompanying ULPBench License, you must discontinue use and download the official release from http://www.eembc.org/benchmark/ulp_sl.php.

**********************************************************/

//=============================================================================

// Platform.c

//

// Platform-specific declarations

//=============================================================================

//=============================================================================

// board/chip defines

#include „board.h"

#include „TesTPI.h"

#include „CoreProfile.h"

//=============================================================================

void RTC_Start( void )

{

// $$$ Code to init the RTC.

//clock for RTC : Xosc32k

OSC32KCTRL->RTCCTRL.bit.RTCSEL = OSC32KCTRL_RTCCTRL_RTCSEL(OSC32KCTRL_RTCCTRL_RTCSEL_XOSC32K_Val);

RTC->MODE0.CTRLA.bit.SWRST=1;

while(RTC->MODE0.SYNCBUSY.bit.SWRST>0);

RTC->MODE0.INTENSET.reg = RTC_MODE0_INTENCLR_CMP0;

RTC->MODE0.COMP[0].reg = 32768;

while(RTC->MODE0.SYNCBUSY.bit.COMP0>0);

//Mode 0

RTC->MODE0.CTRLA.reg = RTC_MODE0_CTRLA_MODE(0)|RTC_MODE0_CTRLA_PRESCALER(RTC_MODE0_CTRLA_PRESCALER_DIV1_Val);

RTC->MODE0.CTRLA.reg = RTC_MODE0_CTRLA_ENABLE|RTC_MODE0_CTRLA_MATCHCLR|RTC_MODE0_CTRLA_MODE(0)|RTC_MODE0_CTRLA_PRESCALER(RTC_MODE0_CTRLA_PRESCALER_DIV1_Val);

while(RTC->MODE0.SYNCBUSY.bit.ENABLE>0);

}

//Initialise BOD33 in sampling mode for RUN and STANDBY

//Threshold is set at approximately

void BOD_init_sampled(void)

{

while(SUPC->STATUS.bit.B33SRDY==0);

SUPC->BOD33.reg = SUPC_BOD33_HYST | SUPC_BOD33_ACTION_INT | SUPC_BOD33_RUNSTDBY | SUPC_BOD33_LEVEL(30) | SUPC_BOD33_PSEL_DIV2;

while(SUPC->STATUS.bit.B33SRDY==0);

SUPC->BOD33.reg = SUPC_BOD33_HYST | SUPC_BOD33_ACTION_INT | SUPC_BOD33_RUNSTDBY | SUPC_BOD33_LEVEL(30) | SUPC_BOD33_PSEL_DIV2 | SUPC_BOD33_STDBYCFG;

while(SUPC->STATUS.bit.B33SRDY==0);

SUPC->BOD33.reg = SUPC_BOD33_ENABLE | SUPC_BOD33_HYST | SUPC_BOD33_ACTION_INT | SUPC_BOD33_RUNSTDBY | SUPC_BOD33_LEVEL(30) | SUPC_BOD33_PSEL_DIV2 | SUPC_BOD33_STDBYCFG;

while(SUPC->STATUS.bit.B33SRDY==0);

//RevA1 errata ref #13918 workaround below

SUPC->INTFLAG.reg = SUPC_INTFLAG_BOD33DET;

SUPC->BOD33.reg = SUPC_BOD33_ENABLE | SUPC_BOD33_HYST | SUPC_BOD33_ACTION_RESET | SUPC_BOD33_RUNSTDBY | SUPC_BOD33_LEVEL(30) | SUPC_BOD33_PSEL_DIV2 | SUPC_BOD33_STDBYCFG| SUPC_BOD33_ACTCFG;

while(SUPC->STATUS.bit.B33SRDY==0);

}

void hardware_setup_part1( void )

{

PORT->Group[1].DIR.reg |= (1<<0); //PB00 is an output

PORT->Group[1].DIR.reg |= (1<<1); //PB01 is an output

//Enable XOSC32K (for RTC)

OSC32KCTRL->XOSC32K.reg = OSC32KCTRL_XOSC32K_ENABLE | OSC32KCTRL_XOSC32K_XTALEN|\

OSC32KCTRL_XOSC32K_EN32K|\

OSC32KCTRL_XOSC32K_RUNSTDBY | OSC32KCTRL_XOSC32K_STARTUP(4);

while(OSC32KCTRL->STATUS.bit.XOSC32KRDY==0);

// $$$ init device phase 1 (device specific startup)

RTC_Start();

//Running at 12MHz in PL0, requires 1 waistate on flash

NVMCTRL->CTRLB.bit.RWS = 1;

//Use xMHz system clock

OSCCTRL->OSC16MCTRL.bit.FSEL=2;

//Workaround for errata #13674

SUPC->VREF.reg |= 1<<8;

//nLDO/Buck : Select Buck

SUPC->VREG.bit.SEL = 1;

while(SUPC->STATUS.bit.VREGRDY==0);

//Use BOD for voltage integrity

BOD_init_sampled();

//Enable RTC interrupts

NVIC_ClearPendingIRQ(RTC_IRQn);

NVIC_SetPriority(RTC_IRQn, 3);

NVIC_EnableIRQ(RTC_IRQn);

// global interrupt enable

cpu_irq_enable();

}

void hardware_setup_part2( void )

{

// $$$ init device phase 2 (device specific, after TES started)

}

//=============================================================================

/*__interrupt*/ void pltTimer_ISR (void)

{

tesTimerInterrupt();

// $$$ Code to finish Sleep mode.

}

void RTC_Handler(void)

{

volatile uint32_t i;

RTC->MODE0.INTFLAG.reg = RTC_MODE0_INTFLAG_CMP0;

NVIC_ClearPendingIRQ(RTC_IRQn);

tesTimerInterrupt();

}

 

作者

Frank Riemenschneider硕士工程师,在莱布尼兹汉诺威大学就读电子工程,专门从事微电子。直到2015831日,他在《ELEKTRONIK》贸易杂志担任编辑。现在担任《DESIGN & ELEKTRONIK》贸易杂志的主编。他是微控制器,处理器,FPFAs,内存,DSP和半导体制造领域的专家。在2014年,他顺利地通过了ARM认证。

Dr. Claus Kühnel毕业于德勒斯登技术大学的信息电子学专业,而后接受了生物医学工程教育。Claus负责实验室装置的内嵌系统的开发。除了这些专业任务之外,他已经出版了为数众多的与微控制器问题有关的文章和专著。2015年5月,他的名为"Arduino for the Cloud: Arduino Yún and DraginoYún Shield" (ISBN 978-1-62734-035-9)的新书由Universal-Publishers, Inc出版发行。欲了解更多信息,请查看其作者页面 www.ckuehnel.ch/author-page及其Linkedin站点ch.linkedin.com/in/ckuehnel

文献
  1. Riemenschneider, F.: ARM TechCon 2014年 - EEMBC基准测试结果揭示低功耗微控制器。
    www.elektroniknet.de/halbleiter/mikrocontroller/artikel/113319/
  2. MSP-EXP430FR5969 LaunchPad开发套件。 www.ti.com/tool/MSP-EXP430FR5969
  3. 在MSP-EXP430FR5969中启动EEMBC ULPBench www.ti.com/lit/an/slaa650a/slaa650a.pdf
  4. MSP430FG4618 Experimenter 实验板. www.ti.com/tool/MSP-EXP430FG4618
  5. 在MSP-EXP430FR5969中启动EEMBC ULPBench www.ti.com/lit/an/slaa650a/slaa650a.pdf
  6. Riemenschneider, F.: ARM Cortex-M4 – 80 DSP和SIMD80的新指令。 www.elektroniknet.de/halbleiter/sonstiges/artikel/1669/
  7. Riemenschneider, F.: ARM 现今最小的32-bit内核简介 www.elektroniknet.de/halbleiter/mikrocontroller/artikel/86579/