Coronにタイマー割り込みを追加する(その1)
ちょこっとCoron:ねずー製作記
Coronにユーザーが利用できるタイマー割り込みがあると便利です。
ねずーの場合だと、ジャイロコンパスの更新やビヘィビアの実行時間の管理などは、定期的にタイマー割り込みで起動するのが定石です。これをCoronで実現しましょう。
Coronには、ユーザーがタイマー割り込みを使えるようなサンプルコードがありません。と、いうことは自分で作るしかありませんね。
Coronではモーターやサーボなどの制御にタイマー割り込みを使っているようです。srcフォルダにmain.cと一緒に入っているstm32f10x_it.cに各種インタラプトのハンドラが収まっています。これを見るとTimer1が空いているようです。これを使いましょうか。モーター制御などの関数を調べてタイマー割り込みの設定をしてみましょう‥
うーん、これは無理です。STM32のマニュアルをしっかり読み込まないと理解不能ですねえ。「ちょこっと」と言う訳には行かないようです。
そこで!他の割り込みに「便乗」することにします。つまり、定期的に割り込んでいるハンドラの中に自前の割り込みサービスを文字通り「割り込ませ」てしまおうと言う訳です。
白羽の矢をたてられた不運な関数はHandler_SysTick()です。ソースコードを読むと時間待ち機能wait_timerで利用されています。wait_timerを呼ぶとカウンタに引数をセット、さらに100usごとに割り込みがかかるようにSysTickをセットし、割り込みごとにHandler_SysTick()でカウンタをカウントダウン、これが0になったらリターンという作業をしています。
また、マニュアルにはないですが、ms単位で時間待ちをするwait_timer_msecもあることがわかりました。これはwait_timerと全く同じで、割り込み周期が1msになっているものです。他にwait_timer_secとwait_timer_usecもありました。これらがマニュアルに無いのは、wait_timerでカバーできるからだと思います。
これは私にとってはラッキーでした。割り込み周期の切り替え方法がわかったからです。
次回は便乗プログラムの製作をしたいと思います。
« ねずーの近況報告 | トップページ | Coronにタイマー割り込みを追加する(その2) »
「ちょこっとCoron」カテゴリの記事
- SoftModem用インターフェイスのまとめ(2010.10.05)
- iRover走行テスト!ジャイロはやっぱり振動に弱い(2010.07.29)
- iRoverにもCoron搭載(2010.07.27)
コメント