RL78/G10のIICA0のコード生成のバグ

チョコです。

RL78/G10のIICA0のコード生成でバグを見つけたので,報告しておきます。

確認したのはRL78/G10 V1.04.04.01 [11 Nov 2016]です。

(旧版のRL78/G10 V1.04.02.01 [15 May 2015]では正常でした。)

 

IICA0の初期設定(R_IICA0_Create関数)の兼用ポートの設定が間違いです。

void R_IICA0_Create(void)
{
    IICA0EN = 1U; /* supply IICA0 clock */
    IICE0 = 0U; /* disable IICA0 operation */
    IICAMK0 = 1U; /* disable INTIICA0 interrupt */
    IICAIF0 = 0U; /* clear INTIICA0 interrupt flag */
    /* Set INTIICA0 low priority */
    IICAPR10 = 1U;
    IICAPR00 = 1U;
    /* 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;
}

P0の設定は 「P0 &=0x3F;」とするのが正しのですが,この順番ではI2Cバスにヒゲがでるので,PM0の設定と合わせて以下のようにすべきです。

    PM0 |= 0xC0U;

    P0 &=0x3F;

 

なお,マニュアルの表4-5 端子機能使用時のレジスタ,出力ラッチの設定例(2/4)にも間違いがあります。

IICA0を使用するときのPm設定は1ではなく0が正しい設定です。

Parents
  • チョコです。
    情報を追加しておきます。
    RL78/G10でIICA0を使う場合でコード生成を普通に使う場合には,main()関数の頭ででもP0 &= 0x3FU;を実行するのが一番簡単な対策です(実際に通信を開始する前にやれば十分です)。
Reply
  • チョコです。
    情報を追加しておきます。
    RL78/G10でIICA0を使う場合でコード生成を普通に使う場合には,main()関数の頭ででもP0 &= 0x3FU;を実行するのが一番簡単な対策です(実際に通信を開始する前にやれば十分です)。
Children
No Data