組み込みシステムにおけるタイマー
組み込みシステムでは、timer はクロックサイクルをカウントする特別なハードウェア周辺機能です。これにより、時間を測定したり、遅延後に何かをトリガーしたりできます。CPU時間を浪費する単純なループとは異なり、タイマーはハードウェア上でカウントを続けるため、CPUはほかの処理を行ったり、スリープ状態に入ったりできます。
タイマーは次のような用途に使用できます。
- LEDを一定間隔で点滅させる
- 操作にどれくらい時間がかかるかを測定する
- 周期的なタスクをトリガーする
- 正確な遅延を生成する
- モーターやLEDのPWM信号を制御する
タイマーは、どのマイクロコントローラーでも最も便利な周辺機能の1つです。ほとんどのマイクロコントローラーには、TIMER0、TIMER1 などの複数のハードウェアタイマーがあります。それぞれは独立して動作します。
nRF52833のタイマー
nRF52833マイクロコントローラーには、カウンターモードを備えた5つの32ビットタイマーが含まれています。現時点では、タイマーの内部動作についてこれ以上深くは扱いません。
LEDをオンにしてからオフにするまでの間に遅延を入れて、点滅効果を作るためにタイマーを使用します。
コードを変更する
それでは、タイマー周辺機能を初期化するために src/main.rs ファイルを更新しましょう。
まず、必要なimportを追加します。
#![allow(unused)] fn main() { use nrf52833_hal::timer::Timer; }
次に、main関数の中に以下の行を追加します。
#![allow(unused)] fn main() { let mut timer0 = Timer::new(peripherals.TIMER0); }
この行は、HALのTimer抽象化を使ってハードウェアタイマーTIMER0を初期化します。後で、このインスタンスを使ってLEDのオンとオフの間に遅延を作成します。