LPC2388での次のお題を何にしようか考えていましたが、ここはやはり「LEDチカチカ」をおさえておこうと思います。しかしながら、雑誌記事のサンプルを動かしてもおもしろくないので、追加実装した32Kクリスタルの動作確認を兼ねてRTCからの割り込みを使ってLEDを点滅させてみました。
RTCの持つCIIR(Counter Increment Interrupt Register)機能を使うと1秒毎の割り込みは簡単に生成できますが、この割り込みでオン/オフすると点滅周期は2秒となってしまい長すぎます。そこで、CISS(Counter Increment Select Mask register)の機能を使って62.5ms間隔で割り込みを発生し、これを8つ数えることで0.5秒を作ることにしました。割り込み処理の中でLEDを直接操作してもいいわけですが、せっかくTOPPERS/JSPを動かしたので、その機能を使って処理することにします。流れは次のとおりです。
RTCはカレンダー/クロック機能を持っていますから、どうせならこいつの動作確認もしてみようということで、シリアルポートにコンソール機能を持たせて、dateコマンドを用意してみました。main_taskが上記のようにLEDを反転させるタスクで、console_taskがコンソール機能とそのコマンド処理を実行しています。
AT91SAM7にはこういうRTC機能が無いために いつも秋月で購入したRTCをI2Cでつなげていたので、このRTC機能はとても便利に感じます。
RTCの持つCIIR(Counter Increment Interrupt Register)機能を使うと1秒毎の割り込みは簡単に生成できますが、この割り込みでオン/オフすると点滅周期は2秒となってしまい長すぎます。そこで、CISS(Counter Increment Select Mask register)の機能を使って62.5ms間隔で割り込みを発生し、これを8つ数えることで0.5秒を作ることにしました。割り込み処理の中でLEDを直接操作してもいいわけですが、せっかくTOPPERS/JSPを動かしたので、その機能を使って処理することにします。流れは次のとおりです。
- RTCの割り込み処理で、62.5ms間隔の割り込み(RTSSF)を8回数えたら、iset_flgを使ってイベント・フラグをセットする。
- メインのタスクでは、wai_flgでフラグ待ちをする。
- フラグが立ったら、それをリセットするとともに、LEDを反転させる。
RTCはカレンダー/クロック機能を持っていますから、どうせならこいつの動作確認もしてみようということで、シリアルポートにコンソール機能を持たせて、dateコマンドを用意してみました。main_taskが上記のようにLEDを反転させるタスクで、console_taskがコンソール機能とそのコマンド処理を実行しています。
AT91SAM7にはこういうRTC機能が無いために いつも秋月で購入したRTCをI2Cでつなげていたので、このRTC機能はとても便利に感じます。