CAN通信の初期設定のサンプルコードについて

お世話になっております。

RL78/F13でCAN通信の初期設定を以前投稿されていたNAKAさんのサンプルコードを参考に行っておりますが、

CANクロック設定後とCANチャンネル通信モード遷移終了後にnop命令を使用しているのはなぜでしょうか?

RL78/F13のハードウェアマニュアルやアプリケーションノートを確認しても記載がなく、

クロックの設定を8MHzから16MHzに変更した場合にこちらの設定時のnopの数も変更した方がよいかのか確認したく。

どなたかご教授いただければ幸いです。

〇参照したサンプルコードのURL

japan.renesasrulz.com/.../rl78-f13-14can

「CAN0MCKE = 1;     //CANモジュールへX1クロックを供給
    __nop();」

「 while((C0STSL&0x0001)!=0){} ///CANチャンネル通信モードに変遷を確認
 
    __nop();」


  • ktcraさん こんにちはNAKAです。

    一昨日、在宅での運動不足解消のため日課のランニング中に転倒し、鎖骨を骨折しちゃいました(~_~;)

    さて、

    時々nopが入いっちゃってるのは、デバッグの時ブレークポイントを張りたいみたいな?どっちかというと癖です。

    whileの中にnop()は、昔チョコさまに何か相談してた時、入れた方が良いとアドバイスいただいた記憶が残っているからです。

    なのでクロック設定時には何の関係もないとおもいます。

  • NAKAさん鎖骨骨折はお気の毒さまです、トレーニング機器を使用しておられるのですか?私も在宅ではいろいろトレーニング機器を使用して7台程ぶっ壊しました、さいきんはDIYで木材のBOXを作り、上り下りをしています、音も静かでこれのほうがよっぽど良かったです。

  • ktcraさん IKUZOさん こんにちはNAKAです。

    毎日、近所の川沿いの散歩道往復7Kmランニングが日課でした。

    他事を考え、両手に電話と鍵を持って走っていたので、もろ肩から転倒しました。(~_~;)

    クロックの設定ということで、外付けXtalでなく内臓のオンチップオシレータでの設定の紹介です。

    内臓オシレータでも問題なく通信できます。

    良かったら参考にどうぞ。

     //高速オンチップオシレータ32MHz使用時
     
     CAN0EN = 1;     //CANモジュールへクロックを供給
     //CAN0MCKE = 1;    //CANモジュールへX1クロックを供給 
        __nop();

     while((GSTS&0x0008)!=0){} //CAN用RAMクリアを待つ GRAMINITフラグが"0":RAMクリアになったか?
     GCTRL &= 0xFFFB;   //GSLPR=0  グローバルリセットモードに変遷 (GMDC=01)
     while((GSTS&0x0004)!=0){} //CANグローバルリセットモード変遷を確認 
     C0CTRL &= 0xFFFB;   //CSLPR=0 チャンネルストップモード⇒チャンネルリセットモードに変遷
     while((C0STSL&0x0004)!=0){} //CANチャンネルリセットモードに変遷を確認
      
     GCFGL = 0x0000;    //DCS=0:fCAN=fCLK/2=16MHzに設定 DLC配置禁止とは?
     C0CFGH = 0x0049;   //SJW=1 TSEG2=5 TSEG1=10  に設定 ボーレートプリスケラ(1)分周無しの場合
     C0CFGL = 0x0001;   //C0CFGL+1 = 2で分周(16MHz/2 =8MHz)=ボーレートプリスケラ = fCAN_8Mhz/((0+1)×16Tq)= 500Kbps 
     

  • チョコです。

    NAKAさん、ランニング中に転倒して骨折とは大変でしたね。お大事に。

    NOPは私のアドバイスによるものでしたか。それならば、これらは全てデバッグのためのものですね。

    ブレークポイントを設定すると、その命令は実行されないので、NOPを追加してNOPにブレークポイントを設定すれば、そこまでの実行結果がちゃんと確認できます。また、ループで割り込み待ちを行うときに、生成されたコードによっては割り込みが入らないことも考えられます。その場合にもNOPをループ中に入れておくことで期待した動作になることがあります。