RL78/F14 I2C通信時の送信完了割り込みが発生しない

お世話になります。初めて投稿させていただきます。

現在、RL78/F14(マスター)とセンサー(スレーブ)間でI2C通信をしたいと考えておりますが、

マスター側の送信完了時の割り込みが発生せずに送信完了後の処理を行うことができずに困っております。

プログラムはテスト用に1ms間隔でタイマ割り込みを発生させ、

タイマ割り込み内でR_IICA0_Master_Send関数を利用してデータを送信するというものです。

本来であれば送信完了後にr_iica0_callback_master_sendend関数が呼ばれると考えているのですが、

呼ばれない状況です。

原因、解決法をご教示いただければ幸いです。

・評価ボード:HSBRL78F14-***

・開発環境:CS+ for CC V8.06.00 [03 Jun 2021]

・デバッガー:E1エミュレータ

・I2C通信の設定

  ・転送モード:シングルマスタ

  ・カウント・クロック設定:fCLK/2

  ・自局アドレス設定:16

  ・動作モード設定:標準

  ・転送クロック:100000 bps

  ・割り込み設定:高

  ・コールバック機能設定:マスタ送信完了、マスタ受信完了、マスタ・エラーすべてON

  ・コールバック拡張機能設定:マスタ送信/受信完了コールバック時にストップコンディションを生成

  • チョコです。

    >タイマ割り込み内でR_IICA0_Master_Send関数を利用してデータを送信するというものです。

    タイマ割り込み内でI2C通信が完結しているのであれば、割り込みの優先順位の関係で、I2C通信完了割り込みがタイマ割り込みの優先順位より低いために割り込みが受付けられないか、I2C通信完了の方が優先順位は高いが、多重割り込み処理対応(タイマ割り込みの頭でEI()処理)を行っていないことが考えられます。

    それとも、R_IICA0_Master_Send関数はスレーブアドレスの送信を開始したところで戻ってきてしまうのですが、その段階でブレークしてしまっていてI2C通信完了割り込み処理が実行されていないということはないでしょうか。

  • チョコさん

    ご回答ありがとうございます。無事解決いたしました。

    >> 多重割り込み処理対応(タイマ割り込みの頭でEI()処理)を行っていない

    まさしくこちらが原因でした。Ei()処理はmain関数で呼ばれているため、タイマ割り込み内では不要と考えておりました。私の勉強不足でした。

    本当にありがとうございました。

  • チョコです。

    >無事解決いたしました。

    よかったですね。

    多重割り込みで引っかかる人は結構いますが、一度経験すると後は簡単に対応できるようになります。