RX65NのICLKを120MHzにできない。

MxKazと申します。
掲題の件で以下のようにしてビルドしますと、動作しません。

SYSTEM.HOCOCR2.BIT.HCFRQ = 2;//HOCO周波数2:20MHz
SYSTEM.HOCOCR.BIT.HCSTP = 0;//HOCO動作
SYSTEM.ROMWT.BIT.ROMWT = 0x02;//ROM:2Wait
SYSTEM.PLLCR.BIT.PLLSRCSEL = 1;//PLLクロックソース選択:HOCO
SYSTEM.PLLCR.BIT.PLIDIV = 1;//:2分周→10MHz
SYSTEM.PLLCR.BIT.STC = 0x2F;//PLL回路 24倍→240MHz
SYSTEM.PLLCR2.BIT.PLLEN =0;//PLL動作
while (SYSTEM.OSCOVFSR.BIT.PLOVF != 1) //発振待ち
;
SYSTEM.SCKCR3.BIT.CKSEL = 4//PLL選択
SYSTEM.SCKCR.BIT.FCK = 2;//FCLK 4分周 60MHz
SYSTEM.SCKCR.BIT.ICK = 1;//ICK 2分周 120MHz
SYSTEM.SCKCR.BIT.PCKA = 2;//PCLKA 4分周 60MHz
SYSTEM.SCKCR.BIT.PCKB = 1;//PCLKB 2分周 120MHz

そこで
SYSTEM.PLLCR.BIT.STC = 0x2F;//PLL回路 24倍→240MHz
の部分を0x27 (20倍)にして100MHzにすれば動作します。

何か設定が間違っているのだと思いますが分かりません。
どなたかご教授宜しくお願いします。

Parents
  • こんにちは、MXkaz さん。

    PLL 選択後に、SCKCR レジスタの設定を行っていますが、SCKCRは、初期 1/1 分周なので、瞬間的に、許容できないクロックが出てしまうと思います。

    SCKCR3 の PLL 選択は、SCKCR の設定が完了してから行う必要があると思います。(それが、根本的な原因かは、実験しないと判断出来ないが・・)

    経験的に、RXマイコンは、かなりのオーバークロックが許容できるようなので、ICLK が 240Mhz で駄目な感じはしないですが・・

    又、HOCO は、ジッタがかなりあるようなので、それも要因なのかなと思います。

    ※水晶発振なら動作するのかも・・

    ---

    C++ ですが、クロック設定は、以下のリンクを参考にしてみて下さい。

    https://github.com/hirakuni45/RX/blob/master/RX65x/clock_profile.hpp?ts=4

    https://github.com/hirakuni45/RX/blob/master/RX600/system_io.hpp?ts=4

    C++11 以降なら、static_assert、constexpr を使って、設定出来ない定数を設定すると、コンパイルエラーに出来るので、複雑な設定でも間違いを事前に評価出来ます。

  • hirakuni45さん、こんにちは

    情報ありがとうございます。試してみましたが状況は変わりませんでした。もう少し調べてみます。

  • MXKazさんこんにちは、NAKAといいます。


    水晶を16MHzつかっちゃったのでぴったり120MHzにできないのですが

    下記はPLLで8逓倍したものを1/2分周してICLK=64MHzにしてます。

    SYSTEM.SCKCR.LONG = 0x21021311; ⇒ SYSTEM.SCKCR.LONG = 0x20021311;

    で1/1分周で128MHzになります。

  • NAKAさん、こんばんは

    いつもありがとうございます。SCKCRのところ、参考にさせて頂きます。

Reply Children
No Data