Registry
Registry jsou nejnižší běžná vrstva, se kterou programátor pracuje. Jsou to malá místa v paměti, která nejsou obyčejná RAM. Když do nich zapíšete hodnotu, měníte nastavení hardwaru.
Například jeden bit může určit, jestli je pin vstup nebo výstup. Jiný bit může spustit časovač. Další bit může říct, že se dokončilo měření na ADC nebo že má vzniknout přerušení.
Jak to vypadá
Při práci přímo s registry se v C často píše něco podobného:
PORTA.DIR |= (1 << 3);
Tenhle zápis neříká "zapni LED".
Říká zhruba: "V registru DIR portu A nastav bit číslo 3."
Co to přesně znamená, se dozvíte až z manuálu k danému čipu.
Jeden registr, hodně významů
Registr si můžete představit jako řadu přepínačů. Každý přepínač je jeden bit. U 16bit registru jich je šestnáct:
V obyčejném čísle je to prostě 85.
V registru to ale nemusí znamenat jedno číslo.
Může to být šestnáct samostatných nastavení vedle sebe.
Příklad vymyšleného registru pro časovač:
| bit | název | význam |
|---|---|---|
| 0 | ENABLE | zapne časovač |
| 1 | RESET | vynuluje počítadlo |
| 2 | INTERRUPT | povolí přerušení |
| 3 | FAST | rychlejší režim |
| 4 | STATUS | příznak stavu, jen pro čtení |
| 5 | PWM | povolí PWM výstup |
| 6 | INVERT | otočí logiku výstupu |
| 7 | READY | příznak připravenosti |
| 8-15 | RESERVED | nepoužívat, výrobce si je nechal pro sebe |
Teď řekněme, že v registru už je hodnota 0x0055
a my chceme povolit bit 5, tedy PWM.
Bit 5 má hodnotu 0x0020:
Když ho zapneme, vznikne:
Proto se v C používá operace OR:
REG |= (1 << 5);
Tenhle zápis říká:
"Zapni bit 5, ale ostatní bity nech tak, jak jsou."
To je důležité.
Kdybychom do registru jen napsali 0x0020,
zapnuli bychom sice bit 5,
ale zároveň bychom vynulovali všechny ostatní bity.
To by bylo jako rozsvítit jednu LED tím,
že předtím zhasnete celý dům.
Bit 5 není pátý bit zleva.
Je to bit s číslem 5, počítáno zprava od nuly.
Proto má hodnotu 2^5, tedy 32, což je hexadecimálně 0x20.
Výhody
- Máte největší kontrolu nad hardwarem.
- Program může být velmi malý a rychlý.
- Vidíte přesně, co se v čipu nastavuje.
Nevýhody
- Kód je hodně závislý na konkrétním čipu.
- Snadno se spletete v čísle bitu nebo pořadí kroků.
- Bez manuálu je to spíš luštění šifry než programování.
Přímá práce s registry je dobrá škola. I když později použijete vyšší vrstvu, pořád se hodí vědět, co se pod ní doopravdy děje. Podrobnější postup změny jednotlivých bitů je v kapitole Ovládání registrů.