いつもお世話になっております。
コード生成で生成したConfig_RIIC0を使用し開発を進めているのですが以下の現象が発生しておりご教授いただけますと幸いです。
【発生現象】
R_Config_RIIC0_Start()コール後に、r_Config_RIIC0_error_interrupt()が永遠に呼ばれる
r_Config_RIIC0_error_interrupt()を確認した所、どのif/else ifにも入らず、下記のelseに入っております。
:
else { /* Do nothing */ }
【備考】
コード生成のバグがあるようで下記のコードは削除しましたが、そもそもその条件成立しておりません。
https://www.renesas.com/jp/ja/doc/toolnews/jpn/2019/r20ts0462jj0100-cstnno.pdf
bunbunさん、こんにちは。NoMaYです。> 下記のコードを実施した際に、0x03を送信された際のSDA波形が0001 1101(0x1D)になります。> 但しr_Config_RIIC0_transmit_interrupt()内にBreakを貼り、1Byteずつ止めるとSDA波形は0x08, 0x02, 0x03と順次送信されました。提示されていたコードはスタック上に送信データの配列を確保していますが、送信完了待ちを、R_Config_RIIC0_Master_Send()を実行した関数から抜けた後で、やっていたりしないですか?
bunbunさん、こんにちは。NoMaYです。うまく意図が伝わらなかったと思われますので、言い方を変えてみます。
R_Config_RIIC0_Start();MD_STATUS status;uint8_t snd_dt[2] = {0x02, 0x03};if((status = R_Config_RIIC0_Master_Send(0x08, snd_dt, 2)) != MD_OK){ printf("[ERROR ] VL53L0X::writeReg() 0x%x\n", status);}
の後は、すぐ
while(1) ;
とか
for(;;) ;
のような無限ループでしょうか?
bunbun様、鈴木と申します。情報ありがとうございます。
Q1 -> 引数の認識は問題ありません。アドレスはスマートコンフィグレータで後からR/Wフラグを付加するので、そのままのアドレスを指定します。
Q2 -> はい、R_Config_RIIC0_Master_Send()をお使いください。
R_Config_RIIC0_Master_Sendは割り込みで処理されますので、関数を呼んだ後に時間待ちが必要です。(あるいは割り込みハンドラで送信完了を待つ)
アドレスがあっていれば送信されますので、波形を見てご確認ください。
SWが押下されたら送信するプログラムで試してみましたが、送信できました。
volatile uint8_t gSw1;
volatile uint8_t gData[2] = { 0x2, 0x3 };
void main(void)
{
gSw1 = 0;
R_Config_ICU_IRQ1_Start();
R_Config_RIIC0_Start();
while (1)
if ( gSw1 == 1 )
R_Config_RIIC0_Master_Send( 0x40, gData, 2);
}