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

タイマ割り込み関数内でのポート出力制御

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

カイロスです。

タイマ割り込み内でのポート出力に関してのご質問です。

現在RL78G13(R5F1006C)の20pinにてブザー出力(4kHz)をする際に、ポートの関係からタイマアレイユニットではないポートから矩形波を出力する必要がありまして、インターバルタイマ内にて、ポート出力を反転させるようにしたところ、ブザー音にビビり音が混ざりました。

オシロで出力を確認したところ、基本的には正常に周波数を出力できているのですが、たまに矩形波ではない瞬間がありました。

デバッグで確認した結果は以下となります。

・ポートの出力制御が割り込み関数内で実施しているとたまに正常に動作していないときがある(割り込みレベルは高に設定)。

・周波数を下げても同様の現象が発生(100Hzくらいまで確認)

・メインループにて出力制御をすると、特に問題はなし

周波数が高いため、メインループで実施すると、微秒に音色が変化します。

対策がありましたら、ご教授頂ければと思います。

そもそも、割り込み内にてポート出力を直接制御するのはよろしくはない気がしますので、将来的にはピンを増やしたいとは考えています。

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

  • チョコです。

    >・ポートの出力制御が割り込み関数内で実施しているとたまに正常に動作していないときがある(割り込みレベルは高に設定)。

    ところで、使用している他の割り込みで、多重割り込みを許可するために割り込み処理の先頭で割り込み許可(EI())処理を行っていますでしょうか。

    単に割り込み優先順位が高くてもほかの割り込みを処理中で割り込みが禁止されていたら受け付けられません。

    以上

  • チョコさん

    お返事ありがとうございます。

    情報が足りず申し訳ありません!

    他のタイマ割り込みと、ADC、シリアルの割り込み個所の先頭にて、EI()宣言をしております。

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

  • 下記のようなブザーを使う方法も有ります。

    モノタロウ

     定格電圧(V)6 注文コード06539688 品番HMB-06

  • 理由が判明いたしました。

    割り込み以外の場所にて、同一ポート群(P12をブザーに使用。P10などその他のポートをLED等に使用)していたため、その処理とバッティングしたときに、割り込み時に書き込んだ値がクリアされる現象が発生していたようです。

    他のポート処理をコメントアウトすると、綺麗なブザー音となりました。

    ご意見いただきありがとうございました!

  • チョコです。

    原因が判明してよかったですね。

    >割り込み以外の場所にて、同一ポート群(P12をブザーに使用。P10などその他のポートをLED等に使用)していたため、その処理とバッティングしたときに、割り込み時に書き込んだ値がクリアされる現象が発生していたようです。

    そうなると、その他のポートの処理でポートに対する演算のところだけでも割り込みを禁止して排他処理で行うことにでもしますか(ポートに対する処理が機械語の1命令でANDやOR できればいいのですが(1命令でのリード・モディファイ・ライトなら割り込みの影響はありません)、そこはコンパイラがどのように展開するかで変わります)。

    以上

  • コンパイラの展開次第で変わるんですね!

    そうなると、その他のポートの処理でポートに対する演算のところだけでも割り込みを禁止して排他処理で行うことにでもしますか

    そうですね。処理をひとまとめにしてそのときだけ割り込み禁止にするか、タイマは常時起動させて、そこで処理を一括とするか、その辺りかな?と考えています。

    1つご質問なのですが、割り込みを禁止した状態で、タイマ等の割り込み処理が発生した場合、割り込み許可後に再度処理が実施されるのでしょうか?それとも、次回割り込みが発生するまで、割り込み処理は走らないのでしょうか?

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

  • チョコです。

    >割り込みを禁止した状態で、タイマ等の割り込み処理が発生した場合、割り込み許可後に再度処理が実施されるのでしょうか?それとも、次回割り込みが発生するまで、割り込み処理は走らないのでしょうか?

    保留された割り込みは割り込みが許可されたら実行されます。

    RL78の割り込みの部分のブロック図を下に示します。この図でIFと書かれた箱が割り込み要求フラグのレジスタです。その右上のMKと書かれた箱が割り込みのマスクレジスタです。その右にあるIEと書かれた箱が(ベクタ)割り込み許可フラグです。

    割り込みが発生すると、IFがセットされます。IFは割り込みが受け付けられるとクリアされます。つまり、割り込み禁止にしていると、このIFはクリアされずにセットされたままなので、割り込みが許可されると割り込みが受け付けられるようになります。

    つまり、割り込みが禁止されている期間だけ遅れることになるだけです。そのため、禁止する期間をできるだけ短くしておけば、影響は少なくなります。

    以上

  • チョコさん

    ありがとうございます!

    割り込みに関して理解が深まりました。

    タイマ割り込みにて一斉に変換するパターンにて、ブザー動作が正常になることを確認しましたので、

    次に割り込み禁止によるブザー動作を確認したいと思います。

    確認次第、またご報告いたします!

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

  • チョコさん

    ご報告が遅れて申し訳ありません。

    上記、割り込み禁止によるブザー動作ですが、無事に動作を確認できました。

    ありがとうございました!