メッセージ

2009年06月07日の記事

MSP430F5xx の RTCバグ

はてブ数 2009/06/07デバイス::MSP430

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)されて戻ってくる」ので受側で適当に処理してください。

*1 : CALLAで呼び出しているのに、アセンブラ側で RET で戻っているのが原因。CALLにはRET、CALLAにはRETA。