超低消費電力MCUデータシートの定義を凌駕して

エネルギー消費効率とは、実際のところ何を意味するのか?-

著者Claus Kuhnel博士Frank Riemenschneider
Original Article published in Elektronik 16/2015, starting on page 26 on August 11, 2015
http://www.elektroniknet.de/halbleiter/mikrocontroller/artikel/120997

バッテリー駆動デバイスやもののインターネット化(IoT)専用コントローラにおいて、バッテリー消費量は大変重大です。毎晩、バッテリー駆動デバイスを充電しなければならないのは、最悪でしょう。

マイクロプロセッサやマイクロコントローラのメーカーは、これらデバイスの消費電力を大幅に減らすことのできる、半導体技術や回路技術を次々と製品に導入しています。

The Embedded Microprocessor Benchmark Consortium(EEMBC)は、1997年に設立され、開発したシステムの性能やエネルギー消費量を把握し、個別アプリケーションに最も適したプロセッサを開発者が選択できるようなベンチマークを開発してきました。たとえば、EEMBCのCoreMark, MultiBench,および FPMarkがそれに該当します。

最近EEMBCは、超低消費電力マイクロコントローラのエネルギー消費量を正確にかつシステム的に分析、比較するため、ULPBenchおよびそれに付随するEnergyMonitorを開発しました。EnergyMonitorは動作電圧が3V、消費電流が28mA以下のデバイスのエネルギー消費量を測定できます。

IoTのエッジノードか他のバッテリー駆動アプリかにより、超低消費電力(ULP)の条件は大きく変化します。電源リソースが非常に限られている場合もっとも低い電力消費が求められます(例:エナジー・ハーベスト)。セキュリティ・システムでは大半の時間マイクロコントローラはスリープモードにあり、たまにタスクを実行するために起き上がります。またULPではシステムを迅速にスリープモードに戻すため、すべてのタスクは限られた時間内に実行されます。にも関わらず、実装上は、ULPの条件を満足するため、複数の動作モードを組み合わせます。何か月や何年もの継続動作を要求されるULPアプリでは、システム動作を最適化するためにいくつものチャレンジを克服する必要があります。ULPの特性を仕様やデータシートに反映したマイクロコントローラが増えてきていますが、現実世界でそれらの特性を再現するのは難しいです。

EEMBCのULPBenchは、マイクロコントローラのエネルギー消費効率を高い再現性で、評価、比較する方法を提供します。EEMBC分科会で用いられたULPBenchの方法論は、すべての関連メーカー(分科会メンバー)同席の元、定義されました。したがってこの記事に示された測定結果は、その関連メーカー自身が否定できるものではありません。

ULPBenchの説明

ULPBenchは二つの部分からなるアプローチをとります。一番目に、マイクロコントローラの効率を測るいくつかのソフトウェア・テストがあります。これらのテストには、8ビット、16ビット、32ビットマイクロコントローラ間で共有されるストレス・パターンがあります。またこれらのテストは、マイクロコントローラの低消費電力モードとアクティブ・モードを組み合わせており、アクティブな状態と低消費動作時の効果を分析することが可能です。2番目にEEMBC EnergyMonitorがあります。EnergyMonitorは物理的なエネルギー消費量を測定するためのEnergyMonitorボードです。ULPBenchの詳細は、Electronikに掲載された記事「低消費電力マイクロコントローラのEEMBCベンチマーク結果」[1] にあります。

ULPBenchを用いた測定の準備

最初のステップ:

Figure 1: EEMBC EnergyMonitor Board 図 1: EEMBC EnergyMonitor ボード
(クリックしてフルサイズ・イメージを見る)

この時点でEnergyMonitorは、マイクロコントローラがULPBench-CoreProfileソフトを実行中であることを期待します。EEMBCはULPBench-CoreProfileソフトのソースコードを提供します(ディレクトリ:benchmarks, TES workloads, platforms)。

