前回に引き続き、テキサス・インスツルメンツ社(TI)のMSP430™ LaunchPadバリュー・ライン開発キットを用いて、実際のマイコンのハードウェア、ソフトウェアの開発方法を体験しながら学びます。今回は、マイコンの省電力モードへの移行と、省電力モードから復帰するための割り込みについて説明します。
省電力モードはなぜ必要?
マイコンにとってやるべき仕事は、いつも同じようにあるわけではありません。例えば、マイコンを使ってデジタル時計を作った場合、マイコンがやるべき仕事は1秒ごとに発生します。基本的には、
(1)1秒ごとに秒カウントを1増やす。
(2)もし、秒カウントが60秒になれば、分カウントを1増やして秒カウントをクリア。
(3)もし、分カウントが60分になれば、時カウントを1増やして分カウントをクリア。
(4)もし、時カウントが24時になれば、時カウントをクリア。
(5)分、時、秒を表示する。
という仕事を繰り返すだけです。そして、多くのマイコンにとってはこの1回の仕事はごく短時間に終わってしまいます。1秒ごとにタタタタッと仕事をしては、その後は次の1秒(マイコンから見るととても長い時間)をただ待っているだけです。
ただの時計ではなく、キッチンタイマやストップウォッチのように、人間の操作で時間をカウントする機械では、さらに待ち時間が長くなります。人間が機械を操作する頻度は、数分に1度とか、数時間に1度とか、数日に1度とか、長ければ数カ月〜数年にわたって何も操作が行われない場合もあります。
このような場合でも、昔のマイコンはひたすら動作し続けて、時間がたつのを待っていました。マイコンというのは、基本的に常に一定のクロックに従ってプログラムの命令を取ってきては実行するように作られているためです。
電池で動作する機器にマイコンがたくさん使われるようになると、これが問題になります。ただ待っているだけでも、マイコンが動作していればその間に少しずつ電力を消費するので、電池が減ってしまうのです。
省電力モードへの移行と、省電力モードからの復帰
最近のマイコンでは、ただ待っているだけのときは命令の実行を停止して、電力の消費をなるべく抑えるように、実行モードの他に省電力モードを用意することが多くなっています。命令の実行を停止するだけでなく、その他の機能を停止したりクロック発振を停止して、より消費電力を削減したものも多くなっています。
(注)省電力モードはマイコンによって「スリープ」、「スタンバイ」、「アイドル」などいろいろな呼び方があって、機能もいろいろなので、ここでは総称して「省電力モード」と呼ぶことにします。
省電力モードから実行モードへの復帰には、割り込みのしくみが利用されます。元々、割り込みとは、マイコンがプログラムを実行している最中に外部から信号が入力されると、プログラムの実行を中断して特別なプログラムを実行させるためのしくみです。これを拡張して、省電力モードのときに外部から信号が入力されると、省電力モードを中断して特別なプログラムを実行するようにしたものです。
(注)割り込みによって実行される特別なプログラムは「割り込みサービスルーチン」「割り込みハンドラ」などと呼ばれます。ここでは、簡単に「ハンドラ」と呼ぶことにします。
図 通常の割り込みと、省電力モードからの復帰のための割り込み
省電力モードからの復帰には、復帰後に実行モードに戻るものと、復帰後に省電力モードに戻るものがあります。MSP430では、この両方を簡単に使い分けられます。
MSP430の省電力モードとプログラミング
MSP430の場合、LPM0からLPM4まで5レベル(最近の製品はさらにレベルを細分化したものもある)の省電力モードをもちます。それぞれ、実行モード中に所定のレジスタを設定するだけで省電力モードに移行します。本連載の第15回に、LPM4とLPM0を使った割り込みプログラムの実例があるので見てみましょう。なお、今回はプログラムのうちメインルーチンとハンドラだけを掲載します。プログラム全体は、第15回を参照してください。
LPM4とスイッチ割り込みを使ったプログラミングの例
リスト1は、LPM4の省電力モードからスイッチ割り込みでハンドラを実行し、その後は省電力モードに戻るプログラムです。LPM4ではCPUとすべてのクロックが停止し、入出力ポートだけが機能を続行します。MSP430の内蔵タイマも止まってしまうので、タイマ割り込みで復帰することができません。
メインルーチンは、46〜48行目のわずか3行です。46行目のinitialize()と47行目のdisplay()を実行した後、48行目の
_BIS_SR(LPM4_bits + GIE)
でLPM4に移行します。この48行目の「LPM4_bits」をセットすると、MSP430はLPM4になります。
メインルーチンはここで終わっています。このプログラムでは、LPM4に入ったら通常の実行モードには戻りません。この続きのプログラムを書いたとしても、実行されることはありません。
そして、スイッチが押されたときだけスイッチ割り込みが入り、53〜58行目の割り込みハンドラが実行されます。ということは、スイッチが押されない限り、MSP430はほとんど停止したような状態であり、LEDの点灯以外の電力はほとんど消費しないということです。
なお、MSP430を実行モードに復帰させたい場合には、この割り込みハンドラの中で「LPM4_bits」をリセットします。そうすると、割り込みハンドラの終了後に49行目から命令を実行しようとします。したがって、その場合は49行目以降にメインルーチンの続きを書いておかないと、最悪の場合は暴走してしまいます。
LPM0とタイマ割り込みを使ったプログラミングの例
リスト2は、LPM0の省電力モードからタイマ割り込みでハンドラを実行し、その後は省電力モードに戻るプログラムです。LPM0ではCPUとメインクロック(MCLK)は停止しますが、サブクロック(SMCLKとACLK)は停止せず、タイマも動作を継続します。
※MSP430はTexas Instruments Incorporatedの商標です。その他すべての商標および登録商標はそれぞれの所有者に帰属します。
TIのマイコン製品の詳細はこちら
提供:日本テキサス・インスツルメンツ株式会社
アイティメディア営業企画/制作:EDN Japan 編集部/掲載内容有効期限:2014年3月31日
Copyright © ITmedia, Inc. All Rights Reserved.