Předurčení funkčních registrů vstupů a výstupů mikrořadičů AVR

Předurčení funkčních  registrů vstupů a výstupů mikrořadičů AVR

Funkčními registry rozumíme část rezervovaného paměťového prostoru SRAM, který má přímý přístup do aritmeticko-logické jednotky. Výsledky provedených operací v aritmeticko-logické jednotce jsou opětovně ukládány do oblasti funkčních registrů pamětí mikrořadičů.

Pracovní registry mikrořadičů AVR

Konstruktéři mikrořadičů AVR nešetřili počtem pracovních (osmibitových) registrů. Těch je dohromady 32 a v assembleru jsou označovány jmény R0R31. Pouze u nejmenších typů mikrořadičů ATtiny je počet pracovních registrů snížen na polovinu a jejich jména jsou R16R31 (toto poněkud netypické pojmenování je použito kvůli zpětné kompatibilitě s ostatními procesory AVR). Nezávisle na typu mikrořadiče má posledních šest pracovních registrů taktéž speciální význam: vždy dvojice těchto osmibitových registrů jsou spojeny takovým způsobem, že vzniknou tři šestnáctibitové registry, které je možné použít při adresování dat uložených v operační (datové) paměti či v paměti programu (zde mohou být například umístěny různé tabulky, a to jak naplněné daty, tak i cílovými adresami skoků). Způsob přiřazení šestice osmibitových pracovních registrů do trojice registrů šestnáctibitových je vypsán níže:

 

Obr. 1: Nepřímé adresování paměti RAM pomocí registrových párů X,Z,Y

 

Řízení vstupních a výstupních portů (I/O porty)Výstupní piny jsou u procesorů AVR organizovány po 8mi, nemusí být ale všechny vyvedeny ven z pouzdra. 8 pinů tvoří jeden výstupní port. Například procesor ATMega16  má celkem 32 výstupních pinů, které jsou organizované do čtyřech portů. Označují se Port A až Port D. Na schématu jsou jednostlivé piny portů označeny PB0 až PB7, PC0 až PC6 a PD0 až PD7. V dnešní době je na čipu drahé pouzdro, naopak vnitřní integrované součástky na čipu jsou levné. Proto mají piny na procesoru různou funkci – například pin PC6 může sloužit jako vstupní a výstupní pin nebo jako reset. Další piny umožňují použití analogově digitálního převodníku a další.

Výstupní porty pracují s log. proměnnými: log 0 – zem a log 1 – napájecí napětí. Je zde však nějaká tolerance – viz datasheet od výrobce. Procesor je schopen na výstupu dodat poměrně velký proud.

Pro ovládání vstupů a výstupů slouží 3 registry:

DDRx - za písmeno x si můžeme dosadit písmeno portu. Je to osmibitový registr kde každý bit znamená 1 ovládací pin. Např. 3. bit (počítáno zprava) registru DDRB ovládá pin PB2. Tento registr nastavuje, zda příslušné piny budou vstupní nebo výstupní. Log. 1 = příslušný pin je výstupní, log. 0 = příslušný pin je vstupní. Např. pokud do registru DDRB uložím číslo 12 (dekadicky) = 00001100 (binárně) = nastaví se piny PB2 a PB3 jako výstupní a ostatní piny jako vstupní.

PORTx - platí podobná pravidla jako u registru DDRx – 8 bitový registr ovládající příslušné vstupní/výstupní piny. Pokud je nastaven příslušný bit jako výstup a do tohoto registru na jeho místo zapíšeme logickou hodnotu 0 nebo 1, nastaví se nám tato hodnota na příslušný výstupní pin. Pokud je nastaven příslušný bit jako vstup, logickou hodnotou 1 se připojí pull-up rezistor, log. 0 se odpojí. Pull-up rezistor je rezistor zapojený mezi napájení a nějaký spínač spojený se zemí. Pokud navážu na předchozí příklad, kde DDRB = 00001100 a do programu přiřadím registru PORTB hodnotu 11111000, budou piny PB0 a PB1 vstupní bez pull-up rezistorů, piny PB2 výstupní s hodnotou log. 0, pin PB3 výstupní s hodnotou log. 1 a piny PB4 až PB7 vstupní s připojeným pull-up rezistorem.

PINx - opět platí výše zmíněná přiřazení jako u registru  DDR a PORT. Tento registr slouží pro čtení hodnoty na vstupních pinech. Tento registr má aktuální hodnotu stejnou jako hodnotu nacházející se na vstupně-výstupních pinech. Např. je-li hodnota registru PIND 01100110, je na pinech PD1, PD2, PD5 a PD6 log. jednička a na pinech PD0, PD3, PD4 a PD7 log. nula.

Stavový registr

Posledním speciálním funkčním registrem, který si  popíšeme, je stavový registr nazvaný SREG. Tento registr je umístěn v I/O oblasti a jeho jednotlivé bity je možné číst i měnit buď přímo (stejně jako obsah dalších registrů), nebo lze použít speciální instrukce typu nastav bit/resetuj bit. Speciální funkční registr SREG je osmibitový, přičemž význam jeho bitů je vysvětlen v následující tabulce (povšimněte si, že jsou k dispozici i příznakové bity vhodné pro práci s čísly se znaménkem – signed integers – což pro všechny mikrořadiče neplatí):

Tab. 1: Význam jednotlivých bitů stavového registru AVR

 

Zdroje
  • HRBÁČEK, Jiří. Komunikace mikrokontroléru s okolím. 1. vyd. Praha: BEN - technická literatura, 1999, 159 s. ISBN 80-86056-42-21.
  • MATOUŠEK, David. Práce s mikrokontroléry ATMEL AVR ATmega16. 1. vyd. Praha: BEN - technická literatura, 2006, 319 s. μC. ISBN 80-730-0174-8.
  • VÁŇA, Vladimír. Mikrokontroléry ATMEL AVR: programování v jazyce C : popis a práce ve vývojovém prostředí CodeVisionAVR C. 1. vyd. Praha: BEN - technická literatura, 2003, 215 s. ISBN 80-730-0102-0.

Obrázky a tabulky

  • Obr. 1: Tovární katalogový list (datasheet Atmega32) společnosti ATMEL Corporation [online]. [cit. 2015-01-30]. Dostupné z: www.atmel.com/products/microcontrollers/avr/default.aspx
  • Tab. 1: Tovární katalogový list (datasheet Atmega32) společnosti ATMEL Corporation [online]. [cit. 2015-01-30]. Dostupné z: www.atmel.com/products/microcontrollers/avr/default.aspx
Zamysli se
  • Jaký je význam příznaků stavového registru SREG?
Zapamatuj si
  • Pro nepřímé adresování se používají registrové páry, které se označují X,Y,Z.