. : New eShop! - Mobilní verze - Pandatron.cz - Pandatron.sk - Diskuzní fórum - Zakázkový vývoj : .
 
AT91SAM7S - 3.díl: PIO a první příklady

AT91SAM7S - 3.díl: PIO a první příklady

Popis dostupného I/O portu včetně prvních dvou příkladů zapojení a naprogramování obvodu pro blikání s LED a čtení tlačítka.

Po úvodním seznámení se základní výbavou potřebnou k programování a práci s obvody řady AT91SAM7S s jádrem ARM7 se konečně podíváme na první dva příklady. Oba budou demonstrovat použití vstupně/výstupních (I/O) pinů i jejich základní možnosti, jako je například integrovaný fitr překmitů.

Jak bylo uvedeno v předchozích dílech, pro seznámení s obvody řady AT91SAM7S a jejich programováním bude použit vývojový kit firmy Kramara. AT91SAM7S256-KIT je jednoduchý a snadno použitelný nástroj nejen pro úplné začátky seznamující se s těmito obvody, ale i pro pozdější experimentování či ladění rutin profesionály. Z toho důvodu bude v následujících schématických příkladech zakreslen vždy přímo tento modul, místo samotného mikroprocesoru a celé řady jeho okolních součástek. Úplné schéma modulu je samozřejmě dostupné například v dokumentaci použitého vývojového kitu či ve článku Vývojový kit AT91SAM7S256 firmy Kramara a bylo by tedy minimálně zbytečné, aby každé následující schéma obsahovalo vždy stejné součástky, konektory a další prvky.

Vstupně/výstupní piny obvodů řady AT91SAM7S
Mikroprocesor AT91SAM7S256 obsahuje celkem 32 volně konfigurovatelných I/O pinů. V základní konfiguraci přitom není žádný z těchto pinů sdílen například s programovacím JTAG rozhraním či jinou periférií a všechny jsou tak volně k dispozici.
První čtyři piny mikroprocesoru, tedy PA0 až PA3 mají navíc zvýšenou zatížitelnost a jsou schopny dodat proud až 16mA při 3,3V. Nejčastěji jsou tedy využívány pro přímé připojení LED. Zbylé piny mají zatížitelnost 2 až 8mA, podle jejich typu.

Základní vlastnosti integrovaného PIO kontroléru:

  • možnost nastavení přerušení při změně úrovně libovolného I/O pinu
  • vstupní filtr ignorující pulsy kratší než 1 hodinového cyklu
  • snadné použití jako výstup s otevřeným kolektorem
  • individuálně konfigurovatelné interní pull-up rezistory s hodnotou 10k

Výhodou je také skutečnost, že I/O piny jsou řízeny synchronně a při zápisu hodnoty do výstupního registru jsou všechny piny zapsány v jediný okamžik. Kromě I/O režimu je jinak možné přepnout jednotlivé piny až na tři alternativní funkce, zastupující například různé komunikační linky, piny čítače atd.

Při samotném návrhu hardware je pouze potřeba dát pozor na spojení pinů PA0 až PA2 přes externí pull-up rezistory na kladný potenciál. Ten je na pinech potřeba zajistit ihned při zapnutí mikroprocesoru pro spuštění interního bootloaderu SAM-BA. Na vývojovém kitu firmy Kramara jsou samozřejmě tyto pull-up rezistory již pevně osazeny. Pokud však integrovaný bootloader nevyužijete, není toto potřeba zajišťovat a piny mohou mít po zapnutí mikroprocesoru libovolnou úroveň.


Obr. 1: Pull-up rezistory osazené na AT91SAM7S256-KIT

Registry dostupné pro práci s I/O piny jsou:


Obr. 2: Přehled PIO registrů (AT91SAM7S Series Preliminary 12/08)

Úvodní rozblikání LED, aneb jak na výstupní piny
Jak již bylo zmíněno, mikroprocesory řady AT91SAM7S mají na svých prvních čtyřech pinech zvýšenou zatížitelnost a jsou tak ideální například pro přímé připojení LED. V prvním příkladu si tedy na pin PA0 připojíme libovolnou LED a pomocí programu zajistíme její blikání.

