マイクロマウス研修 割り込みの構成


マイクロマウス研修、今週のレポート担当の江川です。

前回のレポートからだいぶ間があいてしまいましたが、現在はようやく迷路を走らせる段階まで来ています。

さて、今回はそれまで習った中で、「割り込み」がプログラミングの要となっていながら、少々分かりにくいので、これについてまとめてみたいと思います。

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の走行メインルーチンが協調して実際の走行を行っています。

Pi:Co Clasic 3の割り込み関連図


Posted in 研修