PG2でクロックが設定できない

ロートルのmlapiです。

しばらくぶりにRX210のコードを書きました。
RX210のチップバージョンCの68ピン版を使っています。
Peripheral Driver Generator V.2(PDG2)を使うとハードの初期設定等が楽に書けるので、PDG2で初期化部分を作成しましたが、思わぬ障害に出会いました。

まず最初からクロックが設定した動作になりません。
クロックの水晶が発振しません。

PDG2の設定に問題があるか、いろいろ見直しましたが、デフォルトの低速オンチップクロックから抜け出せないようです。

仕方ないので、PDG2による設定を諦めて、クロック関連のレジスタをはじめからひとつずつ設定すると正常に動作するようになりました。
チップバージョンAの100ピン版では正常に機能していたので、チップバージョンCの68ピン版でも問題ないと考えていましたがそうでもないようです。

PDG2の設定に何か不具合が考えられるでしょうか。68ピン版ではなにか特別な設定が必要でしょうか。

ご存じの方、いらっしゃいませんか。

Parents
  • こんばんは、mlapiです。
    チップはRX210、チップバージョンC、LQFP64ピン版、ROM512k、RAM64kでお分かりでしょう。
    外付け16MHz水晶、PLLによる12逓倍、システムクロック48MHzとまあ普通の設定をしています。

    PDG2での基本クロックの設定は一通りしかありませんので、詳細は省きます。
    (仕事用なのでソースがいま居る家の手元にはありません)
    ほかに、水晶発振による高速クロック、高速オンチップオシレータの設定も試してみましたが、クロック設定のコマンドがいずれも機能しませんでした。
    レジスタを手順通り設定すれば正常に動作することがわかっていますので、回路の問題ではないと思います。
    すでにもう「改修しない」とされているPDG2のライブラリ中の問題を深追いするつもりはありません。
    すこし横着かもしれませんが、何か見落とした点がないかと思い質問をあげてみた次第です。

  • こんばんは、mlapiです。
    68ピンは間違いです。64ピンですね。記憶だけで書いていると間違いが多くなり、近頃自信喪失気味です。
    まあそれはそれとして、せっかくですのでクロックの設定部分のソースを置いておきたいと思います。
    このソースを書く際にもどこだかのWEBの内容を参考にしましたので。
    内容はほとんどレジスタ設定の羅列です。何かの役に立てばと思います。
    ------------------------------------------------------------------------------------------------------------------------------
    volatile int pck;
    /* システムクロック初期化 */
    // R_PG_Clock_Set(); /* (クロック設定関数が動作しないので以下に設定を記述) */
    SYSTEM.PRCR.WORD = 0xA507; /* プロテクト解除 */
    SYSTEM.VRCR = 0; /* 電圧レギュレータ設定 */
    SYSTEM.MOSCWTCR.BYTE = 0x0C; /* メイン発振ウエイト時間 */
    SYSTEM.MOFCR.BYTE = 0x30; /* メイン強制発振コントロール */
    SYSTEM.MOSCCR.BYTE = 0; /* メイン発振動作開始 */
    for(pck=0;pck<1000;pck++); /* 待ち(不要?) */
    SYSTEM.PLLWTCR.BYTE = 0x0C; /* PLLウエイト時間 */
    SYSTEM.PLLCR.WORD = 0x0B01; /* PLL比設定( (1/2)x12 ) */
    SYSTEM.PLLCR2.BYTE = 0; /* PLL動作開始 */
    for(pck=0;pck<1000;pck++); /* 待ち(不要?) */
    SYSTEM.OPCCR.BYTE = 0; /* 高速動作モードに設定 */
    while (SYSTEM.OPCCR.BYTE > 0); /* モード設定待ち */
    SYSTEM.SCKCR.LONG = 0x21821212; /* システムクロック比設定(ICLK=1/2,PCLK=1/4) */
    while (SYSTEM.SCKCR.LONG != 0x21821212);/* クロック比設定待ち */
    SYSTEM.SCKCR3.WORD = 0x0400; /* PLLモード設定 */
    for(pck=0;pck<1000;pck++); /* 待ち(不要?) */
    SYSTEM.SOSCCR.BYTE = 0x01; /* サブクロック停止 */
    RTC.RCR3.BYTE = 0x0C; /* サブクロック使用しない */
    SYSTEM.HOCOCR.BYTE = 0x01; /* 高速オンチップオシレータ停止 */
    SYSTEM.LOCOCR.BYTE = 0x01; /* 低速オンチップオシレータ停止 */
    SYSTEM.PRCR.WORD = 0xA500; /* プロテクト設定 */
    ------------------------------------------------------------------------------------------------------------------------------
