Atmel Sam D21のクロックについて勉強

前回の記事のこともあり、Sam ちゃんを弄るモチベが上がってきました。

クロックの勉強がてら記事に記載します。備忘録的なので誤りがあるかも。気づいた方は何なりとコメントください。以下に示す図は全てデータシートから引っ張ってきました。

全体像

各種クロック構成を示します。

自分なりに言葉で説明してみます。各種クロックソースから出てきたクロック信号は全てそれぞれのクロックジェネレーターと呼ばれるマルチプレクサに入力されます。各クロックジェネレーターの出力はあるレジスタで選択でき、その出力はマスクしたり分周したり出来るというわけです。そして各出力は更にクロックマルチプレクサに入力され、各種ペリフェラルに分配されます。

ここで SYSCTRLGENERIC CLOCK CONTROLLER はペリフェラルのブロックの名前です。つまり SYSCLK->...GCLK->... で設定してやる必要があるというわけですね。

もう少し詳しく見ていきましょう。

クロックジェネレーター0はメインクロックであり、DFLL48M のクローズドループ入力に接続されています。図中の PM はまだよく見ていません。すみません。

クロックジェネレーター

もう少し掘り下げます。実際設定する際にレジスタを弄ることになるのですが、どうも GCLK レジスタ群の中に GCLK とついたものと CLK とついたものがあってなんだかよく分からなくなりそうです。ここでは各レジスタビットの役割について見てみます。

こんな感じ。割りと簡単っすね。

クロックマルチプレクサ

こちらも同様に図を示しておきます。

さあ、じゃあ近いうちにコード書くぞ。