はじめに

こんにちは、ぐぅです。
毎日暑くて溶けそうですが、相変わらず研修を頑張っています。
先日、マイコンのプログラミング研修を行いました。
マイコンとは、小さなパソコンみたいなもので、そこにプログラムを書き込むと色々な動作を行ってくれます。

そういえば、FPGA の中にも Nios® II や Arm® Cortex™-A9 というマイコンを入れることができるみたいです!
あとでぽきに聞いてみよう!

そんなマイコンの頭脳ともいえるのが今回紹介する「CPU」です。
CPU は様々なデバイス(タイマーやクロックなど)に命令を出す、リーダーのような存在です。

研修で「割り込みプログラム」を作成したときに 「CPU ってすごいんだなぁ~」 と思ったエピソードをまとめてみました。
※ 割り込みプログラムとは、ある動作を行っている最中に別の動作に強制的に切り替えることです。

研修では赤色 LED を点滅させるプログラムに、緑色の LED を点滅させるプログラムを割り込ませる、割り込みプログラムを作成しました。
そのプログラムを作成するにあたって、以下のような課題が出ました。

 

課題
「割り込み発生時以外は CPU は動作させない(オフにする)低消費電力モードのプログラムを組んでください」

この研修で使用したマイコンには以下のような 3 つのクロックが含まれていました。

そして課題の「低消費電力モード」とは、
M クロック(MCLK)と CPU をオフにし、A クロック(ACLK)と SM クロック(SMCLK)をオンにした状態のことです。

これを見て私はすぐに思いました。
「低消費電力モードだから CPU は割り込み発生時以外は動いていない…」

しかし!
このプログラムの命令を出しているのは何?
クロック? タイマー?
いいえ、 CPU です

あれ? もしそうだとしたら、
割り込み発生時も CPU はオンなのでは????

解説

実は CPU は、自分が止まっている間の他のデバイス(クロックやタイマー)たちの仕事まできちんと指示していたのです。

これは一体どんなことなのか、図を使って説明します。

まずはじめに、CPU は ACLK と SMCLK にこれからの作業についての指示を出します。
(今回の研修では ACLK は 2 kHz、 SMCLK は 4 MHz で動作するよう設定)

そして CPU は時間まで昼寝をします。
この時に CPU は自分で目覚まし時計(タイマー A)をセットしてから昼寝をするのです。
(CPU はタイマー A が割り込みを発生させるタイミングをあらかじめ設定する。そして低消費電力モードをオンにする)

■ 割り込みが発生するまで

CPU は昼寝をし、それ以外のデバイス(タイマー A、 ACLK、 SMCLK)たちは事前に CPU から受けた指示通りに働きます。
(低消費電力モード中は、 MCLK と CPU は停止し、 ACLK は 2 kHz、 SMCLK は 4 MHz で動作する)

■ 割り込み発生時

時間になると目覚まし時計が鳴り、CPU は目を覚まします。
(タイマー A が 4 秒をカウントしたらタイマー A から CPU に割り込みが発生。 低消費電力モードが終了し、CPU は動作再開)

そして他のデバイスたちと一緒に CPU も働きます。

このようにして CPU は自分の働いていないときの指示を出すだけでなく、寝るタイミングと起きるタイミングもしっかりと自分で決めていたのです。

一連の流れを時系列で見てみると、以下の図のようになります。

まとめ

CPU は自分のことも周りのデバイスたちのこともしっかりと管理できる、優秀なリーダーだった。

■ 補足

CPU の消費電力は他のデバイスに比べ大きいため
今回紹介したような割り込みプログラムにより CPU を動かす時間を必要最小限にすることで、消費電力を抑えることができるのです。
消費電力を抑えることはバッテリー寿命を延ばすことにも繋がります。

■ ぐぅのつぶやき

自分が眠っている間のことまで予め指示しておくなんて、CPU って本当にデキるヤツだなぁ~。
ま、このプログラムを実際に組んだのは私なんだけどね (^^)