割込み処理の記述の仕方

実際に割込み処理を記述する場合,どのように記述するのでしょうか。 割込み処理の記述の仕方は,マイコンやソフトウェアツールのメーカによって様々です。 ここでは,ML62Q10000シリーズマイコンのタイマ割込み処理をC言語で記述する例をみてみましょう。

  以下に,1秒ごとに16ビットタイマの割込み処理でポート2のビット0に接続された発光ダイオード(LED)を反転させるプログラム例を示します。

 プログラム例に出てくる,P20DOやP2M0,TMH0D,TMH0MODなどはSFR(Special Function Register)と呼ばれるもので,ポートやタイマなどマイコンの周辺回路(ペリフェラル)を制御するための設定用レジスタです。 ここではSFRの詳細については割愛します。詳細を知りたい方は,『ML62Q1000シリーズ ユーザーズマニュアル』を参照してください。マニュアルは,ラピステクノロジーのホームページ(http://www.lapis-tech.com/jp/)からダウンロードできます。

割込み処理本体の記述の仕方は通常の関数と同様ですが,それが割込み処理であることをCコンパイラに伝えるための特別な記述(この例では#pragma INTERRUPTの行が該当)をします。

通常処理側では,ポートやタイマを設定し,タイマ割込みを許可してから,タイマのカウントを開始した後,割込みを許可状態にしています。この後は、何もせず無限ループをして割込みを待つ状態となります。 タイマ割込み処理を直接呼び出す記述はありません。

【プログラム例のタイマ割込みの動作】 タイマカウントが開始すると,タイマのカウンタレジスタ(TMH0C)がベースとなる低速クロックに同期してカウントを開始します。TMH0Cがタイマの比較値(0x7FFF)と一致すると,TMH0Cがクリアされると同時にタイマ割込みが発生します。

マイコン設計者がお答えします!技術的問い合わせフォーム