2018年9月16日日曜日

SH7125の割り込み優先度について



夏休みが終わって虚無感に襲われてる中の人です。
私事ではございますが、東日本大会をなぜか完走したため晴れてクラシックマウサーになってしまいました。よく完走したな

東日本が終了しインターンシップの関係で1週間気絶した後、かねてより懸案だったマウス君の速度があってない問題の解決を図ったのでその時のメモ。


1.どんな問題だったか
私のマウス君はステッピングモータを使用しているのですが、指定したモータ速ではない、より低い速度(100mm/sぐらい低い)で速度が上がらなくなる症状が発生していました。目標速設定周り、パルス周波数導出式にはバグはないようだったので何か別の部分に原因がありそうでした。

2.原因(と思しきもの)
速度導出系・速度代入系に異常がなかったので、割り込み周りの設定を確認しました。
まずはCMTやMTU2の割り込み内部で処理落ちしていないかどうかを確認しましたが、問題はなさそうでした。
そこでCMTやMTU2の設定を見直すことにしました。そしてMTU2の割り込み優先度をCMTのそれより上げた結果、目標回転速に達することが判明しました。

SH7125の場合、割り込み優先度の処理は以下の手順を踏んでいるようです。

・事前に設定された割り込み優先度に応じて処理を始める(割り込み優先度の設定レジスタは分かれているが、すべての割り込みの優先度を一括で決めている)
 ↓
・設定された割り込み優先度が同じとき、元々の優先度(データシート参照)に応じて割り込み処理を行う

また、割り込み実行時に別の優先度が低い割り込みが入ろうとしたときの挙動は調査中ですが、今回の問題から恐らく、あとから来た割り込みは破棄されるか待ちぼうけを食わされるようです。

つまりCMTの割り込みが走っている状態で優先度が低いMTU2が割り込もうとして失敗したため、MTU側の出力パルスの周期が長くなり、結果としてモータが遅く回ることになったと考えられます。

マイコン難しすぎ...にゃーん


©2018 shts All Right Reserved.

0 件のコメント:

コメントを投稿