【RTCC モジュール】
PIC24Fファミリにはハードウェアで動作する時計が内蔵されていて、これをリアルタイム
クロック カレンダ(RTCC)と呼んでいます。
外部に32.768kHzのクリスタル発振子を接続して1秒パルスを生成し、これで年月日、時分秒
を自動的にカウントします。
カウントは20000年から2099年までの100年分でうるう年の補正も自動的に行います。
【RTCCモジュールの構成】
このRTCCの内部構成は下図のようになっています。
まず副クロック発振回路で生成された32.768kHzのクロックがRTCCに供給されます。
これから0.5Hzのカウントパルスが生成され、これでRTCCタイマ全体がカウント動作します。
RTCCタイマの内部は図の右側にあるようなレジスタ構成で年月日曜、時分秒をカウントし
ますが、すべてBCD形式のカウンタとなっています。
RTCCタイマの値は、常時比較レジスタに設定されたアラーム時刻と比較されており、
一致するとアラームイベントが生成され、このイベントで外部に信号を出力したり割り込みを
発生させることができます。
このアラーム信号の出力の仕方も、アラーム時計のように何回か繰り返し出力できるように
設定することができます。
これらの制御や設定はすべて内部レジスタで行いますが、時刻設定や、アラーム設定の際の
内部カウンタレジスタはたくさんのレジスタになるため、個別にSFRとするとSFRのアドレス不足
となるので、ポインタで指定してアクセスするようにしてメモリにマップされるSFRの個数を減らし
ています。したがって、設定や読み出しの際の間接アクセスの内部カウンタレジスタには直接
アクセスはできません。
【関連SFR】
このRTCCの動作設定に使用する制御レジスタには、通常動作設定用とアラーム設定用に
分けられます。 通常動作設定には、下記の2つのレジスタを使用します。
・RCFGCAL : 動作モード設定と遅れ進み補正設定
・PADCFG1 : RTCC出力ピンの設定
アラーム設定には、下記のレジスタを使います
・ALCFGRPT : アラーム設定とアラームマスク設定
基本となる通常動作設定用レジスタであるRCFGCALの詳細は、下図のようになっています。
このRCFGCALレジスタは電源オンリセット以外のリセットでは初期化されませんので、リセット
しても時刻カウントをそのまま継続します。
(1) RTCENビット
これを「1」にするとRTCCが有効になり動作開始します。ただし、このビットをセットするためには、
次のRTCWENビットが「1」になっていることが必要です。
(2) RTCWENビット
内部カウントレジスタに時刻設定をするためには、このビットが「1」にセットされている必要が
ありますが、このビットを「1」にするためには、つぎのようなアンロック シーケンスを実行する
必要があります。これは、プログラムで不用意にRTCCの時刻設定を変更したり停止させてしまう
ことが無いようにするために保護するためです。「1」から「0」にするのはいつでもできます。
(3) RTCSYNCビット
RTCCから現在時刻を読み出す場合、読み出している最中に時刻がカウントアップしてしまう
ことがありえます。この場合読み取った内容は間違ったものとなります。これを避けるには、
2回読み取って同じかどうかで判定する方法もありますが、このRTCSYNCビットを「0」にセット
しておけば、読み取り中のカウントアップが禁止されますので、正しく時刻が読み取れます。
(4) RTCOE
このビットを「1」にするとRTCCの出力ピンを有効化します。この場合PADSFG1レジスタの
RTSECSELビットにより、アラームパルスを出力するか、秒パルスを出力するかを選択すること
ができます。
(5) RTCPTR1:RTCPTR0
RTCCの内部カウンタレジスタの読み書きに使用するレジスタのポインタで、最初「11」を設定
すると、読み書きの都度、「00」になるまでデクリメントされます。
内部カウンタレジスタはBCD2桁でカウントされるようになっています。
実際に使う場合には、RTCPTRのポインタ値が自動的にデクリメントしますから、下記のように
最初にポインタに「11」をセットし、そのあとRTCVALレジスタを読み書きするだけで順番に
読み書きできます。
(6) CAL7:CAL0 時刻遅れ進み補正
時刻が実時間より進んだり、遅れたりする場合の補正用のレジスタで、ここに設定した値で
補正することができます。
CAL7が「0」の場合が進み補正の場合で、CAL7が「1」の場合は遅れ補正用となります。
【副クロックの有効化】
RTCCを実際に動くようにするには、RTCCの設定だけでなく、副クロックの発振動作を
有効化する必要があります。
この有効化にはOSCCONレジスタの設定が必要ですが、このOSCCONレジスタの
書き込みにはアンロックシーケンスが必要で、下記のような手順で行う必要があります。