MxKazと申します。掲題の件で以下のようにしてビルドしますと、動作しません。
SYSTEM.HOCOCR2.BIT.HCFRQ = 2;//HOCO周波数2:20MHzSYSTEM.HOCOCR.BIT.HCSTP = 0;//HOCO動作SYSTEM.ROMWT.BIT.ROMWT = 0x02;//ROM:2WaitSYSTEM.PLLCR.BIT.PLLSRCSEL = 1;//PLLクロックソース選択:HOCOSYSTEM.PLLCR.BIT.PLIDIV = 1;//:2分周→10MHzSYSTEM.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分周 60MHzSYSTEM.SCKCR.BIT.ICK = 1;//ICK 2分周 120MHzSYSTEM.SCKCR.BIT.PCKA = 2;//PCLKA 4分周 60MHzSYSTEM.SCKCR.BIT.PCKB = 1;//PCLKB 2分周 120MHz
そこでSYSTEM.PLLCR.BIT.STC = 0x2F;//PLL回路 24倍→240MHzの部分を0x27 (20倍)にして100MHzにすれば動作します。
何か設定が間違っているのだと思いますが分かりません。どなたかご教授宜しくお願いします。
こんにちは、MXkaz さん。
PLL 選択後に、SCKCR レジスタの設定を行っていますが、SCKCRは、初期 1/1 分周なので、瞬間的に、許容できないクロックが出てしまうと思います。
SCKCR3 の PLL 選択は、SCKCR の設定が完了してから行う必要があると思います。(それが、根本的な原因かは、実験しないと判断出来ないが・・)
経験的に、RXマイコンは、かなりのオーバークロックが許容できるようなので…
経験的に、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のところ、参考にさせて頂きます。