DUTがEEMBCのサポートする標準プラットフォームである場合、ビルドのインフラストラクチャはソースコードのプラットフォーム・ディレクトリーから直接入手可能。そうでない場合、ユーザーはEEMBCの提供するテンプレート・ディレクトリーを使って、ベンチマークをターゲット向けにポーティングする必要があります。EEMBCコミュニティは将来、より多くのポーティング例が出てくることを期待しています。

ULPBench-Core-Profileバイナリをターゲットにインストールします。EnerguMonitorのVCCとGNDを接続し、EnergyMonitor GUIを起動したら(bin/Energy Monitor.exe)、公式ベンチマーク結果を得ることは簡単です。

ULPBench-EnergyMonitor

「Run ULPBench」ボタンをクリックするとEnergyMonitorは、テストボードに電流を供給し、core profile上でエネルギー消費量を測定します。

ベンチマーク実行中、ステータスはEnergyMonitor GUIの「Accumulated Energy(uJ)」グラフに表示されます。実行終了後GUIはEEMBC ULPMarkを計算し、画面右上に表示します。各サイクルにおける平均エネルギー消費量はGUIの「History」ボックスに表示されます。

ベンチマークの実行が成功したら、File menuの「Submit」オプションを選び、EEMBCウェブサイトデータベースに数値をレポートできます。次にウェブ・ブラウザのサブミッション・ページが開くので、ユーザーはターゲット・デバイスの詳細を入力することができます。

解析されたプラットフォーム

このセクションでは我々の解析したマイクロコントローラにつぃて話します。また各プラットフォームでのULPBench実装体験談を話します。

テキサス・インスツルメンツ社 MSP430FR5969 LaunchPad 開発キット

テキサス・インスツルメンツ社MSP430FR5969 は、超低消費電力、長寿命、高速書き込みスピードを特徴とする、FRAM(強誘電体RAM)を内蔵した16ビットマイクロコントローラです。MSPEXP430FR5969 LaunchPad開発キット[2] は、MSP430FR5969の評価モジュールです。

Figure 2: EEMBC ULPBench result for the MSP430FR5969 図 2: MSP430FR5969についてのEEMBC ULPBench測定結果
(クリックしてフルサイズ・イメージを見る)

EEMBC ULPBenchには「Getting Started」が同梱され、それにはMSP EXP430FR5969 [3] について1セクションがさかれています。このベンチマークを実装するユーザーにとってとても助けになります。そのドキュメントではIAR社 Embedded Workbench Kickstart (無償 8KB バージョン)を用いることを推奨しています。KickstartはIAR社ウェブサイトにて www.ti.com/tool/iar-kickstartよりダウンロード可能(注記:IAR社への登録が必要)です。図2にULPBench結果が示されています。121という値は良い数値ですが、FRAMから期待される程高くありませんでした。この結果については次のセクションで説明します。

テキサス・インスツルメンツ社MSP430FG4618/F2013実験用ボード

テキサス・インスツルメンツ社MSP430ファミリーは多くの種類を有する超低消費電力16ビットマイクロコントローラです。その大半にはFRAMでなく、フラッシュメモリが内蔵されています。TI社がEEMBC ULPBenchウェブサイトにこれらのフラッシュベース・マイクロコントローラのULPBench値を公表しないのは不思議です。

今回の実験ではMSP430FG4618実験用ボード[4] を用いました。 「The getting started」[5] ドキュメントは汎用的指針として用い、www.ti.com/tool/iar-kickstart よりダウンロード(IAR社への登録が必要)できる、IAR社 Embedded Workbench Kickstartの無償バージョンを用いることを推奨します。

実験では、この記事の前のセクションで用いたコードを使ってください。ただし、Optionsセクションでは他のマイクロコントローラを選択してください。

Figure 3: EEMBC ULPBench for the MSP430FG4618 図 3: MSP430FG4618についてのEEMBC ULPBench測定結果
(クリックしてフルサイズ・イメージを見る)

