Copyright (C)SUWA TSUSHIN NETWORK.
All Rights Reserved. TOPへ戻る
スポンサードリンク

No.0018 2021.3.14




ルネサス RX621マイコン 初心者(8) 割り込み入力を使ってみる





今回のソースファイル: rx62_test3.zip (179 KB)


□ 1.割り込み入力とは?

割り込み処理とは、通常の処理を止めて特定の処理を割り込ませて行うものです。
日常において「突発業務」と呼ばれる仕事のようなものです。
電話が掛かってきたときに、手を止めて電話に出るのも割り込み処理です。

特定の入力信号によって発生する割り込みを、割り込み入力と言います。




□ 2.割り込み入力を使ってみる

AKI-RX621 ビンアサイン デジタル IO反映 .xlsx

前回のデジタル入出力で使用したボタン入力用の P46には、割り込み入力「IRQ14」の機能があります。
今回はそれを使います。
前回作成したデジタル入出力のプロジェクトに、割り込み処理を追加します。

・ボタン1(PD2)が押されている間は、LED1(PA0)の点滅が止まる
・ボタン2(P46)が押されたとき、LED2(PA2)が点灯→消灯、もしくは消灯→点灯

という処理にします。

ソースコードは以下のようになります。




vect.h の 以下の個所をコメントアウトしておきます。

// #pragma interrupt (Excep_ICU_IRQ14(vect=78))
// void Excep_ICU_IRQ14(void);





intprg.c の以下の個所もコメントアウトしておきます。

// ICU IRQ14
// void Excep_ICU_IRQ14(void){ }








□ 3.IRQ14の設定
ハードウェアマニュアル(R01UH0033JJ0140)の「11.3 ベクタテーブル」の表11.4 に、IRQ14 の仕様一覧が記載されているので、メモしておきます。
ベクタ番号:78、IER:IER09.IEN6、IPR:IPR2E の値が重要になります。




ソースコード冒頭の以下の部分は、割り込みが発生したときに、
何の処理を行うかを決める宣言です。
#pragma interrupt は、決まり文句です。
その後に呼び出す関数名を指定します。呼び出す関数は、引数や戻り値が設定できません。
値は、グローバル変数等で受け渡します。
割り込みの指定は、割り込み名ではなく、先ほど調べたベクタ番号を指定します。
宣言はベクタ番号ごとに1回しかできないため、vect.h の宣言をコメントアウトします。


  #pragma interrupt int_func (vect=78)   // IRQ14



次にIRQ14を割り込み入力として使う場合、信号の立ち上がり、立ち下がりのどちらで割り込みを発生させるかの設定をします。ハードウェアマニュアル「11.2.8 IRQ コントロールレジスタn(IRQCRn)(n =0 〜 15)」 を使用します。





ソースコードでは以下のように記述します。
ICU.IRQCR[].BIT.IRQMD は決まり文句で、要素番号はIRQ** の数値を指定します。


  ICU.IRQCR[14].BIT.IRQMD = 1;     // IRQ検出設定ビット 0b01:立ち下がりエッジ




次に割り込みの優先順位を設定します。1(最低)〜15(最高)の順位を設定することができ、初期値は0(割り込み禁止)となっています。ここの設定を忘れると割り込みが発生しません。ハードウェアマニュアル「11.2.3 割り込み要因プライオリティレジスタm(IPRm)(m= 00h~8Fh)」 を使用します。





ソースコードでは以下のように記述します。ICU.IPR[].BIT.IPR は決まり文句で、要素番号は「11.3 ベクタテーブル」の表11.4 で調べたIPRの値 IPR2E の下2桁を16進数で指定します。


  ICU.IPR[0x2E].BIT.IPR = 0xF;    // 割り込みレベル 15(最高)




次に割り込みの状態レジスタをクリアします。この処理はしなくてもかまいません。ハードウェアマニュアル「11.2.1 割り込み要求レジスタi(IRi)( i = 割り込みベクタ番号)」 を使用します。





ソースコードでは以下のように記述します。
ICU.IR[].BIT.IR は決まり文句で、要素番号はベクタ番号を指定します。


  ICU.IR[78].BIT.IR = 0;    // 割り込みステータスレジスタリセット




最後に割り込み許可/禁止を設定します。機能のON/OFFを設定する項目です。ここの設定を忘れると割り込みが発生しません。ハードウェアマニュアル「11.2.2 割り込み要求許可レジスタm(IERm)(m = 02h 〜 1Fh)」 を使用します。




ソースコードでは以下のように記述します。ICU.IER[] は決まり文句で、要素番号は「11.3 ベクタテーブル」の表11.4 で調べた IERの値 IER09 の下2桁を16進数で指定します。
BIT.*** の部分は、IERの値 IER09.IEN6 の IEN6 をそのまま当てはめます。割り込み1つを使うのに、煩雑で非常に分かりにくいと思います。この使い勝手の悪さが、ルネサスマイコンが世間で使われなくなった要因の1つと言われています。


  ICU.IER[0x09].BIT.IEN6 = 1;    // IRQ14(vect=78) 割り込み許可




□ 4.動作確認
割り込み発生時の処理を追加し、ビルド&ダウンロードして実行します。 割り込み発生時に呼び出される処理の中に、ブレイクポイントを設定します。 ボタンが押された瞬間に、ブレイクが掛かります。 main()関数のwhile(1) の無限ループから飛び出て処理されるのが、この割り込み機能のポイントです。



スポンサードリンク

TOPへ戻る


ご利用条件
 Copyright (C)SUWA TSUSHIN NETWORK. All Rights Reserved.