G10 IICA使用時のスタートコンディション発行について

初めまして、初投稿になります。よろしくお願い致します。

 

早速ですが、RL78 16pinのIICAモジュールを使用し温湿度センサとI2C通信を行おうとしています。

コード生成にて得られた初期設定後(備考(2)参照)に、待機状態(SCLA=1,SDAA=1)の状態から、

下記コードにてスタートコンディションを発行しようとしていますが、波形を確認してもSDAA0立下りが

確認できず、レジスタを確認してもSTD0がセットされません。(CLD0,DAD0も1のまま変化なし)

STCEN=1のためストップコンディション未検出(SPD0=0)でもスタートコンディションは発行できると

認識しています。

 

if ( IICBSY0 == 0 || MSTS0 == 1)        /* Check IIC bus is busy or not */
{

   STT0 = 1; //スタートコンディション生成(SCLA0=1,SDAA0=1⇒0)

   while(STD0 == 0){NOP();}

}

 

デバッガで確認すると、STT0=1は実行され,STD0=1になるまで待機するところまでは

確認できていますが、STD0がセットされずループから抜けない状態です。

 

SCLA,SDAAは10KΩでプルアップしており、試しににIICAモジュールをオフ(IICA0EN=0)し

P15,16をトグルさせたところ、正常に出力できたので回路上が接続がおかしい可能性は

低いと考えています。I2C通信先の温湿度センサ(hdc1080)有無でも状況は変わりませんでした。

スタートコンディションが発行出来ない理由につきまして、ご教授頂けますと幸いです。

 

■備考(1) 環境

開発環境:e2studio Version: 5.4.0.018

デバイス:RL78 G10 16pin(R5F10Y47)

コンパイラ:CCRL v1.04.00

デバッガ:E1

使用ポート:15pin(SCLA0として使用),16pin(SDAA0として使用)

 

■備考(2) IICA初期設定

下記の通り、

・fclk=20MHz

・通信速度 100kbps(標準モード)

にてコード生成したものを使用。

    IICA0EN = 1U; /* supply IICA0 clock */
    IICE0 = 0U; /* disable IICA0 operation */
    IICAMK0 = 1U; /* disable INTIICA0 interrupt */
    IICAIF0 = 0U; /* clear INTIICA0 interrupt flag */
    /* Set INTIICA0 high priority */
    IICAPR10 = 0U;
    IICAPR00 = 0U;
    /* Set SCLA0, SDAA0 pin */
    POM0 |= 0xC0U;
    PMC0 &= 0x3FU;
    P0 |= 0xC0U;
    PM0 |= 0xC0U;
    SMC0 = 0U;
    IICWL0 = _5E_IICA0_IICWL_VALUE;
    IICWH0 = _6A_IICA0_IICWH_VALUE;
    SVA0 = _10_IICA0_MASTERADDRESS;
    STCEN0 = 1U;
    IICRSV0 = 1U;
    SPIE0 = 0U;
    WTIM0 = 1U;
    ACKE0 = 1U;
    IICAMK0 = 0U;
    IICE0 = 1U;
    LREL0 = 1U;
    /* Set SCLA0, SDAA0 pin */
    PM0 &= 0x3FU;

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

    これは以下のコード生成機能の不具合に該当しているのだと思います。

    シリアルインターフェイスIICAでデータを取得できません

  • チョコです。
    > P0 |= 0xC0U;
    > PM0 |= 0xC0U;
    NoMaYさんのコメントのように,ここのコードがおかしいのですが,この問題は既に対応されているはずです。
    最新版のCS+を使われていいないようなので,最新版をインストールされることをお勧めします。
  • IKUZOさん、NoMaYさん、チョコさん
     ご返信ありがとうございます。
     NoMaYさんご提示の内容を参考にして、下記箇所を直すとうまくいきました。
     スレッドには行きついていたのですが読み切れていませんでした。

    P0 |= 0xC0U;
    PM0 |= 0xC0U;
     ↓
    PM0 |= 0xC0U;
    P0 &= 0x3FU;

     環境は最新に更新しておきます。
     ありがとうございました。
Reply
  • IKUZOさん、NoMaYさん、チョコさん
     ご返信ありがとうございます。
     NoMaYさんご提示の内容を参考にして、下記箇所を直すとうまくいきました。
     スレッドには行きついていたのですが読み切れていませんでした。

    P0 |= 0xC0U;
    PM0 |= 0xC0U;
     ↓
    PM0 |= 0xC0U;
    P0 &= 0x3FU;

     環境は最新に更新しておきます。
     ありがとうございました。
Children
No Data