メモがわり
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を書き換えます。
具体的には以下のようにします。
ENC28J60のデフォルトのCLKOUTを25MHzだと勘違いしていたので、最初はCKDIV8にして8分周した3.125MHzでAVRを動作させて後で2分周の12.5MHzに切り替える方法を調べていました。でもENC28J60のデフォルトのCLKOUTは25MHzを4分周した6.25MHzだったので、あまり意味はなくなりました。動作している最中に外部クロックの周波数を切り替えるのって、誤動作したりしないのでしょうか。
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だったので、あまり意味はなくなりました。動作している最中に外部クロックの周波数を切り替えるのって、誤動作したりしないのでしょうか。
※コメント投稿者のブログIDはブログ作成者のみに通知されます