MSP430F5xx の RTCバグ
MSP430F5xxx(REV L)には、RTCに設定できないというとても迷惑なバグ(RTC3 Errata)があります。
ErrataのPDFを見るとサンプルプログラムの中にRTC_Workaround.zipというファイルがあるからそれを使えとなっています。
中にはアセンブラで書かれたRTC操作ファンクションがあり「編集禁止」と書かれています。これを C から使おうとしたらハマりました。
- 割り込み禁止中でも構わず割り込みを許可する。
- LARGE CODE MODELでは動作せず、呼び出すとスタックを破壊しプログラムが暴走する。
LARGE MODELにはいつ切り替わるのかよく分かりませんが、とにかくRTC設定ファンクションを呼び出すと変数が破壊されておかしいし、禁止中の割り込みが呼ばれて大変な目に合うし……と散々でした。*1
ついでにC++からも利用できないので、その辺修正したライブラリを置いておきます。
- rtc_func.lzh
- LARGE CODE MODELに対応した。
- C++から利用可能にした。
- SetXXXXX() を呼び出すと「常に割り込みが禁止(GIE=0)されて戻ってくる」ので受側で適当に処理してください。