タイマー

今回はタイマーについて。

DSP/BIOSのチック

TIのDSP/BIOSはチックを持っていてます。低分解能かつ応答が遅くて構わない場合、チックに基づくソフトタイマーを使っていました。ただチックは常に動いて定期的に割り込みを発生させるので、消費電力を増大させる嫌われ者です。チック用のタイマー自体の消費電力は少ないけれど、タイマーが発生する割り込みに反応するためにDSP CPUを含む巨大な電力ドメイン全体が起床し、メモリもアクティブにしなくてはならないから電力を大量に消費します。

対策として、

  • まずは分解能を犠牲にしてチック間隔を大きくすることで消費電力を低減する。
  • さらに、デフォルトでチックを止めておき、必要な時にだけチックを再開するようにする。
  • さらにさらに、割り込み回数を必要最小限に抑制するようにする。

例えば、本来5ミリ秒間隔のチックで6チック分の時間が必要な場合、5ミリ秒毎に6回割り込みを発生させるのでなく、30ミリ秒後に一回だけ割り込みを発生させてそこで6回のチックを発生させるようにする。ソフトタイマーのエントリーが複数同時にアクティブになる時などもきちんとサポートする。

きちんと調べてないけれど、Linux 2.6のDynamic Tick Timerと同じものを作ったのかも知れない。

汎用タイマー

チックでは分解能と応答遅延が間に合わない場合、チックとは別の汎用タイマーを使います。たいていは、クロックソース、分周率、モード、カウンタなどを設定するだけで使えるようになります。TI社製統合チップのGPTimerでは、割り込み後の挙動の制御しやすさを理由に、コンペアモードをよく使いました。

他に処理時間の計測や、タイミング設計通りに実装できているかの確認にもタイマーを使います。非常に重宝します。