前回の記事のこともあり、Sam ちゃんを弄るモチベが上がってきました。
クロックの勉強がてら記事に記載します。備忘録的なので誤りがあるかも。気づいた方は何なりとコメントください。以下に示す図は全てデータシートから引っ張ってきました。
全体像
各種クロック構成を示します。
自分なりに言葉で説明してみます。各種クロックソースから出てきたクロック信号は全てそれぞれのクロックジェネレーターと呼ばれるマルチプレクサに入力されます。各クロックジェネレーターの出力はあるレジスタで選択でき、その出力はマスクしたり分周したり出来るというわけです。そして各出力は更にクロックマルチプレクサに入力され、各種ペリフェラルに分配されます。
ここで SYSCTRL と GENERIC CLOCK CONTROLLER はペリフェラルのブロックの名前です。つまり SYSCLK->...
と GCLK->...
で設定してやる必要があるというわけですね。
もう少し詳しく見ていきましょう。
クロックジェネレーター0はメインクロックであり、DFLL48M のクローズドループ入力に接続されています。図中の PM はまだよく見ていません。すみません。
クロックジェネレーター
もう少し掘り下げます。実際設定する際にレジスタを弄ることになるのですが、どうも GCLK
レジスタ群の中に GCLK
とついたものと CLK
とついたものがあってなんだかよく分からなくなりそうです。ここでは各レジスタビットの役割について見てみます。
こんな感じ。割りと簡単っすね。
クロックマルチプレクサ
こちらも同様に図を示しておきます。
さあ、じゃあ近いうちにコード書くぞ。