実験ボード上の32kHz水晶X1(タイプLFXT)は付け直す必要がありました。図3にMSP430FG4618についての、EEMBC ULPBench実行結果を示します。結果はたった31.74で、非常に低い値です。この独自16ビットCPUの処理効率が良くないため、他社品に比べ、所定ワークロードを実行するのに、かなり長い時間アクティブモードに滞留していたのが原因だと思われます。さらにMSP430は180nmプロセスで製造され、それはアクティブモードでエネルギー消費量の大きな製造プロセスです。

MSP432P401Rローンチパッド

テキサス・インスツルメンツ社MSP432P401xコントローラファミリーは超低消費電力ミックスドシグナルマイクロコントローラです。独自16ビットCPUコアでなく、ARM社Cortex-M4プロセッサ[6]をコアとし、多様な構成オプションとペリフェラルを提供します。

今回の実験では「Blink」プログラムを1回だけ実行することができましたが、ULPBenchを実行させるのに苦労しました。原因はコントローラの32kHz水晶クオーツにあり、TI社に問題分析とボード交換を手伝ってもらいました。

Figure 4: EEMBC ULPBench for the MSP432P401R 図 4: MSP432P401Rについての EEMBC ULPBench測定結果
(クリックしてフルサイズ・イメージを見る)

しかしボード交換後も同様の問題が再現し、ULPBenchの起動は再現性が悪かったです。原因はクオーツパラメータの設定にあり、当初一番弱いドライブ能力を選んでいましたが、それより少し強いドライブ能力に設定しなおすことで、安定起動するようになりました。MSP432P401RのULPBench実行結果を図4に示します。このデバイスは前のセクションで議論した16ビット品より約5倍エネルギー消費効率が高いことがわかります。

マイクロチップ社PIC24FJ64GA202

マイクロチップ社PIC24FJ64GA202はハードウェア暗号モジュールを内蔵する16ビットマイクロコントローラです。eXtreme低消費電力技術(XLP)を用いています。また128kBフラッシュ、8kB RAM、および先進ペリフェラルを内蔵します。ターゲットマーケットは低消費組み込みセキュリティ分野です。

Figure 5: EEMBC ULPBench for the PIC24FJ64GA202 図 5: PIC24FJ64GA202についてのEEMBC ULPBench測定結果
(クリックしてフルサイズ・イメージを見る)

ULPBenchをポーティングするにあたり、マイクロチップ社はハードウェアsetup.cファイルを提供してくれました。マイクロチップ社の専用コンパイラでコードをビルドしたのち、ULPBench実行結果は40と出ました。しかしマイクロチップ社が提供したコンパイル済バイナリを実行したところ、結果は77.43となりました(図5)。

この違いを議論すべくマイクロチップ社とカンファレンスコールを行いました。コントローラがデバッグモードにないこと、JP9ジャンパーを外すこと、EnergyMonitorをJ10(2 および3)に接続することを確認しました。これらのステップは寄生電力リークを防ぎます。しかし77.43の値でもPICはトップスポットに入りませんでした。その原因はこのマイクロコントローラの計算能力が相対的に低いため、アクティブモードに長時間滞留していたからだと推測します。

STマイクロ社STM32L476RG

Figure 6: EEMBC ULPBench for the STM32L476RG 図 6: STM32L476RGについてのEEMBC ULPBench測定結果
(クリックしてフルサイズ・イメージを見る)

STマイクロ社STM32L476xxデバイスは最大80MHzのクロック周波数をサポートするARM社Cortex-M4ベースの超低消費電力マイクロコントローラです。Cortex-M4は、ULPBenchの効率向上には役立ちませんが、単精度浮動小数点ユニット(FPU)を有します。STマイクロ社は、STM32L476RGを研究する上で安価でフレキシビリティのある、Nucleoと呼ぶSTM32開発キットを提供します。ST社は、Nucleo-L476向けのプロジェクト全体を提供し、Keil社IDE向けパッチも提供しました。我々がULPBenchコードをビルドした際、30個のコンパイル・エラーが最初に発生しました。ST社のサポートをコンパイル、ダウンロード、デバッグ時に受けたものの、EnergyMonitorの値は依然として比較的高いものでした。EEMBC ULPBenchの結果はSTM32L476RG(図6)については121といういい値が得られましたが、その値は同じCortex-M4ベースのTI社MSP432程良いものではありません。