Na následujícím obrázku je tak nejjednodušší možné zapojení vývojového KITu s jednou LED.


Obr. 3: Schéma zapojení příkladu s LED

Napájecí napětí přiváděné na piny č.43 a 44 vývojového kitu by mělo mít velikost v rozsahu 3,0 až 3,6V. To je možné zajistit například externím stabilizátorem LF33.
LED připojená na pin PA0 může být použita libovolná s vhodným předřadným rezistorem.

Ovládací program:
Program pro zajištění pravidelného blikání LED s pomocí nekonečné smyčky je následující:

#include <targets/AT91SAM7S256.h>
void delay (unsigned long time);
int main (void) {
  PIOA_PER = 0x00000001;
  PIOA_OER = 0x00000001;
  while(1) {
    PIOA_SODR = 0x00000001;
    delay(1000000);
    PIOA_CODR = 0x00000001;
    delay(1000000);
  }
  return 0;
}

void delay (unsigned long time) {
  while(time--);
}

Před samotným programováním je dobré vědět, že po zahájení běhu mikroprocesoru je nejprve potřeba namapovat všechny jeho dostupné prostředky. To však provede zdrojový kód v assembleru, který se automaticky generuje ke každému novému projektu (viz předchozí díl seriálu). Vývojáři tak hned z počátku odpadá ne zrovna jednoduchá činnost spočívající v nastudování samotného ARM7 jádra mikroprocesoru a nastavení všech jeho potřebných vlastností. Namísto toho se tak může ihned začít soustředit na samotný pracovní kód programu uvedený výše.

Ten začíná tradičně smyčkou main(void); Na jejím počátku je potřeba zápisem do registru PIOA_PER povolit pro příslušné piny mikroprocesoru I/O funkci. Následně je zápisem do registru PIOA_OER určen pin PA0 jako výstupní.

Pro názornost jsou u prvního programu všechny hodnoty zadávány v plném rozsahu, tedy 32 bit. Je tedy vidět, že všechny registry týkající se I/O pinů jsou bitově jedna k jedné s piny mikroprocesoru. Takovou specializací těchto obvodů, která je však pro tvorbu rozsáhlejších programů velice ideální, je vyhrazenost jednotlivých registrů. To znamená, že jsou dostupné registry pro zapnutí vybrané funkce, i oddělené registry dostupné pro vypnutí vybrané funkce. Při samotné práci tedy stačí do příslušných registrů zapisovat „jedničky“ a nelámat si hlavu či dokonce zatěžovat mikroprocesor s bitovou maskou a negacemi.

Za nastavením pinů následuje hlavní smyčka programu tvořená funkcí while(1). V té je následně mikroprocesor zachycen a neustále zde dokola zapíná pin (zápisem do registru PIOA_SODR nastaví na pinu log. 1) a vypíná pin (zápisem do registru PIOA_CODR nastaví na pinu log. 0), mezi čímž skáče do časovací smyčky delay(unsigned long). Tím je zajištěno snad nejjednodušší blikání s jedinou LED řízené mikroprocesorem.

Pokud by bylo potřeba zajistit podobné blikání (či jiné funkce) v přesně daných intervalech a navíc bez neustálé asistence procesoru, bylo by vhodné použít některý z integrovaných čítačů/časovačů. O těch však budeme mluvit až v některém z dalších dílů seriálu.


Obr. 4: Zapojení sestavené na kontaktním poli

Použití tlačítka, aneb jak na vstupní piny
Druhým příkladem, uvedeným v dnešním díle bude naopak čtení vstupních I/O pinů. K jedné LED zapojené z předchozího příkladu přidáme na následující (či libovolný jiný) pin tlačítko proti GND. Programem poté bude zajištěno kopírování stavu vstupního pinu s tlačítkem na výstupní pin s LED.

Schéma zapojení modulu je na následujícím obrázku.


Obr. 5: Schéma zapojení příkladu s tlačítkem

