【クロックの切り替え手順】
PIC24Fファミリはプログラム実行中でも命令によりクロック源を切り替えることが
可能になっています。
コンフィギュレーションのFCKSM1:FCKSM0ビットでクロック切り替えが許可されており、
かつOSCCONレジスタ内のCLKLOCKビットがクリアされてアンロック状態のときには、
NOSC2:NOSC0ビットで新クロック源を指定して、OSWENビットを1にすれば新たな
クロック源に切り替わります。切替わりが完了するとOSWENビットが0となります。
ただしOSCCONレジスタは保護ロックされていますので書き込むためにはアンロック
シーケンスを実行する必要があります。
アンロックしてクロックを切り替える手順は下記となります。
(1) FCKSM1:FCKSM0でクロック切り替えが許可されており、CLKLOCKビットもクリア
されてロックが解除されているものとします。
(2) OSCCON の上位バイトのアンロック
OSCCONH に0x78 をバイト書き込み、続いてOSCCONH に0x9Aをバイト書き込むと、
OSCCONH へのバイト書き込みが1命令サイクルの間のみ許可されます。
(3) 切り替える新たな発振器をNOSC<2:0>に書き込む
書き込みには、バイト書き込み命令を使用します。
(4) OSCCON の下位バイトのアンロック
OSCCONL に0x46 をバイト書き込み、続いてOSCCONL に0x57 をバイト書き込むと、
OSCCONL へのバイト書き込みが1命令サイクルの間のみ許可されます。
(5) OSWENビットに1を書き込む
書き込みには、バイト書き込み命令を使用します。
これでクロック切り替え動作が開始され、正常にクロック切り替えが完了すると
OSWENビットが「0」になります。
実際の使用例は下記のようになります。このアンロックのタイミングは非常に厳しく
1サイクル間のみしか許可されませんので、アセンブラ命令を使って作成する必要があります。
【2速度スタートアップ】
切り替えるクロックが主発振器(クリスタル発振器)の場合には、このクロック切り替え後に
クロック スタート アップ遅延が挿入されますので、プログラム実行開始が遅れます。
この遅れが問題になる場合には、コンフィギュレーション ビットのIESOビットを1にセットして
「2速度スタートアップ機能」を有効にしておきます。
こうすると、切り替えは、まず内蔵高速発振器のFRCに短時間で切り替わり、主発振器の
発振が安定になったところで、指定された主発振器に自動的に切り替えます。
これで、切り替え後も直ぐプログラム実行を行うことが可能になります。