ハードウェアの仕組みとソフトウェア処理 ―― マイコンの動作を理解する

宮崎 仁

5.割り込み処理を理解する

 マイコンは動作クロックに従って命令コードを取り出し,実行します.この処理は,各命令ごとに決められたクロック数で行われます.従って,同じソフトウェアでも動作クロックの周波数を高くすれば高速になり,低くすれば低速になります.マイコン内部の時間の流れは,外界の時間の経過とは無関係に,動作クロックで決まります.ある命令を外界の時間に合わせて実行しようとすると,命令コードだけではうまくいきません.

 また,マイコンの動作は人間や機械などから見れば,極めて高速です.外界の時間に合わせて動作するソフトウェアを作るには,無駄なループで長い待ち時間を作って,マイコンの方を待たせなければなりません.

 この問題を解決する有力な方法として,割り込みが用いられています.

● 外部からの信号で起動する割り込みの仕組み

 割り込みとは,あらかじめ用意したサブルーチンを,外部からの信号によって起動する仕組みです(図15).割り込みのために特別に用意したサブルーチンを「割り込みサービス・ルーチン」あるいは「割り込みハンドラ」と呼びます.


図15 割り込みの仕組み
外部要因が発生したタイミングでサブルーチンを起動したいとき,割り込みを利用する.割り込み要求信号が来ると,CPUは通常の命令の実行を中断して,割り込みサービス・ルーチンを呼び出す.割り込みサービス・ルーチンも,ソフトウェアの一部としてあらかじめ準備しておく.

 

 CPUは,動作している間,常にクロックに従って命令の取り込みと実行を繰り返しています.同時に,割り込み要求信号の状態も調べています.もし割り込み要求信号がきていたら,命令の実行が終わった後に次の命令を取り出さず,あらかじめ用意した割り込みサービス・ルーチンを呼び出します.元の処理ルーチンは,実行が一時中断されます.このとき,通常のサブルーチンの呼び出しと同様に,戻りアドレスをスタックに記憶させておきます(図16).


図16 割り込みサービス・ルーチンの呼び出し
マイコンの内部では,自分自身のクロックに従って命令を実行し続けている.割り込み要求信号がきていたら,命令の実行が終わった後に次の命令を取り出さず,割り込みサービス・ルーチンを呼び出す.この際,戻りアドレスをスタックに記憶させておく.割り込みサービス・ルーチンの処理が終わったら,スタックから戻りアドレスを取り出して,そのアドレスに分岐する.

 

 割り込み要求信号は,多くの場合,マイコンに内蔵または外付けされたI/Oデバイスが発生します.例えば,ほかの装置と通信を行っている通信デバイスは,ほかの装置からデータを受信したときにCPUに割り込み要求信号を出すことができます.この場合の割り込み要求信号は,CPUに受信データを読み出してほしいという要求です.従って,この要求に対応するには,通信デバイスからデータを読み出す処理を割り込みサービス・ルーチンとして作っておけばよいわけです.

 割り込みサービス・ルーチンの末尾には,元の処理ルーチンに戻るための割り込みリターン命令を置いておきます.割り込みリターン命令は,スタックに保存しておいた戻りアドレスを読み出して,その位置に分岐します.これによって,中断していた元の処理ルーチンを再開できます.

● 外部割り込みとタイマ割り込み

 割り込みは,外部からデータを受信した,外部にデータを送信したい,スイッチが押された,表示器に次のデータを表示したいなど,さまざまな外部の要因によって発生します(図17).このようなものを,外部割り込みと呼びます.外部割り込みの場合,要因によって対応する処理は決まっているため,それに合わせて割り込みサービス・ルーチンを作ることができます.


図17 外部割り込みとタイマ割り込み
外部割込みは,外からかかってきた電話のように,いつくるか分からない割り込み.タイマ割り込みは,あらかじめある意図を持って利用する割り込み.

 

 また,マイコンの持つタイマ機能を,割り込みと組み合わせて利用することができます.ほとんどのマイコンには,I/O機能の一つとしてパルス数を数えるカウンタ回路が装備されています.このカウンタ回路にクロックを入力して,一定値に達するまでクロック数をカウントすれば,所定の時間幅を作り出すタイマとして利用できます.

 タイマを起動した後,一定のクロック数に達したら割り込み要求信号を出すようにすれば,ソフトウェアからタイマ機能を容易に利用できます.これをタイマ割り込みと呼びます.

 例えば,処理Aを実行してから,一定時間後に処理Bを実行したいような場合,タイマ割り込みが有効です.CPUは,処理Aを実行したら所定の時間のタイマを起動し,割り込みサービス・ルーチンの中で処理Bを実行するようにします.

 外部割り込みは,外からかかってきた電話のように,いつくるか分からない割り込みといえます.一方,タイマ割り込みは自分でセットした目覚まし時計のように,あらかじめある意図を持って利用する割り込みといえるでしょう.

● 割り込み要因と割り込みベクタ・テーブル

 多数の割り込み要因がある場合,それぞれに対応する割り込みサービス・ルーチンを作っておく必要があります(図18).そして,割り込み要求信号が発生したときには,要求を出している要因に応じて,正しい割り込みサービス・ルーチンを呼び出さなければなりません.そのために用いられるのが割り込みベクタ・テーブルです.


図18 割り込みベクタと割り込みベクタ・テーブル
マイコンには多数の割り込み要因があり,それぞれに対して割り込みサービス・ルーチンを容易する.割り込み要因を特定するために,各要因に固有の番号(割り込みベクタ)を割り当てる.割り込みベクタと,それに対応する割り込みサービス・ルーチンの先頭アドレスを一覧表にまとめたものを,割り込みベクタ・テーブルと呼ぶ.システム情報として,ROM領域にテーブルを作成することが多い.

 

 それぞれの割り込み要因は,割り込みが受け付けられると,割り込み元を示す番号(割り込みベクタ)を送信します.メモリの中には,この番号と割り込みサービス・ルーチンの先頭アドレス(あるいはそのアドレスへの分岐命令)を対応付けた表(テーブル)を用意しておきます.この対応表を,割り込みベクタ・テーブルと呼びます.

 割り込みは元のソフトウェアの実行を強制的に中断してしまいます.このため,特に中断されたくない処理を実行している場合には,その間だけ割り込みを禁止にする機能があります.

 また,割り込み要因の中には,割り込み要求を常時有効にしたい要因もありますが,特定の局面でだけ有効にしたい要因もあります.そのため,各割り込み要因ごとに,割り込みの受付を無効にする割り込みマスクの機能があります.割り込みマスクで無効にできる割り込みはマスカブル割り込み,割り込みマスクで無効にできない割り込みをノン・マスカブル割り込み(NMI)と呼びます.

 特に緊急性が高い割り込みにはNMIを用います.

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日