Přeskočit na hlavní obsah

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:

Hodnota 0x0055 v 16bit registru
1514131211109876543210
0x0055
0000000001010101

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č:

bitnázevvýznam
0ENABLEzapne časovač
1RESETvynuluje počítadlo
2INTERRUPTpovolí přerušení
3FASTrychlejší režim
4STATUSpříznak stavu, jen pro čtení
5PWMpovolí PWM výstup
6INVERTotočí logiku výstupu
7READYpříznak připravenosti
8-15RESERVEDnepouží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:

Maska pro bit 5
1514131211109876543210
bit 5
0000000000100000

Když ho zapneme, vznikne:

Zapnutí bitu bez změny ostatních bitů
1514131211109876543210
před 0x0055
0000000001010101
maska 0x0020
0000000000100000
po 0x0075
0000000001110101

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 se nepočítá podle políčka v tabulce

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ů.