Sim's blog

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

クロックプリスケールレジスタ

2008-10-02 00:17:54 | AVR
メモがわり

ATMega88にはクロック分周器が内蔵されています。CLKPSレジスタの値で1, 2, 4, 8, 16, 32, 64, 128, 256分周のどれかを選べます。ヒューズのCKDIV8はCLKPSレジスタの初期値を決めるヒューズです。CKDIV8ヒューズは初期値を決めるだけなので、動作中にCLKPSレジスタを書き換えることでクロック分周値を変更することが可能です。

CLKPSレジスタ(4bit)の内容と分周値です。

CLKPS
0000 1分周
0001 2分周
0010 4分周
0011 8分周
0100 16分周
0101 32分周
0110 64分周
0111 128分周
1000 256分周
1001~1111 予約

書き換え手順は、
(1) CLKPRレジスタのCLKPCEビットを1にします。このときCLKPSn (n=3~0)も0にします。
(2) 4クロック以内にCLKPSnを書き換えます。

具体的には以下のようにします。
    CLKPR = _BV(CLKPCE); // CLKPCEビットを1にする
    CLKPR = 0b0011;      // 8分周にする

ENC28J60のデフォルトのCLKOUTを25MHzだと勘違いしていたので、最初はCKDIV8にして8分周した3.125MHzでAVRを動作させて後で2分周の12.5MHzに切り替える方法を調べていました。でもENC28J60のデフォルトのCLKOUTは25MHzを4分周した6.25MHzだったので、あまり意味はなくなりました。動作している最中に外部クロックの周波数を切り替えるのって、誤動作したりしないのでしょうか。

最新の画像もっと見る

コメントを投稿