割り込みハンドラとは?:Q&Aで学ぶマイコン講座(27)(2/3 ページ)
マイコンユーザーのさまざまな疑問に対し、マイコンメーカーのエンジニアがお答えしていく本連載。今回は、初心者の方からよく質問される「割り込みハンドラ/ハンドラモードとは?」です。
そもそも割り込みって何?
そもそも割り込みとはマイコンがメインルーティンの一連の処理を行っている時に、何かのきっかけ(イベント)でその処理を中断し、別のルーティンで別の処理を行うことです。そのイベントは割り込み要求と呼ばれています。
割り込み要求を発生させるのはハードウェアです。例えば、タイマ、通信ペリフェラル、A-Dコンバーター、外部端子などです。
これらの割り込み要求には別々の処理プログラムが準備されていて、それぞれの割り込み要求が発生したときにCPUがそれらに対応したプログラムを実行します。しかし、タイマ、通信ペリフェラル、A-Dコンバーターなどの動作は、それぞれ独立して行われ、CPUのプログラム実行とタイミングを合わせながら動作するわけではありません。通常、マイコンにはCPUは1つしかありませんので、いろいろな処理のプログラムを同時に実行することはできません。そのため、割り込みという概念が必要になります。
図2に、A-Dコンバーターと通信ペリフェラル(受信)の場合の割り込み処理を示します。この場合、A-Dコンバーター用と通信ペリフェラル(受信)用に2つの割り込みハンドラが必要になります。
A-Dコンバーターの変換が終了すると、A-Dコンバーターから割り込み要求が発行されます。するとCPUは実行している処理を中断して、A-Dコンバーターの変換データを取り込みます。取り込み処理が終わると、先ほど中断した処理に戻って、続きを実行します。また、A-Dコンバーターと並行して通信ペリフェラルの受信が行われている場合、受信動作が完了すると通信ペリフェラルから割り込み要求が発行されます。するとCPUは、実行している処理を中断して、通信ペリフェラルの受信データを取り込みます。受信データの取り込みが終わると、先ほど中断した処理に戻って、続きを実行します。
補足
割り込みに似た処理で、「例外処理」と呼ばれるものがあります。ソフトウェアやハードウェアの異常事態のフォルト(Fault)や割り込みが発生した時に、CPUがメインプログラム以外のプログラムを実行する処理を全部ひっくるめて例外処理と呼んでいます。したがって、割り込み処理は例外処理の一種だといえます。例外処理にどの種類の処理を含むかは、各マイコンで定義が違っていて、例えばリセット処理を例外処理に含んだり、含まなかったりします。
スタック動作(コンテキストの保存)
割り込み要求が発生して、割り込みハンドラが実行される前に、現在のPC(プログラムカウンタ)やレジスタの状態(これらは、コンテキストと呼ばれる)をスタックに保存します。これを「PUSH」(プッシュ)と呼びます。そして、割り込みハンドラが終了して、メインプログラムに戻るときに、保存されたコンテキストをスタックから戻します。これを「POP」(ポップ)と呼びます。
一般的には、割り込みコントローラー(ハードウェア)が、PUSHとPOPを自動的に行いますが、ユーザーがソフトウェアでPUSH命令、POP命令を実行するマイコンもあります。
スタックされるコンテキストの内容はマイコンによって異なります。一般的にはPC(プログラムカウンタ)や汎用レジスタですが、詳細はマイコンの説明書に記載されています。
通常、スタックは内蔵RAMに作られます。そして、スタックのアドレスはスタックポインタで定義されます。もし、割り込みハンドラのプログラムが間違ってスタック領域を書き換えてしまうと、POPされる内容がPUSHされた内容と異なってしまい正常にメインルーティンに戻れなくなるので、注意が必要です(通常は開発ツールが管理してくれますので、ユーザーはあまり気にする必要はありません)。
Copyright © ITmedia, Inc. All Rights Reserved.