Sim's blog

電子工作はじめてみました

mbedの動作クロック

2009-12-13 20:47:03 | mbed
公式サイトにmbedの動作クロックが書いてないような気がするので調べてみました。

mbedはNXPのLPC1768というARM Cortex-M3をCPUとして使っています(NXPのユーザーズマニュアル pdf)。
mbedの回路図(pdf)を見ると12MHzがX1に入力されています。この12MHzをPLLで逓倍してメインクロックとして使っています。

ユーザーズマニュアル(以下umと略記)のp.37にPLLの出力周波数の式が書いてあります。

(1) Fcco = (2×M×Fin)/N

FccoはPLLの出力周波数
MはPLL0CFGのMSEL0フィールド+1
NはPLL0CFGのNSEL0フィールド+1
FinはPLLCLKINの周波数(um p.27によると12MHz)

MとNを知るためにはPLL0CFGレジスタの内容を読まないといけません。umのp.32によると番地は0x400fc08cです。下位15ビットがMSEL0でビット23-16の8ビットがNSEL0です。以下のコードを使ってPLL0CFGを読み出しました。
int main(){
  printf("%08x", *(unsigned *)0x400fc08c);
}

読み出した結果は

0000000b

なのでMSEL0 = 0x000b、NSEL0 = 0x00です。つまりM=12、N=1です。上の式に代入してみると288MHz(= 2 * 12 * 12MHz / 1)がPLL0の出力周波数になります。

CPUの動作クロックはCCLKという名前です。um p.50の図10を見るとPLL0の周波数をCPU Clock Dividerで分周してcclkを作っています。分周のパラメータはCCLKCFGというレジスタで設定するようです。

um p.51にCCLKCFGの設定が載っています。アドレスは0x400fc104で下位8ビットのCCLKSELに1を足した値で分周するようです。つまり

(2) cclk = Fcco / (CCLKSEL + 1)

です。CCLKCFGを読み出してみると

00000002

でした。つまり3分周していることになります。上で求めたFccoの288MHzを(2)式に代入するとcclkは96MHz(= 288MHz / 3)ということになります。

一応、100MHzまで動作することのできるCPUですが、外部クロックが12MHzなので、可能な最高速である96MHzで動作しています。

外部クロックが12MHzなのはUSBの関係だと思います。

最新の画像もっと見る

コメントを投稿