RL78 高速システムクロックへの切り替え

■マイコン: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文のループから抜けなくなります。

Parents
  • チョコ様
    試しにファンクションジェネレータで8MHzの外部クロックをX2/EXCLK/P122端子に入力し、
    CMC = 0xC0U;
    と設定してもCMCレジスタは0x00のままで設定が変わらないのです。
    ここが原因のような気がするのですが、CMCレジスタが設定できない理由として、どのような事が考えられますでしょうか。
Reply
  • チョコ様
    試しにファンクションジェネレータで8MHzの外部クロックをX2/EXCLK/P122端子に入力し、
    CMC = 0xC0U;
    と設定してもCMCレジスタは0x00のままで設定が変わらないのです。
    ここが原因のような気がするのですが、CMCレジスタが設定できない理由として、どのような事が考えられますでしょうか。
Children
  • チョコです。

    RL78/G1Aの環境は持っていないので、クロック周りは変わらないはずなので、G13のQB-R5F100LE-TBを使って確認しましたが、

    問題なく動作しています。

    コード生成で初期設定を行い、"    while (MCS == 0U);"を追加してみました。それでも、問題なくmain関数が起動します。

    動作確認用にTM07を500ms(20MHzの高速システムクロック使用)のインターバルタイマで動作させ、INTTM07割り込みで、

    LEDを反転させています。ついでに、INTTM07割り込みの中でスイッチをチェックして、押下されたことが確認されたら、MCM0を

    反転するようにしています。

    これで、起動時には500ms毎にLEDが反転しますが、スイッチを押すとインターバルは317ms程度になりました。LEDの点滅速度で

    メインクロックが切り替わていることが確認できました。

    使用したプロジェクトのzipファイルを添付しておきます。

     

    OSC.zip