UP
rtcについて
RTCはその機能の性格上システムリセットでは停止しない。普通すぐ気づくこと
かも知れないが私がはまった事例を2つ:
事例1
例えばRTC_WakeUpClockConfigはRTCが止まっている状態で実行しないと
いけないが「ま、プログラムの始めの辺りでまだRTCは起動してないから
停止の命令は必要ないだろう」と思っていると1度目のRUNはいいのだがその後
プログラムを書き直してもう1度RUNすると1度目のRUN以降RTCは
動きっぱなしなのでRTC_WakeUpClockConfigは機能しない。
また実際の使用時でも再リセット後はダメ。
なのでプログラムの最初のほうに書くときでも前にRTC_WakeUpCmd(DISABLE)が
必要。
事例2
RTCをまったく使わないプログラムを書いて実行したところRTC_WakeUp
の割り込みが発生し割り込みルーチンにトラップされてしまう
(割り込みルーチンには何も書いてないから割り込みフラグが
クリアされない)。何故?と思ったがこれはその前にRTC_WakeUp
の割り込みを使うプログラムを書いて実行したあとだったからで、
それ以来RTC周りが動きっぱなしだったのだ。プログラムを書き換えた
あと一度USBコネクタを
抜いてパワーオンリセットしておけばよかった。
参考
RM0031
リファレンスマニュアル
STM8L15x および STM8L16x マイクロコントローラファミリ
24.1 概要
,,,,
電源電圧が動作範囲内にある限り、RTC は、MCU の状態(Run モード、
低電力モード、またはリセット中)に関係なく、停止することはありません。
24.5 RTC のリセット
,,,,
逆に、RTC の現在のカレンダレジスタおよび制御レジスタ(RTC_CRx)、
プリスケーラレジスタ(RTC_SPREx および RTC_APRE)、ウェイクアップ
タイマレジスタ(RTC_WUTRx)、およびアラーム A レジスタ(RTC_ALRMASSRx
および RTC_ALRMARx)は、パワーオンリセットによってのみ、デフォルト値に
リセットされます。システムリセットではリセットされません。
さらに、RTC クロックが CLK_CRTCR クロックコントローラレジスタで有効に
されると、RTC はリセット中も動作を続行します(リセットソースが
パワーオンリセット以外の場合)。
,,,,
mm@ils.uec.ac.jp