チョコです。
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が正しい設定です。