初めまして、初投稿になります。よろしくお願い致します。
早速ですが、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;
Kさん、こんにちは。NoMaYと申します。これは以下のコード生成機能の不具合に該当しているのだと思います。シリアルインターフェイスIICAでデータを取得できません