RH850/F1KM-S1を使っていて、CPUリセットが発生します。リセット要因レジスタ(RESF)の読み出し値が「0x00002000」でビット13がリセット要因として示されていますが、マイコンマニュアルではリセット要因が割り当てられていないビットとなります。
リセットの原因や解決方法をご存じであれば、ご教示いいただければと思います。
わわいです
> CPUリセットが発生します。
非常にあるあるなはなしなんですが、リセットがかかっている、のではなく、プログラムのバグでCPUが暴走して、たまたまプログラムが再起動している(ように見える)だけなんでは。
デバッガで、要所でブレークポイントを設定するなりして、どこで止まるのか、どこでリセットがかかる(ように見えるのか)を調べていってみましょう
RESFはどうやって読み込んで確認していますか?
・リセットベクタの先頭でデバッガでブレークしてレジスタを確認していますか?
・それとも大域変数にコピーして確認していますか?
後者の場合、記述に気をつけないとレジスタの値は正しく取得できません。リセットベクタ内でランタイムルーチンがユーザに意識しないで色々と初期化をします。読むと必ず0となるビットが1ならおそらく、その値の参照方法に問題があると思います。あと、本来1でないとダメなビットが0の場合、RESFCレジスタでクリア操作コードが生成されていると思います。
わいわい様、Yamamoto様リプライをいただきありがとうございます。
マイコンマニュアルにはRESFにリセット要因定義されていないビットでしたのでルネサス様の技術サポートに問い合わせたところ、OPBT1のビット9(予約ビットで書き込む場合は"0")に"1"を書き込んでいたことが原因でした。OPBT1のビット9を "0" に設定したところCPUリセットが発生しなくなりました。
今回の現象としてはOCD機能でCPUリセットをマスクできたことから意図してない割り込みなどは発生していないこと、また、RESFレジスタの確認ポイントもリセット直後でのブレイクポイント(0x00000000)で確認してレジスタの不正操作がないことまでは確認しておりました。ですが、RH850の取り扱いが初めてであり、OPBT1の予約ビットまでのケアができておりませんでした。
OPBT1のビット9に“1”を書き込んでしまったのは、使い始めにOPBT0の更新をRenesasFlashProgrammerを使って設定を行ったのですが、その時にOPBT1の設定値(デフォルトで0xFFFFFFFF)をそのままにしておいたことが原因となります。