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 );
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
全データの送信完了を関数呼び出しで通知
その他はデフォルトの設定です
下記コードが出力されました
res = R_SCI_Set( 12, PDL_SCI_PIN_SCI12_SCK12_PE0 | PDL_SCI_PIN_SCI12_TXD12_PE1 );
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;}#elseswitch(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はまだまだ現役!!なので直して欲しいところです、、