RL78/G13 基本的な多重割り込み処理の操作方法

皆様、

初心者です。ご教示お願いします。

・外部のモメンタリSWに接続した割り込みP137端子(INTP0)と12bitインターバルタイマを使い、外部割り込みSWのチャタリング防止のプログラムを作成しました。

・INTP0で呼ばれる#pragmaで定義される割り込みルーチンプログラムの冒頭に、12bitインターバルタイマによるwait_25ms()を記述したところ、このwait_25ms()のHALT()で止まってしまいます。

・そこで、割り込みルーチンのwait_25ms()の代わりに、割り込みを使用しないNOP()を繰り替えすループを作成したところ(100ms程度?)、P137のSW動作はうまく行くようになりました。

お尋ねしたいのは、

(1)外部SWのチャタリング防止のウエイトのために、12bitインターバルタイマを使用するには、どうしたらよいのでしょうか?

(2)INTP0のデフォルト割り込み優先順位は"2"のようです(H/Wマニュアル)。インターバルタイマはこれより低い順位です。wait_25ms()の前に、EI()を入れ、後にDI()を挿入すればことたりるのでしょうか?

初歩的な内容ですが、よろしくお願いします。

Parents
  • わわいです
    スイッチを割り込み入力につなぐというのはダメです
    そもそもスイッチにはチャタリングが発生するので、割り込み入力につなぐと、そのチャタリングの分だけ割り込みが発生するってことになります
    非常に短い時間のうちに割り込が連続して発生する、ということになります
    そこでどういう事が起こるかというのを十分把握して実装するならいいですが、そういうわけじゃないときには、あなたが経験しているような不可解な現象に悩まされることになります

    そもそも、チャタリング除去ごときに割り込み入力は使うべきではありません
    #Arduinoの工作記事なんかを見てると多用されてるようですが。。

    単にタイマ割り込みで10msごとぐらいでスイッチ入力をモニタしてればチャタリング除去はできます
Reply
  • わわいです
    スイッチを割り込み入力につなぐというのはダメです
    そもそもスイッチにはチャタリングが発生するので、割り込み入力につなぐと、そのチャタリングの分だけ割り込みが発生するってことになります
    非常に短い時間のうちに割り込が連続して発生する、ということになります
    そこでどういう事が起こるかというのを十分把握して実装するならいいですが、そういうわけじゃないときには、あなたが経験しているような不可解な現象に悩まされることになります

    そもそも、チャタリング除去ごときに割り込み入力は使うべきではありません
    #Arduinoの工作記事なんかを見てると多用されてるようですが。。

    単にタイマ割り込みで10msごとぐらいでスイッチ入力をモニタしてればチャタリング除去はできます
Children
No Data