■マイコン:RL78(R5F10EGE)
上記のマイコンを使用しています。X1/P121端子、X2/EXCLK/P122端子に水晶発振子を接続し、プログラム起動時にCPUクロックを「高速オンチップ・オシレータ」から「高速システムクロック」に切り替えようと試みていますが、うまくクロックが切り替わってくれません。何が原因なのかを特定するのに苦慮しております。アドバイスがございましたらご教授いただけると助かります。
以下、該当箇所(クロック切り替え)のプログラムです。
void R_CGC_Create(void){ uint8_t temp_stab_set; uint8_t temp_stab_wait;
/* Set fMX */ CMC = 0x40U; OSTS = 0x07U; MSTOP = 0U; temp_stab_set = 0xFFU; do { temp_stab_wait = OSTC; temp_stab_wait &= temp_stab_set; } while (temp_stab_wait != temp_stab_set); /* Set fMAIN */ MCM0 = 1U; while (MCS == 0U); /* Set fSUB */ XTSTOP = 1U; OSMC = 0x10U; /* Set fCLK */ CSS = 0U; /* Set fIH */ HIOSTOP = 1U;}
現象としては、上記のプログラムの中の、while (temp_stab_wait != temp_stab_set);でwhile文のループから抜けなくなります。
試しに上記のWhile文のループをコメントアウトすると、今度はwhile (MCS == 0U);で同じくwhile文のループから抜けなくなります。
チョコです。
RL78/G1Aの環境は持っていないので、クロック周りは変わらないはずなので、G13のQB-R5F100LE-TBを使って確認しましたが、
問題なく動作しています。
コード生成で初期設定を行い、" while (MCS == 0U);"を追加してみました。それでも、問題なくmain関数が起動します。
動作確認用にTM07を500ms(20MHzの高速システムクロック使用)のインターバルタイマで動作させ、INTTM07割り込みで、
LEDを反転させています。ついでに、INTTM07割り込みの中でスイッチをチェックして、押下されたことが確認されたら、MCM0を
反転するようにしています。
これで、起動時には500ms毎にLEDが反転しますが、スイッチを押すとインターバルは317ms程度になりました。LEDの点滅速度で
メインクロックが切り替わていることが確認できました。
使用したプロジェクトのzipファイルを添付しておきます。
OSC.zip