読者です 読者をやめる 読者になる 読者になる

ロボコニストの技術日記

知見や技術を備忘録として書こうかな

RX631の初期設定について(2) ~クロック設定の闇編~

こんばんちはひふみです。こんちゃ!

 

今日は、クロック設定についての話を簡単にしたいと思います。

なんで、CMTの後なの?って思われるかもしれませんが、僕自身まさかクロック設定がこんなにも大変なものだとは認識していなかった。。。

最後の最後は、え・・・、ここ・・・?っていう、簡単な見落としでした。

クロックの設定が出来たので恐らくMTUも出来ているのですが、如何せん回路がおかしいのかステッパーが回りません。CMTで回そうとしても回らないので、このブログを書き終わり次第色々確認してみます。

 

さてさて、それでは本題です。今日はタイトルの通りクロック設定の闇についてです。実際、ブロック図通りに書けば動くのですが、そのためにプロテクト解除とか、使わない機能についても設定しないといけなかったりとか、予約ビットですら設定しないといけなかったりとかで、本当にめんどくさかったです。

悲しみ。そろそろ具体的な話をしていきましょうか。

まず、始めにしなければならないことは、レジスタライトプロテクション機能の解除です。僕みたいなアマチュアには罠でしかありませんでした。本来は、プログラムが暴走して、重要なレジスタを書き換えられないようにするためのプロテクト(保護)です。プロテクトレジスタ(以下PRCR)は、上位8bitがPRCキーコードビットと呼び、PRCRレジスタの書き換え可否を制御しています。PRCRレジスタを書き換える場合は、上位8bitを"A5h"とし、下位8bitに設定値を書き込む様です。例としては、

SYSTEM.PRCR.WORD=0xA501 ;

とかでしょうか。これが何を意味するかはデータシートで見てみてください。

さて、これがまずレジスタを叩く為の準備です。以上は今後も使うことになるので、よく調べておきましょう。レジスタ書き換え許可が終わり次第、書き込み禁止に設定しておきましょう。何かプロっぽくてかっこいい!

次の設定で、各クロック発振器を停止しておきましょう。動いている最中に設定は厳禁です。

そして、ようやっとブロック図通りの設定をしていく訳ですが、PLL停止ビットでPLLの動きを止めておきましょう。そして分周の設定、逓倍の設定の二つが終わり次第PLL停止ビットでPLLを許可してあげましょう。

次に、メインクロックを動作させてあげる(MOSCCR)わけなのですが、メインクロックが安定するまで少々お時間頂きたいので、for文か何かで"168h"ほど無駄時間を生成しておきましょう。何故かはかふぇルネで調べましょう(僕は知らない)。

はい。それでは、そろそろ動き出してくれます。200MHzは生成できています。これを各システムに分けていく訳ですが、当然1分周ではいけません。そのため、分周をシステムクロックコントロールレジスタ(SCKCR)で設定します。この時注意しなければならないことがありまして、データシートP.255 表9.1を見てみると、システムクロック以外は大抵50MHz(Max)となっています。従って、4分周以上の分周をしないといけないことになります。そこで、各システムのクロックを分周設定していきます。そしてクロックソースの設定(SCKCR3)をして終了。といきたいのですが、少し遡って罠があります(僕には罠だったけど強い人は罠じゃないだろうな、ハハハ)。おもむろにSCKCRのレジスタの説明を眺めてみます。普段であれば、予約ビットの欄には、"読むと“0”が読めます。書く場合、“0”としてください"みたいな文章が書かれています。ですがどうでしょう、SCKCRの下位8bitは"“0001b”を設定してください"と書かれているではありませんか!これは困りました!困りましたよ!一つ一つ設定するだけでは動かないのです!この"“0001b”を設定してください"を見逃していた僕は、クロックをまともに動かすことが出来ていなかったのです!なんということでしょう!この7月に入ってからあれやこれや悩んでいたことはすべて無駄なことだったのです!!"0001b”を設定してください"を見逃していたために!!!!

・・・取り乱しました。

要は、レジスタ丸ごと設定してくれと仰るのです(iodefine.hで自分で名称付けても良いのかもしれませんが)。今回は面倒なのでレジスタ丸ごと設定してやりましょう。例えば、

SYSTEM.SCKCR.LONG=0x~~~~11 ;

とかでしょうか。最後の11は0b00010001です。あとは適当な設定をしてあげれば動くと思います。LONGになっているのは、このレジスタが32bit長なので、深く気にすることはないですね。

とまぁこんな感じでクロック設定が終わりました。

およそ7月からプログラムを書いていますが、中々進捗出せないですね。悔しいです。今後も頑張っていきます。

 

それでは、日も跨いでしまったので以上としましょう。今回もお読み頂きありがとうございました。

 

おやすみんと!