LoginSignup
0
0

More than 3 years have passed since last update.

外部割込み

Last updated at Posted at 2020-07-18

はじめに

外部割込みの設定諸々についての記述.マイコンボードは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の動作手順に従って設定を行う.
流れ
1. 割り込み要求の禁止
2. デジタルフィルタの無効
3. サンプリングクロックの設定
4. I/O ポートの設定
5. 検出方法の設定
6. IRn.IRフラグクリア
7. デジタルフィルタの有効
8. 割り込み要求の許可

初期化関数

"hwsetup.c"
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;
}

割り込み関数

"icu.c"
#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の中でやることになる.

"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で許可する.

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0