マイクロマウス研修、今週のレポート担当の江川です。
前回のレポートからだいぶ間があいてしまいましたが、現在はようやく迷路を走らせる段階まで来ています。
さて、今回はそれまで習った中で、「割り込み」がプログラミングの要となっていながら、少々分かりにくいので、これについてまとめてみたいと思います。
Pi:Co Clasicのサンプルプログラムでは、次の5つのタイマーを使っています。
- CMT0 (コンペアマッチタイマ0) 走行制御 1ms毎の割り込みを発生
- CMT1 (コンペアマッチタイマ1) センサ制御 1/4ms毎に
- MTU0 (マルチファンクションタイマパルスユニット2 ) ブザー音
- MTU3 (マルチファンクションタイマパルスユニット3 ) ステッピングモーター 右
- MTU4 (マルチファンクションタイマパルスユニット3 ) ステッピングモーター 右
ここでブザー音用MTU0以外には割り込みが設定されており、走行に密接にかかわっています。
マイコンの直接の割り込みはIDEが用意したintprg.cに書かれた関数群に飛んできますが、さらにそこからinterrupt.cに飛んでその中に実際に処理するルーチンを書くようにしているようです。
interrupt.cには、以下のの4つの割り込みルーチンがあります。
- void int_cmt0(void) 1ms毎に呼び出され、バッテリー監視、加速処理、センサ制御など走行の細かい制御をします。
- void int_cmt1(void) 1/4ms毎に呼び出され、4つのセンサを各回1つずつ制御し、sen_l,sen_r,sen_fl,sen_frに記録します。
- void int_mot_r(void) 右モータが1ステップ進む毎に呼び出され、step_rをカウントアップします。
- void int_mot_l(void) 左モータが1ステップ進む毎に呼び出され、step_rをカウントアップします。
これらと、run.cの走行メインルーチンが協調して実際の走行を行っています。