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
  • 続報です。上記のvoid R_CGC_Create(void)内で、
    /* Set fMX */
    CMC = 0x40U;
    と設定しているのですが、どうもCMCレジスタが0x00のままで書き換わっていないようにみえてます。
    CMCレジスタは「リセット解除後、1回のみ書き込み可能」という仕様から、他にCMCレジスタを書き換えている箇所がないかを疑って確認しましたが、そのような箇所はありませんでした。
  • チョコです。
    高速システムクロックが正常に発振していないと考えられます。
    発振回路のマッチング(発振波形が正常か)を確認してみてください。
    (クロック切り替え回路は両方のクロックが正常に発振していないと動作しません。)
Reply
  • チョコです。
    高速システムクロックが正常に発振していないと考えられます。
    発振回路のマッチング(発振波形が正常か)を確認してみてください。
    (クロック切り替え回路は両方のクロックが正常に発振していないと動作しません。)
Children
No Data