電圧検出およびサンプリング出力タイマについて

お世話になっております。

電圧検出回路の割り込みモードを使用しようとしております。

プログラム内を電圧検出回路(割り込みモード)のみで使用した場合、電圧低下時に割り込みが発生し、意図した動作となっております。

しかし、サンプリング出力タイマを使用し、周期:4ms、パルス幅:50μsとして設定した場合、サンプリング出力は意図した動作になっておりますが、

電圧検出回路(割り込みモード)が電圧低下しても割り込み発生しない現象が発生しております。

下名の方で、データシートを読むなどして調査を進めておりますが、現状では原因が掴めておりません。

皆様、何か上記から原因がわかる、または推測などございましたらご教示頂けますでしょうか?

なお、割り込み優先度は以下のように設定しております。

 ・電圧検出回路(割り込みモード):優先度レベル0

 ・サンプリング出力タイマ:優先度レベル3

以上、よろしくお願い致します。

  • とりあえずは

    ・電圧は意図した通り低下しているか

    ・電圧検出レベル・レジスタは正しく設定されているか

    ・割り込みマスク・フラグ・レジスタは正しく設定されているか

    ・電圧低下時に電圧検出レベル・レジスタの該当ビットはセットされているか

    ・電圧低下時に割り込み要求フラグ・レジスタの該当ビットはセットされているか

    この辺りを確認されると良いと思います。

    あと、使われてるマイコンの機種くらい書きましょう。

  • チョコです。

    サンプリング出力で何をどうしているかわからないので、割り込みの基本的な動作についてコメントします。

    電圧検出回路は、オプションバイトが正しく設定されていれば、電圧低下を検出したら、INTLVIが発生し、LVIIFビット(フラグ)がセットされます。

    LVIIFビットがセットされ、LVIMKビットがクリアされていれば、CPUに対して割り込み要求が発生します。CPUに割り込み要求が発生したときにCPUが割り込みを受け付け可能なら割り込みを受け付けて対応するベクタ領域から処理アドレスを読み出して割り込み処理に分岐します。

    つまり、LVIIFビットがセットされているか、LVIMKビットがクリアされているかをまず確認してください。LVIIFビットが0なら電圧検出回路が検出していません。LVIMKビットが1ならマスクが解除されていません。

    ここまで確認出来たら、優先度の高い割り込みを処理中かCPUが割り込み禁止になっていないかと、割り込みを保留する命令を連続して実行していないかです。

    CPUは割り込み受け付け可能状態では、最も早く要求された受付可能な割り込みを受け付けます。割り込みを受け付けると、割り込み禁止状態になります。その場合、実行中の割り込みの優先順位が低くても優先順位の高い割り込みは受け付けられません。優先順位の低い割り込み処理の頭で割り込み許可する(EI命令を実行する)必要があります。

    これ以上は、具体的な内容がわからないとコメントできません。

  • fujita nozomu様、チョコ様

    ご回答ありがとうございます。

    失礼いたしました、マイコン種類および環境を下記に記載致します。

    [環境]
    ・マイコン種類:RL78 H1Dシリーズ
    ・統合開発環境:CS+ for CC

    お二人からのアドバイスから各フラグ・レジスタの状態を再度確認するように致します。

    特に、チョコ様からのアドバイスで 「優先順位の低い割り込み処理の頭で割り込み許可する(EI命令を実行する)必要があります。」の認識がなかったので、勉強になりました。

    整理し確認が取れ次第、具体的な情報を提示したいと思います。

    今回、初めての投稿の為、不出来な所もあるかと思いますが、今後とも宜しくお願い致します。

  • チョコ様からのアドバイスで 「優先順位の低い割り込み処理の頭で割り込み許可する(EI命令を実行する)必要があります。」の認識がなかったので、勉強になりました。

    多重割り込みを有効にする方法ですがその必要はある想定なのでしょうか? 考慮すべき事象が増えるので良く分かっておられないのであればお勧めしません。

  • 雪さん、こんにちは。NoMaYと申します。

    > 特に、チョコ様からのアドバイスで 「優先順位の低い割り込み処理の頭で割り込み許可する(EI命令を実行する)必要があります。」の認識がなかったので、勉強になりました。

    このアドバイスは多重割り込み機能を使う場合のことなので、その機能を使わなければその必要は無いですよ。(複数の割り込み優先順位を設定した場合には多重割り込み機能を使わなくてもそうするものだと、誤解されたのではないだろうかという気がしましたので、、、)

    RL78/H1D ユーザーズマニュアル ハードウェア編を見てみましたが、サンプリング出力タイマ割り込みは、その中で無限ループさせるような種類の割り込みには見えませんでした(つまり普通の短時間で処理を終わらせて終了する割り込みだと思いました)ので、低電圧割り込みの設定が正しく行われていれば、両者のタイミング次第ではサンプリング出力タイマ割り込み処理終了後にまで低電圧割り込み受付が遅延することがあるかも知れませんが、多重割り込み機能を使わなくても、低電圧割り込み処理には入って行く筈だと思いました。

    [メモ]

    RL78/H1D ユーザーズマニュアル ハードウェア編
    www.renesas.com/jp/ja/document/man/rl78h1d-users-manual-hardware
     

  • チョコです。

    >このアドバイスは多重割り込み機能を使う場合のことなので、その機能を使わなければその必要は無いですよ。(複数の割り込み優先順位を設定した場合には多重割り込み機能を使わなくてもそうするものだと、誤解されたのではないだろうかという気がしましたので、、、)

    NoMaYさん、複数の優先順位を設定したということは、意識していないかもしれませんが、多重割り込みの動作を期待していると同義ではないでしょうか。

  • チョコさん、こんにちは。NoMaYです。

    > 複数の優先順位を設定したということは、意識していないかもしれませんが、多重割り込みの動作を期待していると同義ではないでしょうか。

    複数の優先順位を設定したということは多重割り込みをやろうと考えていたかも知れない(意識していないにせよ)、とは私も思っています。ただ、雪さんのリプライに、どうしてもちょっと心配になったのです。(私たちにとっては、もう同義ですけれど、雪さんがどう受け取られたかどうか、というのが気掛かりだったのです。)

  • チョコです。

    NoMaYさん、そんな見方もあると思いますが、スレッドの内容(電源低下の割り込み)から判断して、実態のわからない低優先順位の割り込み処理が終わるのを待たせるようなケースではなく、最優先の割り込みを受け付けさせる方法として示したものです。このケースではこの対応方法(多重割り込み)しかないかと思います。

    ソフト屋さんから見ると(おそらくほとんどの人にとって)、割り込み自体がわかりにくいのではないかと思います。

    そこに割り込みの優先順位(ディフォルト優先順位と優先順位設定)が加わると、優先順位で思考が止まってしまうのではないかと思います。コード生成もそこまでしか対応していないので、ほとんどの人がそれで終わりだと思ってしまうのではないでしょうか。

    ちなみに、RL78では、最優先の割り込み順位以外の割り込み処理の頭で割り込みを許可しても、実行している割り込みの優先順位より優先順位の高い割り込み以外(つまり、同じ優先順位や優先順位の低い割り込み)は受け付けないので、ほとんど影響はないはずです。

    以上

  • チョコさん、こんにちは。NoMaYです。

    私は、fujitaさんのリプライとは違って、多重割り込みを(今回の場合に特に初学者さんにおいて)使わない方が良いのでは無いでしょうか、とまでは言ってないです。(ちょうどfujitaさんのリプライの直後に私のリプライが続いてしまいましたけれど、、、)

    リプライの文面から受けた印象として、雪さんがどう受け取られたかどうか、というのが気掛かりだったのです、、、

  • チョコです。

    >リプライの文面から受けた印象として、雪さんがどう受け取られたかどうか、というのが気掛かりだったので

    おそらく、「多重割り込みを使ってない場合にもEI()を入れるべき」と考えられるのを心配されているのだと思いますが、ひとつ前のリプライに書いたように、「多重割り込みを使ってない場合にもEI()を入れても問題は生じません。」なので、心配する必要はないかと思います。