RX220 SCI12 PDG2バグ?

RX220でPDG2を使用時、SCI12を設定して「ソースの生成」をすると、以下の通りとなります。

R_PG_SCI_C12.c(抜粋:赤字がおかしい

bool R_PG_SCI_Set_C12(void)
{
bool res;

res = R_SCI_Set(
12,
//この行が空
);

if( !res ){
return res;
}

return R_SCI_Create(
12,
PDL_SCI_ASYNC | PDL_SCI_TX_CONNECTED | PDL_SCI_RX_CONNECTED | PDL_SCI_RX_FILTER_DISABLE | PDL_SCI_HW_FLOW_NONE | PDL_SCI_LSB_FIRST | PDL_SCI_CLK_INT_IO | PDL_SCI_8_BIT_LENGTH | PDL_SCI_PARITY_NONE | PDL_SCI_START_DETECT_LOW_LEVEL | PDL_SCI_STOP_1,
BIT_31 | PDL_SCI_PCLK_DIV_1 | PDL_SCI_CYCLE_BIT_8 | 16 | (117647 & 0x00FFFF00ul),
15
);

}

R_PG_SCI_C6.c(抜粋:問題なし)

bool R_PG_SCI_Set_C6(void)
{
bool res;

res = R_SCI_Set(
6,
PDL_SCI_PIN_SCI6_RXD6_PB0 | PDL_SCI_PIN_SCI6_TXD6_PB1
);

if( !res ){
return res;
}

return R_SCI_Create(
6,
PDL_SCI_ASYNC | PDL_SCI_TX_CONNECTED | PDL_SCI_RX_CONNECTED | PDL_SCI_RX_FILTER_DISABLE | PDL_SCI_LSB_FIRST | PDL_SCI_CLK_INT_IO | PDL_SCI_8_BIT_LENGTH | PDL_SCI_PARITY_NONE | PDL_SCI_START_DETECT_LOW_LEVEL | PDL_SCI_STOP_1,
BIT_31 | PDL_SCI_PCLK_DIV_1 | PDL_SCI_CYCLE_BIT_8 | 16 | (117647 & 0x00FFFF00ul),
15
);

}

R_PG_SCI_C12.cの生成コードがあきらかにおかしく、ポート指定の記述がされません。
当然、このままビルドするとエラーになるので、手動でポート指定を追記しエラー回避しています。

あきらかなバグ?と思いますが、patchは見つけられませんでした。
改善をお願いしたく宜しくお願いします。

  • 続きです。

    UARTは、SCI1,6,12の3つを使っています。
    PDG2で同じ設定(115200bps,8bit,parityなし,stop1,LSBファースト,ハードウェアフロー制御なし)をしてますが、上記ポート設定を記載してもSCI12だけ動きません。

    ⇒R_PG_SCI_StartSending_Cx()関数を使ったデータ送信で、TXD12だけ何も出力しません。
    (TXD1,6はOK)

    何か気を付けることはありますか?

  • のぶた様、鈴木と申します

    GUIは、どのような設定を行っているでしょうか

    例えば RX220 SCI12で下記の設定を行うとソースは正しく生成されました

    すみません・・・画像が貼れないのですが・・・

    調歩同期モード、送信、転送フォーマット 8, なし. 1bit, LSB

    PCLK 20MHz, 転送クロック:内部クロック、 38400bps

    全データの送信完了を関数呼び出しで通知

    その他はデフォルトの設定です

     下記コードが出力されました

    bool R_PG_SCI_Set_C12(void)
    {
        bool res;

        res = R_SCI_Set(
        12,
        PDL_SCI_PIN_SCI12_SCK12_PE0 | PDL_SCI_PIN_SCI12_TXD12_PE1
        );

        if( !res ){
            return res;
        }

        return R_SCI_Create(
        12,
        PDL_SCI_ASYNC | PDL_SCI_TX_CONNECTED | PDL_SCI_RX_DISCONNECTED | PDL_SCI_HW_FLOW_NONE |     PDL_SCI_LSB_FIRST | PDL_SCI_CLK_INT_OUT | PDL_SCI_8_BIT_LENGTH | PDL_SCI_PARITY_NONE |      PDL_SCI_STOP_1,
        BIT_31 | PDL_SCI_PCLK_DIV_1 | PDL_SCI_CYCLE_BIT_8 | 10 | (113636 & 0x00FFFF00ul),
        15
        );

    }

    お使いのマイコンの型番も教えて頂けないでしょうか

    以上、よろしくお願いします

  • 返信ありがとうございます。

    設定の画像を送ります。

    型名は、"R5F52205BxFL"です。

    以上、よろしくお願いします。

    <追伸>

    手動でポートを記述してもSCI12だけ動きません。(SCI1,5,6は問題ないです)

  • のぶた様、鈴木と申します

    情報ありがとうございます。教えて頂いた設定で正常にコードが生成できないことを確認しました

    不具合と思われます

    申し訳ありませんが、PDGに関しては開発が完了しており、PDGを修正できない状況です

    お手数ですが、お客様が回避したように手修正をお願いします

    以上、よろしくお願いします

  • 回答ありがとうございます。

    PDGの不具合について承知しました。

    ただし、ポート記述を手修正で追記しても、ビルドはできますが、動きません。(TXD12が動かない)

    お手上げ状態ですので、手修正で構わないので、解決方法を教えていただけないでしょうか。

  • 解決しました。

    <原因>

    R_PG_SCI_Set_C12()関数を実行しても、ICU.IPR238が設定されません。

    (SCI1,5,6に相当するICU.IPR218,222,226は相当する関数の実行で設定される)

    ICU.IPR238を手動で設定することで、SCI12が動作しました。

    <バグ推定箇所>

    48pinでは存在しないはずのSCI9に相当するICU.IPR234が代わりに設定されていました。

    ソースを追っていくと、IPRレジスタのアドレスを決めているr_pdl_sci_library_data_RX220xx.h, utilities_SCI.cあたりがおかしいように思います。


    r_pdl_sci_library_data_RX220xx.h

    uint8_t rpdl_SCI_GetIndexFromChannel(const uint8_t);
    #define SCI_CHANNEL_INDEX(a) rpdl_SCI_GetIndexFromChannel(a)

    #define IPR_ADDRESS(a) ( a<9?(volatile uint8_t *)&ICU.IPR[IPR_SCI1_] +\
    ((4 * SCI_CHANNEL_INDEX(a)) / sizeof(uint8_t)) : \
    (volatile uint8_t *)&ICU.IPR[IPR_SCI1_] +\
    ((4 * (SCI_CHANNEL_INDEX(a)+1)) / sizeof(uint8_t)))


    utilities_SCI.c

    uint8_t rpdl_SCI_GetIndexFromChannel(const uint8_t channel)
    {
    #if defined (DEVICE_PACKAGE_48_PIN)
    switch(channel)
    {
    case 1:
    return 0;
    case 5:
    return 1;
    case 6:
    return 2;
    case 12:
    return 3;
    default:
    /*Invalid*/
    return 0xFF;
    }
    #else
    switch(channel)
    {
    case 1:
    return 0;
    case 5:
    return 1;
    case 6:
    return 2;
    case 9:
    return 3;
    case 12:
    return 4;
    default:
    /*Invalid*/
    return 0xFF;
    }
    #endif
    }

    ⇒48pinだと、SCI9を飛ばしてのアドレスを計算しているが、パッケージが変わってもIPRアドレスは変わらないはずなのでは!?


    ※私の方では、RX220はまだまだ現役!!なので直して欲しいところです、、