RXをe2studioのスマートコンフィグレータのクロック設定で発信源を外部発信入力にしてコード生成し、E2liteでデバッグ実行するとPLLクロックのOSCOVFSRのチェック処理で無限ループします。
mcu_clocks.c
/* Set the oscillation stabilization wait time of the main clock oscillator. */#if BSP_CFG_MAIN_CLOCK_SOURCE == 0 /* Resonator */ SYSTEM.MOSCWTCR.BYTE = BSP_CFG_MOSC_WAIT_TIME;#elif BSP_CFG_MAIN_CLOCK_SOURCE == 1 /* External oscillator input */ SYSTEM.MOSCWTCR.BYTE = 0x00;#else #error "Error! Invalid setting for BSP_CFG_MAIN_CLOCK_SOURCE in r_bsp_config.h"#endif
/* Set the main clock to operating. */ SYSTEM.MOSCCR.BYTE = 0x00;
/* Dummy read and compare. cf."5. I/O Registers", "(2) Notes on writing to I/O registers" in User's manual. This is done to ensure that the register has been written before the next register access. The RX has a pipeline architecture so the next instruction could be executed before the previous write had finished. */ if(0x00 == SYSTEM.MOSCCR.BYTE) { R_BSP_NOP(); }
/* WAIT_LOOP */ while(0 == SYSTEM.OSCOVFSR.BIT.MOOVF) { /* The delay period needed is to make sure that the Main clock has stabilized. If you use simulator, the flag is not set to 1, resulting in an infinite loop. */ R_BSP_NOP(); }
で無限ループします。
何か良い回避方法ありませんでしょうか?
Muraさん、こんにちは。NoMaYです。あと、ひょっとして、○○○ Debug.lauchでデバッガを起動していたりしませんでしょうか?e2 studioでは今までには無かった事例ですけれども(他方CS+では頻発している事例ですが) 初学者さんということですので、シミュレータで起動してしまっていたことになっていたのかも知れないと思ったのです。もし、○○○ Debug.lauchで起動していましたら、○○○ HardwareDebug.lauchで起動してみて下さい。(すみません、シミュレータで起動した場合に、まさにその場所で無限ループするのか、正確には記憶していなかったりしますので、もしかすると外しているかも知れませんけれども。)
シミュレータで起動されていれば「デバッグ」のビューに[Renesas Hardware Debugging] ではなく [Renesas Simulator Debugging (RX,RL78)] のような表示が出るので、そこで区別が付きます。シミュレータは周辺回路をシミュレーションしないので、レジスタの値も期待したようには動いてくれません。(コンペアマッチのタイマイベントは疑似的に動かしてくれますが、それにしても割り込みを発生させるだけでコンペアマッチのカウンタは更新されません)シミュレータだとループを抜けないのはそれが理由です。実際にクロックが来ているかも気にはなりますが。(参考) RX621 内臓フラッシュROMイレーズエラーを伴うデバッグ不可https://japan.renesasrulz.com/cafe_rene/f/forum5/8163/rx621-rom
ほやさん、こんにちは。Muraです。
ご教示有難うございます。
参考にさせて頂きます。