RTCbソフトウェアリセットについて

CPU:RX210

tool:PDG Ver2.09 (RPDL RX210_library_little.lib 2014/4/16 14:38:10)

Power ON では起動途中でプログラムが途中で止まり、reset では滞りなく起動するという現象が発生しました。

途中で止まっている個所が関数 R_PG_RTC_Start であることが分かりましたので

RPDL のソースコードをリンクして、さらに追いかけると関数 R_RTC_Create の中の

/* Reset the RTC */
RTC.RCR2.BIT.RESET = 1;
/* Wait for the reset to complete */
while (RTC.RCR2.BIT.RESET != 0);

while ループが抜けてこないことが判明しました。

基板によって動作が異なるのでハードウェアによるものと考えたのですが

FITの動作が知りたかったので、サンプルを作り動作を確認したところ現象は発生しませんでした。

FITとRPDLとのソースコードを見比べました。

FIT の関数 rtc_init にはソフトウェアリセットを実行する前に以下のコードが入っていました。

/* Disable RTC interrupts */
RTC.RCR1.BYTE = 0x00u;
while (0x00u != RTC.RCR1.BYTE)
{
    /* Confirm that it has changed */
    nop();
}

そこでこの部分だけ取り出して、関数 R_PG_RTC_Start の前に入れたところ現象が発生しなくなりました。

このような現象が発生したことはありますでしょうか。

  • わわいです
    このような現象が、というより、ハードウエアマニュアルの記述ではどうなってるのかをまず調べるべきなんじゃないんでしょうか。
    ハードウエアマニュアルの記述と矛盾する、というのであれば問題でしょうけど。
  • こんにちは、

    今回の件と関係あるかわかりませんが、PDG Ver2.09 (RPDL RX210_library_little.lib 2014/4/16 14:38:10)に関して以下の情報がありました。
    www.renesas.com/.../140901tn3_j.pdf
    この問題のパッチファイルが出てます。
    www.renesas.com/.../D4000008.html

    ご確認してみてはいかがでしょうか?
  • CPUの正確な型番は R5F52108CDFP です。

    わわいさん
    R_PG_RTC_Start も rtc_init も殆どハードウエアマニュアルの RTCb クロック設定手順に従っています。
    ハードウエアマニュアルを見た上での質問です。

    SAさん
    パッチはすでに当ててあります。

    率直に疑問を上げますと
    1.RTCb ソフトウェアリセットは必ず完了することを前提としているが本当にそうなのか。
    2.Disable RTC interrupts と RTCb ソフトウェアリセットとに因果関係は有るのか。
    ルネサスのCPU設計者、ライブラリ開発者から回答を得られればと思ったですが
    聞くところを間違っていたでしょうか。
  • > ルネサスのCPU設計者、ライブラリ開発者から回答を得られればと思ったですが
    > 聞くところを間違っていたでしょうか。

    japan.renesasrulz.com/.../
    > かふぇルネとは ?
    > かふぇルネは、ルネサスユーザ同士の技術的な情報交換のためのフォーラムサイトです。

    ということなので間違ってますね。
  • ありがとうございました。
    場違いで申し訳ありませんでした。
    失礼します。
  • わわいです。
    RXに限らず、RTCというのはCPUリセットがかかろうが、CPUが動いてなかろーが、あまつさえ、電源が切断されているときでさえ動き続けるように作られてますので、一般的な周辺デバイスとはちと考え方を変える必要があります
    電源投入時のCPUリセット時も、場合によってはRTCのリセットをしてはいけない場合もあったりします。
    ということで、電源投入直後といえども、RTCのカウント回路やら割り込み回路やらアラームなども、動いている、という前提で各種初期化を実行する必要があります。

    ということで、おそらく、RTCで割込がペンディングの状態になっていてソフトウエアリセットが完了しなかったものと推察されます。んで、この対策としては、ソフトリセットをかける前に、割り込みのディセーブルを実行する必要がある、ということではないかと思われます。