”かふぇルネ“はルネサス製品に関してユーザ同士が自由に会話をするツールであり、回答者はルネサス社内外の方たちとなります。ルネサス製品やソリューションに関して正式な回答をご希望の場合は、ルネサス技術サポート問合せをご使用ください。

SH7216マイコンのIRQ割り込みについて

高野です。SH7216マイコンを使いIRQ割り込みをしたいのですが、上手くいきません。メインのプログラムは、

#include"iodefine.h"

void initIO(void)
{
 PFC.PEIORL.BYTE.L= 0xFF;  //ポートE下位8ビットを出力に設定
}
void initIRQ(void)
{
 PFC.PBCRL1.BIT.PB0MD = 3;  //PB0をIRQ0入力に設定
 INTC.IPR01.BIT._IRQ0 = 0xf; //IRQ0優先度15
 INTC.ICR1.BIT.IRQ0S = 2;  //立ち上がりエッジで割り込み
}
void wait(void)       //時間待ち関数
{
 long t = 500000;
 while(t--);
}
void int_irq0(void)     //割り込み処理
{
 int c = 5;
 while(c--)
 {
  PE.DR.BYTE.L = 0x00; //0を出力
  wait();
  PE.DR.BYTE.L = 0xFF; //1を出力
  wait();
 }
}
void main(void)      //メイン関数
{
 int d=1;
 initIO();
 int_irq0();
 
 while(1){
  PE.DR.BYTE.L = d;
  wait();
  d<<=1;
  if(d>128){d = 1;}
 }
 set_imask(14);     //割り込みマスク14
このプログラムは、LEDが移動点滅していてPB0に接続されたスイッチを押すとLEDが5回点滅して元に戻るというものです。「intprg.c」の「void INT_IRQ0(void){}」の中に割り込み処理関数を記述し、「resetprg.c」のSR_Initのところを0x00000000にしました。マイコンボードの配線とピンの位置も何度も確認しました。どうすれば良いでしょうか。
  • > SH7216マイコンを使いIRQ割り込みをしたいのですが、上手くいきません。

    > どうすれば良いでしょうか。

    プログラムの各部分がそれぞれ期待した動作をしているか確認されれば良いでしょう。

  • わわいです
    うまくいかないとはどういうふうにうまくいかないんでしょうか。

    で、スイッチの入力で割り込みを発生させる、というのはまずいです。
    スイッチにはチャタリングというものがあるため、一回の押下で複数回の割り込みが発生したり、スイッチを離したときにも割り込みが発生したりします
  • 割り込み中では待機状態にしない方が良いです
    char flg=0;
    void int_irq0(void)//割り込み処理
    {
    flg=1;
    }
    void main(void)
    {
    if(flg){
    flg=0;
    //ここに処理
    }
    }
  • プログラムのご指摘をいただきありがとうございます。後程プログラムを見直してみます。