”かふぇルネ“はルネサス製品に関してユーザ同士が自由に会話をするツールであり、回答者はルネサス社内外の方たちとなります。ルネサス製品やソリューションに関して正式な回答をご希望の場合は、ルネサス技術サポート問合せをご使用ください。

RX64M スマートコンフィグレータ 期待する速度で動作しない

お世話になります。 Mきちです。

RX64Mとユーザボードでスマートコンフィグレータを使っています。

メインクロックHOCO 20MHz、システムクロック 100MHz、CMT 1msに設定して

2000回カウントすると、CS+上の測定で2500msぐらいかかっています。

同様に、SCIでも設定したbpsの7k~8割ほどの速度しか出ずにフレーミングエラーとなってます。

確認すべきことがありましたら、ご教示ください。

  • Mきち さん、こんにちは。NoMaYです。

    RXスマートコンフィグレータのクロック設定画面の画面コピーが見たいです。(ちゃんと設定したと主張されるとは思いますけれど、、、)

  • NoMaYさん、ご無沙汰しております。

    またお世話になります。

    キャプチャ貼り付けてみました。

    よろしくお願いします。

  • Mきち さん、こんにちは。NoMaYです。

    画面コピーを見ました。クロック設定は合っていますよね、、、それで、確認なのですが、特に(2)はどうなのでしょうか?質問/相談で時々あるのが、実は、他にも色々な処理をさせていて、それが悪さをしていた、というのがあるものですから、、、

    (1) 使っているCMTとSCIはFITでしょうか?CGでしょうか?
    (2) 動作しないというプログラムで動いているのはCMTとSCIだけでしょうか?
    (3) SCIで速度が出ないというのはUARTの1バイト分の長さが伸びていることをオシロで確認したとかでしょうか?

  • Mきちです。 早々の回答ありがとうございます。

    1)FITです。 Config_xxx を使っています。

    2)タイマスタートの前に、IIC でFRAM読込をしていましたが、現在はコメントです。

      SCI もコメントにして、タイマ割込とLED点灯だけにしてあります。

    3)はい。 送信データをオシロで見て、115Kbpsのところ、90Kbpsぐらいでした。

           IIC も100Kbpsの設定で、80Kbpsぐらいでした。

           全体的に、2割程遅く動作している感じです。

      ちなみに、タイマを 800us 設定にすると 2000カウントでほぼ2秒です。

  • 試しに、BSPとCMT0 だけのプロジェクトを作ってみました。

    クロックは同設定、タイマも 1ms 設定で、2000カウントで、2498ms になります。

    CGでも同様のプロジェクトを作ってみました。

    クロックは同設定、タイマも 1ms 設定で、2000カウントで、1998ms になります。

  • Mきち さん、こんにちは。NoMaYです。

    なるほど、そうなりますと、FITのR_CMT_RXモジュールがおかしい、という話になりますね。(たぶん、R_SCI_RXも。) そういうことですと、R_BSP/R_CMT_RX/R_SCI_RXモジュールのバージョンは、それぞれ幾つでしょうか?知りたいです。

    それから思ったのですが、r_bsp_config.hをzipファイルに固めて添付して投稿して頂く事は出来ますか?その内容を見て、おかしなことがないか(例えばR_BSPで仕様変更があったけれども、r_bsp_config.hに残っていた過去の設定の残骸とR_CMT_RX/R_SCI_RXとで不整合を起こしていたとか、そういったことがないだろうか)と気になったからです。

  • Mきち さん、こんにちは。NoMaYです。

    あっ、私、間違えましたかも。CGといえば、そういえばRX64Mは昔のコード生成機能があった品種でしたね。Mきちさんが言っているCGは、そのことですね。

    先ほどの質問は、一旦、無しにさせて下さい。

  • Mきち さん、こんにちは。NoMaYです。

    改めて考えてみたのですけれど、昔のコード生成機能で生成させたコードでは期待通りに動いたということで、マイコンが壊れていないことは間違いないだろうと思います。

    そして、今のRXスマートコンフィグレータで、クロック設定画面は合っていますし、CMTもSCIもConfig_XXXで時間間隔やボーレートの設定を間違えそうな落とし穴も無いですよね。

    そう考えて気になったのが、RXスマートコンフィグレータとR_BSPモジュールとの間で不整合が発生していないだろうか?あるいは、R_BSPモジュールとConfig_XXXとの間で不整合が発生していないだろうか?です。思うに、あと以下を試して期待した動作をしなければ、ルネサスさんにバグとして報告した方が良さそうな気がします。

    ・ RXスマートコンフィグレータを最新版にして、RXスマートコンフィグレータに組み込まれている最新のR_BSPモジュールを使って、CMTとSCIのConfig_XXXで期待した動作をするかどうか?

  • Mきちです。

    Renesas Smart Configurator
    Version: 2.8.1

    BSPは、5.63 ですね。

    BSPとCMTのみ残して、他コンポーネントは削除しました。

  • Mきち さん、こんにちは。NoMaYです。

    > Renesas Smart Configurator Version: 2.8.1 BSPは、5.63 ですね

    今、最新版は、Renesas Smart Configurator Version: 2.9.1、BSP: 5.64、となっていますね。

  • Mきち さん、こんにちは。NoMaYです。

    自分で最新版で生成させてみて思ったのですが、まず以下の値がどうなっているか、でしょうかね。

    Config_CMT0.h

    /* Compare Match Constant Register (CMCOR) */
    #define _1869_CMT0_CMCOR_VALUE              (0x1869U)

     
    私の手元では、50MH(20nsec)でPCLK/8で0x1869U(10進6249)となり、20nsec×8×6249=999840ns≒1ms、の筈、となりました。

  • Mきち さん、こんにちは。NoMaYです。

    ソースを調べていて思ったのですが、クロック設定画面で、リセット後からHOCOを動かす、というチェックボックスをアンチェックに変更すると、どうなりますでしょうか?

    なぜなら、以下のコードに気付いたのですが、リセット後からHOCOが動いていると、以下の切り替え処理が実行されないように思ったからです。(つまり、HOCO 16MHのまま。)

    src\smc_gen\r_bsp\mcu\rx64m\mcu_clocks.c

    static void clock_source_select (void)
    {

        /* Use HOCO if HOCO is chosen or if PLL is chosen with HOCO as source. */
    #if (BSP_CFG_CLOCK_SOURCE == 1) || ((BSP_CFG_CLOCK_SOURCE == 4) && (BSP_CFG_PLL_SRC == 1))
        /* HOCO is chosen. Start it operating if it is not already operating. */
        if (1 == SYSTEM.HOCOCR.BIT.HCSTP)
        {
            /* Turn on power to HOCO. */
            SYSTEM.HOCOPCR.BYTE = 0x00;

            /* Stop HOCO. */
            SYSTEM.HOCOCR.BYTE = 0x01;

            /* WAIT_LOOP */
            while(1 == SYSTEM.OSCOVFSR.BIT.HCOVF)
            {
                /* The delay period needed is to make sure that the HOCO has stopped. */
                R_BSP_NOP();
            }

            /* Set HOCO frequency. */
            #if   (BSP_CFG_HOCO_FREQUENCY == 0)
            SYSTEM.HOCOCR2.BYTE = 0x00;         //16MHz
            #elif (BSP_CFG_HOCO_FREQUENCY == 1)
            SYSTEM.HOCOCR2.BYTE = 0x01;         //18MHz
            #elif (BSP_CFG_HOCO_FREQUENCY == 2)
            SYSTEM.HOCOCR2.BYTE = 0x02;         //20MHz
            #else
                #error "Error! Invalid setting for BSP_CFG_HOCO_FREQUENCY in r_bsp_config.h"
            #endif

    }

     

  • Mきちです。

    NoMaYさん、ありがとうございます。

    「リセット後からHOCOを動かす」というチェックボックスを

    アンチェックに変更したところCMTがほぼ期待値になりました。

    すみません。あまり考えずにチェックにしていました。

    ちなみに、 (CMCOR) は、(0x1869U) でしたので、ご指摘の通り

    チェックがONのため、正しく設定されていなかったと思われます。

    これで大丈夫かな。 IIC、SCIを復活させて速度を測ってみます。

  • Mきちさん、NoMaYさん

    シェルティです、こんにちは。

    情報ありがとうございます。またお手数おかけしてすみません。

    プロジェクト作るときにボードを選べるようにして、ボードに合わせてスマートコンフィグレータのクロック設定が補正されるように改良を進めています。近いうちにクロック設定もあまり気にせずスマートコンフィグレータがボードに合わせて自動設定してくれるようになってきます。

    それから、NoMaYさんの指摘は、BSPを直さないといけない気がします。現在開発チームに診てもらっています。

    また書き込みます。

    以上です

  • シェルティさん、こんにちは。NoMaYです。

    > それから、NoMaYさんの指摘は、BSPを直さないといけない気がします。

    ケアありがとうございます。ただ、昨晩から思っていることですが、マイコンの仕様から考えるとBSPの設計は充分に理に適っているような気もしているのです。

    (1) HOCOクロック周波数を切り替える時は一旦HOCOを動作停止にしないといけない(このマイコンの仕様)
    (2) リセット後からHOCOを動かしたいという欲求は最初からずっとHOCOクロックを使い続けたいということだと思います
    (3) ですが上記(1)で一旦HOCOを動作停止しなければならないのであれば上記(2)の欲求と反するような気がします
    (4) なので上記(1)がある以上はリセット後からHOCOを動かしたい場合は現実的には16MHzの選択肢しかないと思うのです

    ちなみに、今回はMきちさんの文面で"ユーザボード"となっているので"カスタムボード"かなと思います、、、

    [追記]

    なお、リセット後からHOCOを動かす、というオプションと一緒に、リセット後に動かすHOCOのクロック周波数を選択することが出来る、というオプションがあるマイコン(RXマイコンでそのようなものがあるかどうかは把握していませんが)であれば、また、話は変わってきますけれども、、、