Sahara's WebLog

日記のような、備忘録のような、うらみつらみのような、自慢のような…。

PIC24FJ64GA002 + Generic FatFs + RTCC Alarm

先にアラームの割り込みについて書いてしまったが、そもそものアラームの仕組みについて覚書きしておく。
データシートの表現を目覚まし時計になぞらえると、アラームをセットすることはEnable、アラームが鳴ることはOccurと書かれている。
何だかどういう日本語が適当なのか分からないが、「起動」と「発生」と書くことにする。

私には、どちらかと言うとこのアラームの仕組みの方が若干理解しにくかったのだが、そうは言っても、一度飲み込めてしまえば要点は以下の3つだけだ。

Alarm Value Registerに書かれている時刻と実際の時刻を比較して、両者が同じならAlarmが発生する。
比較する際に、余分な部分はマスクしておいて、必要な部分だけを比較する。
このマスクの仕方によって、時間間隔が決まる。

例えば、2015/11/09 00:37:25 からスタートして10分間隔でアラームを発生させたいとする。
1回目は2015/11/09 00:47:25、その次は2015/11/09 00:57:25にアラームが鳴ればいい。
ずっと進んで、一時間半後の2015/11/09 02:17:25、2日後の2015/11/11 00:37:25にもアラームが鳴る。
アラームが発生する時刻に共通なのは最後の7:25の部分で、それならこの7:25の部分だけを比較すればいいことになる。
そうすれば、10分に1度だけこの部分が同じになるので、必然的に10分間隔でアラームが発生することになる。
pic24fj64gb002_rtcc_alarm_interrupt_3
この要領で、隠す部分を変更することで、時間間隔を決めることが出来る。
ちなみに、比較するためのAlarm Value Registerには####/##/## ##:#7:25を書いておけばいいことになり、#の部分は何でもいい。
データと一緒に時刻が並んだところを想像すると、00:10:00、00:20:00、00:30:00となっている方が見栄えがいい。
それなら、もともとAlarm Value Registerの初期値は0のようなのでAlarm Value Registerにはいっさい触らなくてもいい。

せっかく区別をつけようと始めに断ったのに「起動」は出てこなかったな。
アラームを起動するには ALCFGRPTbits.ALRMEN = 1; だ。

このエントリーをはてなブックマークに追加

Posted under: PIC24FJ64GA002, SD Card


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.