Tlačítko je připojené na pin PA1 proti zemi a nepotřebuje externí pull-up, neboť se použije interní. Interní pull-up rezistory jsou individuálně dostupné na všech I/O pinech a mají hodnotu 10k ohmů.

Ovládací program:
Ovládací program bude ve smyčce snímat hodnotu tlačítka a podle jeho stavu zapínat či vypínat LED.
Výsledný program je následující:

#include <targets/AT91SAM7S256.h>
int main (void) {
  PIOA_PER = 0x00000003;
  PIOA_OER = 0x00000001;
  PIOA_PUER = 0x00000002;
  while(1) {
    if(PIOA_PDSR & 0x00000002) {
      PIOA_SODR = 0x00000001;
    } else {
      PIOA_CODR = 0x00000001;
    }
  }
  return 0;
}

Úvod programu je totožný s prvním příkladem, jen je jako I/O pin aktivován i pin PIOA1. Dále je zápisem do registru PIOA_PUER aktivován zmíněný interní pull-up rezistor a to pro pin PA1 s připojeným tlačítkem.
Následně je ve smyčce neustále testován stav pinu PA1 s tlačítkem a podle jeho stavu je zapínán či vypínán pin PA0 s připojenou LED. Pro čtení stavu vstupních pinů je tedy použit registr PIOA_PDSR.

Tím je demonstrován opět nejjednodušší možný způsob čtení a zápisu PIOA portu v mikroprocesoru řady AT91SAM7S se zaměřením na seznámení se s registry mikroprocesoru. V případě potřeby by bylo možné program po konfiguraci I/O pinů doplnit o řádek:

PIOA_IFER = 0x00000002;

Tím by byl aktivován interní Glitch Input Filter, tvořící alespoň základní ochranu proti zákmitům vnikajících na tlačítku a jinému rušení. Jeho funkce spočívá ve filtrování pulsů kratších, než je takt hlavních hodin mikroprocesoru.


Obr. 6: Zapojení sestavené na kontaktním poli

Závěr
Tím jsme si bez dlouhého povídání představili základní práci s mikroprocesorem a vytvořili jsme si nejjednodušší možné programy pro práci s I/O piny. V následujících dílech seriálu si postupně projdeme jednotlivé periférie a představíme si jejich možnosti.

Odkazy & Download:
Domovská stránka firmy Kramara s.r.o. - http://kramara.com
ATM91SAM7S256-KIT - http://kramara.com/?q=node/16
USB JTAG Adaptér - http://kramara.com/?q=node/15
CrossWorks for ARM - http://www.rowley.co.uk/arm/index.htm
ARM pro začátečníky (BEN) - http://shop.ben.cz/cz/121300-arm-pro-zacatecniky.aspx

Úvodní rozblikání LED, aneb jak na výstupní piny - DOWNLOAD
Použití tlačítka, aneb jak na vstupní piny - DOWNLOAD







GooglePlus1 FaceBook Twitter del.icio.us DiGG Google StumbleUpon Google Buzz Email RSS PDF Tisk

Komentáře (48):

Zobrazit starší 30 dnů (48)...

host
48. Dne 10. 02. 2011 v 15:03 zaslal host
Petr
Dobrý den, chtěl bych se zeptat, zda jste to někdo nezkoušel rozchodit na Eclipse a Yagartu ? Petr


Název příspěvku: Vaše jméno: host
                 
  Zakázat formátování [Zakáže kódování a nahrazování smajlíky.]
Připojit soubory
reklama:
USB I/O modul s MCP2200
Malý modul USB I/O a UART s obvodem Microchip MCP2200
Skladem od 243 Kč

Informace uvedené v článcích jsou platné v době jejich vydání a samotné články jsou určeny pouze jako zdroj informací. Autor článku ani správce webu nenesou žádnou zodpovědnost za případné újmy na majetku a zdraví. Názvy společností a výrobků, loga a další multimediální materiál mohou být ochrannými známkami příslušných společností.
RSS kanály: | |
+420 723 846 377
info@pandatron.cz
Všechna práva vyhrazena | mobilní verze | © Copyright 2000 - 2016 ISSN 1803-6007