しかしながら、PIC32MX250F128BはRTCC(Real Time Clock and Calendar)のモジュールが付いているので、MCCでこいつを有効にすれば動き始める。
最近のMCCの設定は、おしゃれで簡単にRTCCの設定が行える。
それで、このRTCCのモジュールには、キャリブレーション機能が付いていて、月差±0.66秒までRTCCの進み具合を調整できるのだ。これは使わない手はない。
しかしながら、このキャリブレーションはRTCCONレジスタのCALビットに値を格納するのだが、これが 10bitsのサイン付きインテジャーで値は+511~ー512を設定する。マイナス側は補数表記である。
この設定にハタと困った。 10bits の値についてどうやって足し引きしたらよいのか?
c言語では、charは8bits, shortは16bits, longは32bitsである。 10bitsの型なんて無い。
色々と悩んだすえ、shortの変数に6bitsシフトして入れて、足し引きしたのち、6bitsシフト戻してRTCCONbits.CAL にセットする事にした。
//*****************************************************************
// add RTCC Drift Calibration bits
//*****************************************************************
void vRTCC_CalAdd(
short value
)
{
short cal;
cal = RTCCONbits.CAL << 6;
cal = cal + (value << 6);
RTCCONbits.CAL = cal >> 6;
}
//*****************************************************************
// subtract RTCC Drift Calibration bits
//*****************************************************************
void vRTCC_CalSub(
short value
)
{
short cal;
cal = RTCCONbits.CAL << 6;
cal = cal - (value << 6);
RTCCONbits.CAL = cal >> 6;
}
20200730(+1.0h)
0 件のコメント:
コメントを投稿