フリースケール社FRDM-KL27Z

FRDM-KL27ZはARM Cortex-M0+ [7] ベースのフリースケール社Kinetics L-KL17, KL27ファミリー向けの低コスト開発プラットフォームです。このプラットフォームにはフラッシュメモリのプログラミングと制御向けにデバッグ・インターフェイスがついています。

我々の消費エネルギー分析プロジェクトを応援するため、フリースケール社はIAR社 Workbench用として、KL27ZにULPBenchポートを提供してくれました。ハードウェア設定の大半はFRDM-KL27Zユーザガイドを参照することで可能です。しかしフリースケール社は、ULPBenchバイナリを、JLinkプログラマーの追加によらず、OpenSDA上のプラットフォームにダウンロードする必要のあることを弁明しました。

Figure 7: EEMBC ULPBench for the 32-bit KL27Z 図 7: 32ビットKL27ZについてのEEMBC ULPBench測定結果
(クリックしてフルサイズ・イメージを見る)

図7は32ビットKL27Zの結果として80.17が得られたことを示します。この結果は、Cortex-M0+がマイクロチップ社独自16ビットCPUよりはるかに数値演算能力があるにも関わらず、マイクロチップ社16ビットPICよりちょっとしか優れてないことがわかります。

Silicon Labs社Giant Geckoスタータキット(EFM32GGSTK3700)

Giant Geckoスタータキット(EFM32GGSTK3700)は、EFM32GG990F1024を評価するためのプラットフォームです。EFM32GG990F1024は最大クロック周波数48MHzのARM社 Cortex-M3ベースのマイクロコントローラです。このマイクロコントローラはノルウェーの会社Energy Micro社の買収で得た製品ファミリーの一部です。ULPBenchは、Simplicity社StudioおよびIAR社Embedded Workbenchを用いて、EFM32向けにビルドできます。

Figure 8: EEMBC ULPBench for the EFM32GG990F1024 図 8: EFM32GG990F1024についてのEEMBC ULPBench測定結果
(クリックしてフルサイズ・イメージを見る)

Energy Micro社は、そのCortex –M3ベースのEFM32を「世界で最もエネルギーフレンドリーなマイクロコントローラ」だと唄ったにも関わらず、ULPBenchの結果はたった59でした(図8)。 その原因はTSMC社の古い製造プロセス180nmを用いたことです。数年前までMCUは主力ファブで製造されませんでしたが、IoTエッジノードのチップに対するニーズの高まりが、この状況を急速に変えつつあります。

Silicon Labs社Zero Geckoスタータキット(EFM32ZGSTK3200)

Zero Geckoスタータキット(EFM32ZG-STK3200)はEFM32ZG222F32の評価プラットフォームです。Silicon Labs社は、Cortex-M3 MCUに加えて、もう一つのARM社 Cortex-M0+ベースのマイクロコントローラのカテゴリーを有します。これらのMCUは、最大クロックスピードが24MHzで、Geckoファミリーの一部です。

Figure 9: EEMBC ULPBench for the EFM32ZG222F32 図 9: EFM32ZG222F32についてのEEMBC ULPBench測定結果
(クリックしてフルサイズ・イメージを見る)

ドキュメント「Getting Started with EEMBC ULPBench on EFM32ZGSTK3200」にULPBenchの実装法が記載され、Simplicity社StudioおよびIAR社Embedded Workbenchを用いていることがわかります。EEMBC ULPBenchの結果は115(図9)となり、この値はSilicon Labs社Cortex-M3ベースの派製品のおよそ2倍近いものでした。ULPBenchの結果について、同じCortex-M0+ベースのSilicon Labs社とフリースケール社のものを比較すると、35近い相違があります。これは前者のデバイスがTSMC社 180ELL(「超低漏洩電流」)プロセスを製造に用いているからだと思います。

