Minimální základy

Ovládání portů na čipech Atxmega je jednoduché a komfortní. Protože už nějáké zkušenosti máte, skočíme rovnou na přehlede registrů.

Pro základní manipulaci s porty, tedy k nastavení vstupu / výstupu, zápisu a čtení hodnot by vám tyto registry měly stačit. Pro specifičtější nastavení každého bitu individuálně slouží osmice registrů PINnCTRL, kde n může být 0 až 7. V něm volíte další parametry každému pinu. Můžete zde ovládat interní pull-up a pull-down rezistor a režim výstupu. Ten může být: Dále je zde možné nastavovat "sense" pinu. To slouží pro využití v rámci externího přerušení nebo Event systému a budeme se jím zabývat později. Zbývají ještě dva bity. SRLEN - Slew rate limiting, kterému se budeme věnovat také později a INVEN, který kompletně invertuje funkci pinu (jako výstupu i jako vstupu).

"Zrychlovák" nastavení - MPCMASK

Jak již víme, každý pin lze pomocí registru PINnCTRL konfigurovat individuálně, taže nastavení třeba 16 pinů stejným způsobem je "zdlouhavé". Aby bylo možné nastavit více pinů jednoho portu zároveň, máme k dispozici registr MPCMASK. Do něj nejprve zapíšete "masku", která bude mít log.1 na těch místech, které piny budete chtít nastavovat. A potom stačí zapsat do jediného registru PINnCTRL zvolené nastavení. V tom okamžiku dojde ke stejnému nastavení všech dalších zvolených PINnCTRL registrů. Viz příklad:

PORTC.DIRCLR = PIN6_bm | PIN7_bm; // PC6 a PC7 vstup
PORTCFG.MPCMASK = PIN6_bm | PIN7_bm; // stejné nastavení pro PC6 a PC7
PORTC.PIN6CTRL = PORT_OPC_PULLUP_gc; // Pull-up pro všechny piny nastavené v MPCMASK

Remapování alternativních funkcí

Přirozeně mohou porty sloužit i různým periferiím. O tom kdy přebírá příslušná periferie (USART, časovač, atd.) kontrolu nad portem rozhoduje nastavení periferie. Piny jsou periferiím pevně rozděleny. Takže PC5 může sloužit třeba jako XCK1 (clock USARTC1) nebo jako MOSI (SPIC) a nebo dalším periferiím. Funkce jednotlivých pinů najdete v datasheetu v sekci "Alternate Pin Functions". Remapování je jedna z funkcí, která vám dává jistou volnost při volbě pinů. Můžete totiž rozmístění alternativních funkcí měnit. Změna se provádí v registru REMAP.

Clockout a Eventout

Clockout funkce vám umožňuje vyvést clock čipu na některý z výstupních pinů. Eventout analogicky umožňuje vývést některý event. Bitem CLKEVPIN volíte zda tyto funkce povedou na pin 4 nebo na pin 7. Pro Eventout i Clockout pak můžete individuálně volit na kterém portu tato funkce bude. Na výběr máte z portů PC,PD a PE, ale tento výběr je závislý na konkrétním čipu. Eventout a Clockou musíte přirozeně vyvést na jiný port ! Clockout vám pak umožňuje vyvést nejen takt jádra (CLK1X), ale také vyšší frekvence (CLK2X a CLK4X) sloužící časovačům nebo EBI modulu. Použité piny musí být přirozeně nastaveny jako výstup. V registru EVCTRL si pak můžete zvolit který z osmi Eventů povede na Eventout pin. Eventy se budeme zabývat v jiném tutoriálu.