|  | ハードウェアマニュアル(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) 割り込み許可
 
 
 
 
 |