timer (hardware)

Hardwarový timer je periferie v mikrokontroléru, která odlehčuje CPU od časově kritických a repetitivních úloh (jako je generování PWM signálu, měření časových intervalů atd.).

Základní registry

Timer se skládá z několika klíčových registrů:

  • Counter register — počítadlo, které se inkrementuje/dekrementuje s každým tiknutím
  • Prescaler register — dělí vstupní clock. Pokud timer dostává 84 MHz a prescaler je 84, counter se inkrementuje s frekvencí 1 MHz
  • Autoreload register — definuje periodu counteru. Když counter dosáhne této hodnoty, resetuje se na 0 a začne znovu
  • Capture/Compare register (CCR) — používá se pro porovnání s counterem, klíčový pro PWM generování

Kanály

Timer může mít více nezávislých kanálů (typicky 4). Každý kanál má vlastní CCR, takže může generovat nezávislý výstup. Kanály sdílejí prescaler, autoreload a counter (tedy frekvenci), ale duty cycle je pro každý kanál nezávislý.

Režimy

  • Output — timer generuje signál ven na pin (např. PWM)
  • Input Capture — timer měří příchozí signál (např. délku pulzu)

Frekvence timeru

Vstupní clock timeru závisí na tom, na jaké sběrnici timer sedí (např. APB1, APB2). Timer clock se pak dělí prescalerem a autoreload hodnotou.

Vzorce

Timer clock (frekvence tikání counteru): \(f_{timer} = \frac{f_{vstup}}{prescaler + 1}\)

Prescaler se přičítá 1, protože hodnota 0 = dělení jedničkou (žádné dělení).

Frekvence periody (jak často counter přeteče / jak často se celý cyklus opakuje): \(f_{perioda} = \frac{f_{timer}}{ARR + 1} = \frac{f_{vstup}}{(prescaler + 1) \times (ARR + 1)}\)

ARR (Autoreload) se taky přičítá 1, protože counter počítá od 0 — tedy ARR = 255 znamená 256 kroků (0–255).

Příklad

  • Vstupní clock = 84 MHz
  • Prescaler = 9 → $f_{timer}$ = 84 MHz / 10 = 8.4 MHz
  • ARR = 255 → $f_{perioda}$ = 8.4 MHz / 256 = 32 812 Hz

To znamená, že jedna celá perioda (např. PWM cyklus) trvá přibližně 30 µs.

Důležité

V PWM módu timer negeneruje interrupt (pokud ho explicitně nepovolíš). Hardware sám přepíná pin HIGH/LOW podle CCR registru — CPU se o to nestará. To je celý smysl offloadingu na timer.

Mapování na piny

Výstupy timeru jsou propojené s konkrétními GPIO piny přes alternate function. Toto mapování je nadrátované v křemíku a najdeš ho v datasheetu čipu.