はじめに
外部割込みの設定諸々についての記述.マイコンボードはGR-CITRUSとする.ハードウェアマニュアルの参考先はHM *.*.*と表記する(例:HM 3.3.4ならばハードウェアマニュアルの3.3.4節を参考).
資料(必需品)
・ RX63Nグループ、RX631グループ ユーザーズマニュアル
・ GR-CITRUS回路図
外部割込みとは
外部から信号が入力されたら,任意のプログラムを実行する.
外部割込み設定
HM 1.5 表1.9より,外部割込みをしたい端子に対応するIRQnを確認する(例:PC0 > IQR14).基本的に,HM 15.5.7の動作手順に従って設定を行う.
流れ
- 割り込み要求の禁止
- デジタルフィルタの無効
- サンプリングクロックの設定
- I/O ポートの設定
- 検出方法の設定
- IRn.IRフラグクリア
- デジタルフィルタの有効
- 割り込み要求の許可
初期化関数
void IRQ14_init(void);
void HardwareSetup(void)
{
IRQ14_init();
}
/*=================================
* 関数名 : IRQ14_init
* 機能 : 外部割込みIRQ14の初期化
* 引数 : なし
* 戻り値 : なし
* 備考 : サンプリングクロック設定:PCLK/8 割り込み優先度:3
* ===============================*/
void IRQ14_init(void)
{
/*=== 割り込み要求の禁止 ===*/
IEN(ICU,IRQ14) = 0;
/*=== デジタルフィルタの無効 ===*/
ICU.IRQFLTE1.BIT.FLTEN14 = 0;
/*=== サンプリングクロック設定 > PCLK/8 ===*/
ICU.IRQFLTC1.BIT.FCLKSEL14 = 0x01;
/*=== I/Oポート設定 ===*/
PORTC.PDR.BIT.B0 = 0;
/*=== ピン機能設定 プロテクト解除===*/
MPC.PWPR.BIT.B0WI = 0;
MPC.PWPR.BIT.PFSWE = 1;
/*=== ピン機能設定 ===
* PC0 > IRQn入力端子として使用する
* ================*/
MPC.PC0PFS.BIT.ISEL = 1;
/*=== ピン機能設定 プロテクト===*/
MPC.PWPR.BIT.PFSWE = 0;
MPC.PWPR.BIT.B0WI = 1;
/*=== 検出方法設定 ===*/
ICU.IRQCR[14].BIT.IRQMD = 0x00;
/*=== フラグクリア ===*/
ICU.IR[14].BIT.IR = 0;
/*=== 割り込み優先度設定 ===*/
IPR(ICU,IRQ14) = 3;
/*=== デジタルフィルタの有効 ===*/
ICU.IRQFLTE1.BIT.FLTEN14 = 1;
/*=== 割り込み要求の許可 ===*/
IEN(ICU,IRQ14) = 1;
}
割り込み関数
# include"iodefine.h"
# include"vect.h"
# include"icu_cmt.h"
# include"name.h"
void LED_quickly(void)
{
LED = LED_ON;
Delay(10);
LED = LED_OFF;
Delay(10);
}
新たにファイルを作成して,割り込みによってやりたいことを記述した関数を作成する.この関数の宣言は既存のvect.hの中でやることになる.
// ICU IRQ14
//#pragma interrupt (Excep_ICU_IRQ14(vect=78))
//void Excep_ICU_IRQ14(void);
# pragma interrupt (LED_quickly(vect=78))
void LED_quickly(void);
vect.hの// ICU IRQ14直下の2行をコメントアウトして,自作した関数名に書き換える.割り込み関数を既存の Excep_ICU_IRQ14
にする場合は,/generate/intprg.cに用意されている関数内にプログラムを書く.
詳細
初期化関数
1. 割り込み要求の禁止
IEN(ICU,IRQ14) = 0;
HM 1.5表1.9より,確認した端子と対応するIRQnの割り込みをマクロ関数を用いて,=0
で禁止する.関数の引数は,割り込み要求発生元と名称である.なお,関数を使わない場合は以下の通りである.
ICU.IER[0x9].BIT.IEN6 = 0;
HM15.2.2より,割り込み要因IQRnと IERm.IENj ビットの対応は,「HM 3.1 表15.3 割り込みのベクタテーブル」を参照する(例:PC0 > IRQ14 > IER09.IEN6).IERは16進数表現らしくIER[0xn]
と表現する必要がある(参考).
2. デジタルフィルタの無効
ICU.IRQFLTE1.BIT.FLTEN14 = 0;
HM 15.2.9-10より,デジタルフィルタを=0
で無効にする.IRQnに対応したビットに対して設定を行う.
3. サンプリングクロックの設定
ICU.IRQFLTC1.BIT.FCLKSEL14 = 0x01;
HM 15.2.11-12より,PCLKに対するサンプリングクロックの分周を設定する.IRQnに対応したビットに対して設定を行う.
4. I/O ポートの設定
PORTC.PDR.BIT.B0 = 0;
HM21.3.1より,入力ポートとして設定する.
/*=== ピン機能設定 プロテクト解除===*/
MPC.PWPR.BIT.B0WI = 0;
MPC.PWPR.BIT.PFSWE = 1;
/*=== ピン機能設定 ===
* PC0 > IRQn入力端子として使用する
* ================*/
MPC.PC0PFS.BIT.ISEL = 1;
/*=== ピン機能設定 プロテクト===*/
MPC.PWPR.BIT.PFSWE = 0;
MPC.PWPR.BIT.B0WI = 1;
HM22.2.1より,マルチファンクションのプロテクト解除をする.HM22.2.14より,端子を=1
でIQRnとして使用する.
5. 検出方法の設定
ICU.IRQCR[14].BIT.IRQMD = 0x00;
HM 15.2.8より,外部割込みの検出方法の設定をする.=0x00
でLOWで検出.IRQCR[i]
のiにIRQnの番号を入れる.
6. IRn.IRフラグクリア
ICU.IR[14].BIT.IR = 0;
HM15.2.1より,割り込み要求のフラグをクリアする.IR[i]
のiにIRQnの番号を入れる.
7. デジタルフィルタの有効
ICU.IRQFLTE1.BIT.FLTEN14 = 0;
HM 15.2.9-10より,デジタルフィルタを=1
で無効にする.IRQnに対応したビットに対して設定を行う.
8. 割り込み要求の許可
IEN(ICU,IRQ14) = 1;
HM 1.5表1.9より,確認した端子と対応するIRQnの割り込みをマクロ関数を用いて,=1
で許可する.