アトメル社SAML21

この新しいスマートプラットフォームは、複数年のバッテリー寿命を要求されるIoTアプリケーション向けに開発されました。SAM-L21ファミリーデータシートによると、このデバイスはアクティブモードで35uA/MHz、スリープモードで200nA消費します。さらに、フルスピードUSBホストとデバイス、AES、容量性タッチセンシングもサポートします。SAM-ARM Cortex-M0-L21+ベースのマイクロコントローラの評価に便利な、アトメル社SAM Smart L21 Xplained Pro評価キットを我々の分析に用いました。

アトメル社は今回の我々の分析のために、Xplained Pro評価キットの改造法を教えてくれました。 具体的には評価ボード上の一部のSMD部品の取り外しとトレースの切断です。これらは浮遊消費電力(例:ボード上のマイクロコントローラ以外のものにパワーを供給する)を防ぐために必要です。

ユーザー・プログラムはXplained Pro評価キットとアトメル社組み込みデバッガー(EDBG)を使ってUSB経由でダウンロード可能です。しかしトレースを切断したので、もはやそれはできません。 そのかわり、10ピン・デバッグ用コネクタ経由で、アトメル社SAM-ICEまたはJ-Link JTAGエミュレータを用いることができます。

Figure 10: EEMBC ULPBench for the Atmel SAM L21 図 10: Atmel SAM L21についてのEEMBC ULPBench測定結果
(クリックしてフルサイズ・イメージを見る)

我々がULPBenchコードをビルドしたとき、アトメル社Studioでのコンパイルは速く、エラーも発生しませんでした。ULPBenchを実行したとき、低電圧検出用フューズはディスエーブルされてました。アトメル社SAM L21のULPBenchの結果は161(図10)でした。さらにすばらしいことには、その結果が量産前の初期品で得られたことです。Rev.Bのデバイスではさらにその値が改善されるとアトメル社は言ってました。我々が分析したすべてのCortex-M0+ベースのMCUの中でSAM21Lは明らかにナンバーワンでした。その値はフリースケール社KL27を100%上回ります!

ルネサスRL78

Figure 11: EEMBC ULPBench for the RL78 図 11: RL78についてのEEMBC ULPBench測定結果
(クリックしてフルサイズ・イメージを見る)

この16ビットRL78/G14マイクロコントローラは、低消費電力(CPU: 66uA/MHz、スタンバイ(ストップ):240nA)と高い演算能力(44DMIPS(32MHz))を備えます。本来ルネサス社オンチップ・デバッグ・エミュレータE1とプログラマーを有する、QB-R5F104LE-TBターゲットボードを使うべきでしたが、ルネサス社が今回のプロジェクトをサポートできなかったため、ルネサス社の代理店に直接分析をお願いしました。ULPBenchの結果は84.67(図11)となり、RL78は今回測定したマイクロチップ社のPICと同等の値をたたき出しました。

ボトムライン

EEMBC ULPBenchはマイクロコントローラの製造業者のULP特性に関するアピールをバックアップする数値データを提供します。ULPBenchの最初のバージョンは、マイクロコントローラのペリフェラルのエネルギー消費量を測定しません。CPUとメモリだけです。ULPBenchの次のバージョンはA/Dコンバータ、SPI、PWMなどのペリフェラルをサポートする予定です。

我々が分析したマイクロコントロ-ラは多種に渡ります。それらはすべて、「超低消費電力」MCUとしてマーケティングされています。同時にそれらの製造メーカーは、EEMBCのULPBench分科会に所属し、このベンチマークおよび関連した測定手法をサポートします。

またこの調査ではIAR社Embedded Workbench、Keil社MDK 5、マイクロチップ社MPLAB 2.35およびアトメル社Studio 6.2を開発環境として使いました。

また調査ではハードウェアやツールチェインの構成について、安心感のある技術サポートを製造メーカーから得ることができました。多くのEメールや電話会議を行うことで、ここに示した結果を得ました。

