« PPG0の出力をヘッドホンで聴いてみる | トップページ | FRボードで音楽演奏 »

2008年7月 2日 (水曜日)

5月号の第6章「タイマ割り込みを使ったプログラミング」を改めて読み直す

前回エントリでも取り上げたインターフェース2008年5月号の第6章の記事を改めて読み直す。気になったのは、

CPUクロックやらCLKPと呼ばれる周辺機器のクロックについてで、P131を見ると今回のボードではシステムクロック用として10MHzのクリスタルが最初から実装されているので、初期状態では

  • CPUのクロックは5MHz
  • 周辺機器のクロックは1.25MHz

と書いてある。

あれ、CPUのクロックって40MHzじゃ?と思った人もいるのではないだろうか。確かにインターフェース2008年5月号の第1章(P68,P74)ではクロック周波数は40MHzで、その根拠はシステムクロック用の10MHzをPLLで4逓倍しているからと言う記述が見られる。その流れで、

CPUクロックは40MHzでしょ?その理屈だと必然的に周辺クロックは最大値の20MHzとなる。これを16分周して、なんで第6章のサンプルの説明(P133)の様にカウントクロック周期が12.8μsecになるん?

と言う疑問が浮かんだのが今回のエントリの源泉。

しかし、この事(CPUクロックは40MHz)を鵜呑みにしてはいけない。ハードウェアマニュアルのP90(ちなみに先月にハードウェアマニュアルが改訂されているようだ。ファイル名が「CM71-10119-1.pdf」から「CM71-10119-2.pdf」に変わっていて、改訂箇所はAdodeReaderで表示すると分かるようになっている。本エントリ以後はCM71-10119-2.pdfでのページ数となっている)のCLKRの値の初期値を見ると

  • [bit10]: PLL1EN (PLL1 ENable)の初期値が0(メインPLL停止)

となっているのが分かる。つまりPLLは停止状態でソースクロックである10MHzは4逓倍されていない。さらに

  • [bit9, bit8]: CLKS1, CLKS0 (CLocK source Select)の初期値が00(X0/X1 よりの原発振入力の2 分周)

となっている。これはFRコアのクロックソースの設定で、X0/X1と言うのはソースクロックの10MHzのことを指す。2分周と言う事は10MHz / 2 = 5MHzで、結局CPUのクロックは初期状態だと5MHzという事になっているようだ。

この流れでP94にあるDIVR0の設定を読むと、

  • [bit11 ~ bit8]: P3, P2, P1, P0 (clkP divide select 3 ~ 0)の初期値が0011(システムベースクロックの4分周)

となっている。これは周辺クロックの設定で、システムベースクロックはさきほどの5MHzであるので5MHz / 4 = 1.25MHzで、結局周辺クロックは初期状態だと1.25MHzという事になる。

これでようやく謎が解ける。今回、PPGの設定を周辺クロックの16分周にしているので、第6章のP133のような記述となるわけである。組み込みメインな人にとっては「いまさらそれがどーした?」的な事かもしれないが、これに気が付くまでに数時間を要した。

ちなみに第5章のA/Dコンバータのサンプルではstartup.asmの52行目から88行目にかけて、PLLで4逓倍し、そのままPLLの出力をベースクロックとする設定がなされているので参考にすると良い(というか、これを見て「あ、デフォルトは40MHzじゃないのね・・・」と、先入観を打破できたのであるが)

|

« PPG0の出力をヘッドホンで聴いてみる | トップページ | FRボードで音楽演奏 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/2790/41718574

この記事へのトラックバック一覧です: 5月号の第6章「タイマ割り込みを使ったプログラミング」を改めて読み直す:

« PPG0の出力をヘッドホンで聴いてみる | トップページ | FRボードで音楽演奏 »