忘備録-備忘録

技術的な備忘録

RX210でIRQ割り込みを使う

2016-05-06 18:48:31 | RX210
RX210でIRQ割り込みを使用したプログラムの例です。
RX210は割り込み端子にデジタルフィルタがあるのでスイッチを直接接続してもチャタリングに悩まされることがありません。

  1. void main(void)
  2. {
  3.     int i;
  4.     int up4bit,lower4bit;
  5.     unsigned char num = 0;
  6.     PORTA.PDR.BYTE = 0xFF;    //ポートAを出力に
  7.     PORTB.PDR.BYTE = 0xFF;    //ポートBを出力に
  8.     PORTC.PDR.BYTE = 0xFF;    //ポートCを出力に
  9.     PORTC.PODR.BYTE = 0x00;    //LEDを消灯
  10.     //MTSP(ICU) = 0;
  11.     IEN(ICU,IRQ0) = 0;                //IRQ0禁止
  12.     IPR(ICU,IRQ0) = 0x0F;            //割り込み優先順位を最大に設定
  13.     ICU.IRQFLTE0.BIT.FLTEN0 = 0;    //デジタルフィルタ禁止
  14.     ICU.IRQFLTC0.BIT.FCLKSEL0 = 3;    //デジタルフィルタ PCLK/64
  15.     PORTH.PDR.BIT.B1 = 0;            //PH1入力
  16.     MPC.PWPR.BIT.B0WI = 0;            // PFSWE書き込み可
  17.     MPC.PWPR.BIT.PFSWE = 1;            // PFSレジスタへの書き込み可
  18.     MPC.PH1PFS.BIT.ISEL = 1;        //PH1をIRQ0として使用
  19.     MPC.PWPR.BIT.PFSWE = 0;            // PFSレジスタへの書き込み禁止
  20.     PORTH.PMR.BIT.B1 = 1;            //PH1内蔵機能に使用
  21.     ICU.IRQCR[0].BIT.IRQMD = 1;        //立ち下がりエッジ
  22.     IR(ICU,IRQ0) = 0;                //フラグを下げる
  23.     ICU.IRQFLTE0.BIT.FLTEN0 = 1;    //デジタルフィルタ許可
  24.     IEN(ICU,IRQ0) = 1;                //IRQ0許可
  25. //    set_ipl(2);
  26.     setpsw_i();                            // 割込み許可 割込み禁止はclrpsw_i()
  27.     while(1) {
  28.         up4bit = num >> 4;        //上位4bitの計算
  29.         lower4bit = num & 0x0F;    //下位4bitの計算
  30.         PORTB.PODR.BYTE = seg7pat[ up4bit ] | 0x80; // <--上位4bit パターンで数字を表示できるように
  31.         PORTA.PODR.BYTE = seg7pat[ lower4bit ]; // <--下位4bit パターンで数字を表示できるように
  32.         num++;    //カウントアップ unsigned char形なので255を過ぎると0に戻る
  33.         //if(num >99) num =0;
  34.         for(i=0;i<50000;i++) { //一定時間待つ
  35.             nop(); //何もしない
  36.         }
  37.     }
  38. }

割り込みプログラムは

  1. // ICU IRQ0
  2. void Excep_ICU_IRQ0(void)
  3. {
  4.     PORTC.PODR.BYTE = ~ PORTC.PODR.BYTE;
  5. }