Reply
  • こんばんは、mlapiです。
    68ピンは間違いです。64ピンですね。記憶だけで書いていると間違いが多くなり、近頃自信喪失気味です。
    まあそれはそれとして、せっかくですのでクロックの設定部分のソースを置いておきたいと思います。
    このソースを書く際にもどこだかのWEBの内容を参考にしましたので。
    内容はほとんどレジスタ設定の羅列です。何かの役に立てばと思います。
    ------------------------------------------------------------------------------------------------------------------------------
    volatile int pck;
    /* システムクロック初期化 */
    // R_PG_Clock_Set(); /* (クロック設定関数が動作しないので以下に設定を記述) */
    SYSTEM.PRCR.WORD = 0xA507; /* プロテクト解除 */
    SYSTEM.VRCR = 0; /* 電圧レギュレータ設定 */
    SYSTEM.MOSCWTCR.BYTE = 0x0C; /* メイン発振ウエイト時間 */
    SYSTEM.MOFCR.BYTE = 0x30; /* メイン強制発振コントロール */
    SYSTEM.MOSCCR.BYTE = 0; /* メイン発振動作開始 */
    for(pck=0;pck<1000;pck++); /* 待ち(不要?) */
    SYSTEM.PLLWTCR.BYTE = 0x0C; /* PLLウエイト時間 */
    SYSTEM.PLLCR.WORD = 0x0B01; /* PLL比設定( (1/2)x12 ) */
    SYSTEM.PLLCR2.BYTE = 0; /* PLL動作開始 */
    for(pck=0;pck<1000;pck++); /* 待ち(不要?) */
    SYSTEM.OPCCR.BYTE = 0; /* 高速動作モードに設定 */
    while (SYSTEM.OPCCR.BYTE > 0); /* モード設定待ち */
    SYSTEM.SCKCR.LONG = 0x21821212; /* システムクロック比設定(ICLK=1/2,PCLK=1/4) */
    while (SYSTEM.SCKCR.LONG != 0x21821212);/* クロック比設定待ち */
    SYSTEM.SCKCR3.WORD = 0x0400; /* PLLモード設定 */
    for(pck=0;pck<1000;pck++); /* 待ち(不要?) */
    SYSTEM.SOSCCR.BYTE = 0x01; /* サブクロック停止 */
    RTC.RCR3.BYTE = 0x0C; /* サブクロック使用しない */
    SYSTEM.HOCOCR.BYTE = 0x01; /* 高速オンチップオシレータ停止 */
    SYSTEM.LOCOCR.BYTE = 0x01; /* 低速オンチップオシレータ停止 */
    SYSTEM.PRCR.WORD = 0xA500; /* プロテクト設定 */
    ------------------------------------------------------------------------------------------------------------------------------
Children
  • mlapi様、鈴木と申します。
    情報ありがとうございます。実行環境はなんでしょうか。シミュレータでは、動作しないと思われます。
    ボードが手元にないので確認できないのですが、
    具体的にクロックが発振しない部分を教えていただけないでしょうか
  • こんにちは、mlapiです。
    動作させているのは、独自の開発基板で、市販品ではありません。
    水晶発振回路部分は秋月電子通商のRX210マイコンボードと同様なありきたりなものです。
    単純に、PDG2の生成関数では回路が発振してクロックが設定できないということです。PDG2のライブラリをトレースするのは面倒なのでそこまでは追求していません。
    開発環境は最新版CS+、デバッグはE1を使っていますが、これは直接関係ないですね。
  • mlapi様、鈴木と申します。
    もう少し確認させてください
    クロック設定のAPIを呼んでも、動作しないということでしょうか
    下記のチュートリアルは動作するのでしょうか
    www.renesas.com/.../r20ut1448jj0104_pdgrx210_s.pdf
    以上、よろしくお願いします
  • こんばんは、mlapiです。
    遅ればせながら、動かないのはたとえばコード例に書いた次のところです。
    // R_PG_Clock_Set();
    動かないのでコメントアウトしています。
    チュートリアルは実機で試していないので判りません。
    今回の装置ではSCIをたくさん使いましたが、けっこうボロボロでした。
    たとえばSCI9は全く初期化が動かず、ほとんどのレジスタをはじめから設定しました。
    まぁ、ハードマニュアル通りにすれば問題ないはずなので、E1でレジスタの内容を確かめながら設定手順を作れば良いということです、面倒ですけど。