Figure 12: The collective EEMBC ULPBench scores 図 12: EEMBC ULPBenchスコア・サマリ
(クリックしてフルサイズ・イメージを見る)

EEMBC ULPBenchスコアのまとめを図12に示します。スコアの最大値は圧倒的に32ビットARM CPU(M4とM0+)からのものです。16ビットCPUは、TI社のFRAMコントローラの製品を除き、太刀打できませんでした。このTI社製品は、CPUの弱みをカバーする以上に、メモリシステムの電力効率が高いです。

次に何をするか?

ULPBenchを用いることで、実世界の超低消費電力アプリケーションを正しく議論することが可能です。アプリケーションは様々なデューティサイクル(アクティブモードVSスリープモード)やワークロードを持っており、それが様々な結果を生みます。一方、製造メーカーはULPBenchのフォーマットを標準化しました。実世界では様々な環境がありますが、このベンチマークは、どのマイクロアーキテクチャやどの製造技術がエネルギー消費効率の観点で優れているかを示す指標となります。

究極的には、あなたは適切なチップを選択するために、自分のアプリケーションで詳細な評価をする必要があるでしょう。しかしULPBenchおよびこの分析結果を用いることで、あなたは多くの時間を節約することができるでしょう。したがって我々は継続して最新の製品および次なるEEMBC ULPBenchにフォーカスしていきます。

補足:アトメル社SAML21を用いた実装例

このセクションではSAML21を例とり、ULPBenchを実行させるのに必要なポーティング作業を説明します。ULPBenchの「template」ディレクトリーの中に、ボード固有のポーティングの記載があります。具体的には以下に示すよう、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氏は、ドイツ、ハノーバーにあるLeibnitz大学で電気工学を学び、マイクロエレクトロニクスが専門分野です。彼は、2015831日まで業界紙ELEKTRONIKの編集者の一人でしたが、現在は業界紙DESIGN & ELEKTRONIKの編集長です。マイクロコントローラ、プロセッサ、FPGA、および半導体製造技術を専門にしています。また彼は、2014年に「ARM Accredited Engineer 」試験に合格しました。Riemenschneider氏はいくつかのCPUアーキテクチャーについて、プログラミングとデバッグに関する書物を執筆しました。

Claus Kühnel博士は、ドレスデン工科大学情報電子科を卒業し、その後同大学バイオメディカル・エンジニリング科を卒業。Clausは組み込みシステムの開発に従事しています。これら専門的な実務の他に彼は、マイクロコントローラ関連の記事や書籍を出版しています。20155月に、Universal-Publishers社より"Arduino for the Cloud: Arduino Yún and Dragino Yún Shield" (ISBN 978-1-62734-035-9)を新しく出版しました。彼の詳細についてはwww.ckuehnel.ch/author-page および Linkedin site ch.linkedin.com/in/ckuehnel をご覧ください。

 

文献
  1. Riemenschneider, F.: ARM TechCon 2014 - EEMBC Benchmark Results Revealed for Low-Power Microcontrollers.
    www.elektroniknet.de/halbleiter/mikrocontroller/artikel/113319/
  2. MSP-EXP430FR5969 LaunchPad Development Kit. www.ti.com/tool/MSP-EXP430FR5969
  3. Getting Started With EEMBC ULPBench on MSP-EXP430FR5969. www.ti.com/lit/an/slaa650a/slaa650a.pdf
  4. MSP430FG4618 Experimenter‘s Board. www.ti.com/tool/MSP-EXP430FG4618
  5. Getting Started With EEMBC ULPBench on MSP-EXP430FR5969. www.ti.com/lit/an/slaa650a/slaa650a.pdf
  6. Riemenschneider, F.: ARM Cortex-M4 - 80 new instructions for DSP and SIMD. www.elektroniknet.de/halbleiter/sonstiges/artikel/1669/
  7. Riemenschneider, F.: ARM Introduces the Smallest 32-bit Core of All Time. www.elektroniknet.de/halbleiter/mikrocontroller/artikel/86579/