RX210でIRQ割り込みを使用したプログラムの例です。
RX210は割り込み端子にデジタルフィルタがあるのでスイッチを直接接続してもチャタリングに悩まされることがありません。
割り込みプログラムは
RX210は割り込み端子にデジタルフィルタがあるのでスイッチを直接接続してもチャタリングに悩まされることがありません。
- void main(void)
- {
- int i;
- int up4bit,lower4bit;
- unsigned char num = 0;
- PORTA.PDR.BYTE = 0xFF; //ポートAを出力に
- PORTB.PDR.BYTE = 0xFF; //ポートBを出力に
- PORTC.PDR.BYTE = 0xFF; //ポートCを出力に
- PORTC.PODR.BYTE = 0x00; //LEDを消灯
- //MTSP(ICU) = 0;
- IEN(ICU,IRQ0) = 0; //IRQ0禁止
- IPR(ICU,IRQ0) = 0x0F; //割り込み優先順位を最大に設定
- ICU.IRQFLTE0.BIT.FLTEN0 = 0; //デジタルフィルタ禁止
- ICU.IRQFLTC0.BIT.FCLKSEL0 = 3; //デジタルフィルタ PCLK/64
- PORTH.PDR.BIT.B1 = 0; //PH1入力
- MPC.PWPR.BIT.B0WI = 0; // PFSWE書き込み可
- MPC.PWPR.BIT.PFSWE = 1; // PFSレジスタへの書き込み可
- MPC.PH1PFS.BIT.ISEL = 1; //PH1をIRQ0として使用
- MPC.PWPR.BIT.PFSWE = 0; // PFSレジスタへの書き込み禁止
- PORTH.PMR.BIT.B1 = 1; //PH1内蔵機能に使用
- ICU.IRQCR[0].BIT.IRQMD = 1; //立ち下がりエッジ
- IR(ICU,IRQ0) = 0; //フラグを下げる
- ICU.IRQFLTE0.BIT.FLTEN0 = 1; //デジタルフィルタ許可
- IEN(ICU,IRQ0) = 1; //IRQ0許可
- // set_ipl(2);
- setpsw_i(); // 割込み許可 割込み禁止はclrpsw_i()
- while(1) {
- up4bit = num >> 4; //上位4bitの計算
- lower4bit = num & 0x0F; //下位4bitの計算
- PORTB.PODR.BYTE = seg7pat[ up4bit ] | 0x80; // <--上位4bit パターンで数字を表示できるように
- PORTA.PODR.BYTE = seg7pat[ lower4bit ]; // <--下位4bit パターンで数字を表示できるように
- num++; //カウントアップ unsigned char形なので255を過ぎると0に戻る
- //if(num >99) num =0;
- for(i=0;i<50000;i++) { //一定時間待つ
- nop(); //何もしない
- }
- }
- }
割り込みプログラムは
- // ICU IRQ0
- void Excep_ICU_IRQ0(void)
- {
- PORTC.PODR.BYTE = ~ PORTC.PODR.BYTE;
- }