Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page

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文のループから抜けなくなります。

  • 続報です。上記のvoid R_CGC_Create(void)内で、
    /* Set fMX */
    CMC = 0x40U;
    と設定しているのですが、どうもCMCレジスタが0x00のままで書き換わっていないようにみえてます。
    CMCレジスタは「リセット解除後、1回のみ書き込み可能」という仕様から、他にCMCレジスタを書き換えている箇所がないかを疑って確認しましたが、そのような箇所はありませんでした。
  • In reply to ken:

    チョコです。
    高速システムクロックが正常に発振していないと考えられます。
    発振回路のマッチング(発振波形が正常か)を確認してみてください。
    (クロック切り替え回路は両方のクロックが正常に発振していないと動作しません。)
  • チョコ様
    試しにファンクションジェネレータで8MHzの外部クロックをX2/EXCLK/P122端子に入力し、
    CMC = 0xC0U;
    と設定してもCMCレジスタは0x00のままで設定が変わらないのです。
    ここが原因のような気がするのですが、CMCレジスタが設定できない理由として、どのような事が考えられますでしょうか。
  • In reply to ken:

    チョコです。

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

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

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

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

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

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

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

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

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

     

    OSC.zip

  • ひょっとして設定がシミュレータになっているということはないですか?
  • In reply to D70116C:

    チョコ様
    サンプルプログラムのご提供有難うございます。確認してみます。
    d70116C様
    hexファイルをフラッシュメモリに書き込んで動作確認を行っておりますので、設定がシミュレータになっていることはないと思います。

    該当マイコンのHWマニュアルを読み込むと「IAWCTL(不正メモリ・アクセス検出制御レジスタ)でガード機能がONになっているとCMCレジスタの書き込み不可」という情報を得たのですが、残念ながら該当せずでした。
  • In reply to ken:

    チョコです。
    おそらく、初期設定の段階でおかしくなっているようなので、そこまでのプログラムをzipにしてアップしてもらうことは可能でしょうか?
  • In reply to チョコ:

    チョコ様
    無事に高速システム・クロックに切り替えてソフトを動作させることができました。
    色々と対応いただき感謝です。お騒がせしました。
    原因は、CMCレジスタの仕様である「リセット解除後、1回のみ書き込み可能」が満たされておらず、CMCレジスタの設定が切り替わらないことでした。

Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page