O komunikačním rozhraní SPI (Serial Peripheral Interface) bylo již napsáno poměrně hodně příspěvků i na HW serveru (např. „SPI řešené se dvěma mikroprocesory AT89C2051“) . Je to velmi rozšířené jednosměrné nebo obousměrné komunikační rozhraní pro připojení celé řady periferních obvodů k mikroprocesoru (mP), které bývá ještě navíc vybaveno vodičem pro výběr periferního obvodu (CE - Chip Enable).
V praxi existuje několik variant SPI, princip přenosu dat je v podstatě stejný. Na rozdíl od paralelního přenosu dat se zde používá jen jeden vodič pro přenos dat a druhý pro potvrzení platnosti těchto dat na straně výstupu. Znamená to, že tento přenos se musí uskutečnit bit po bitu sériově. Zásadní vlastností tohoto přenosu je také skutečnost, že vysílací strana nikdy nečeká, zda přijímací strana všechna data bezchybně přijala. To musí být řešeno většinou volbou vhodného přenosového protokolu. Podrobnějším popisem rozhraní SPI se zabývat nebudeme, lze jej najít v literatuře. Jedna z možných realizací SPI rozhraní pouze programovými prostředky je uvedena v již zmíněném příspěvku „SPI řešené se dvěma mikroprocesory AT89C2051“. Navíc některé mP již mají standardní SPI vestavěno. Předložený článek ukazuje na použití SIPO obvodu, které nemá typizované SPI rozhraní, ale z hlediska potřebného časování je možné toto rozhraní pro jeho obsluhu použít.
Možnosti technického řešení - serioparalelní výstup
Sérioparalelní převodníky (SIPO - Seriál Input Paralel Output) se používají především ke zvýšení počtu výstupních bitů v mikroprocesorových systémech. Konkrétní připojení více SIPO obvodů k rozhraní SPI je možné dvěma způsoby, sériovým nebo paralelním řazením. Každé má své výhody a nevýhody, jejichž souhrn je uveden v tabulce 1.
Na obrázku 1 je uvedeno schéma zapojení pro sériové řazení. Výstup SDAT ze zdroje signálu SPI je připojen na vstup SDIN prvního obvodu, výstup sériové linky prvního obvodu SDOU je připojen na vstup sériové linky druhého obvodu a tak to pokračuje dál. Výstup posledního obvodu není nikam připojen. Vstupy hodin SCLK jsou spojeny paralelně a je na ně přiveden hodinový kmitočet SPI zdroje. Pro „výběr“ všech obvodů současně se používá jeden jediný signál CE. Programová obsluha takto řazených obvodů představuje obsluhu nx8 klopných obvodů typu D řazených za sebou. Znamená to tedy, že se všechny klopné obvody překlápí vždy buď na nástupní nebo sestupnou hranu hodinového signálu SCLK a přebírají stavy předchozích výstupů předřazených D klopných obvodů. Pro obsluhu všech n obvodů to představuje sériové vyslání nx8 bitů.
Na obrázku 2 je uvedeno schéma zapojení pro paralelní řazení SIPO obvodů k SPI rozhraní mP. Výstup SDAT ze zdroje signálu SPI, jakož i výstup hodinového kmitočtu SLCK jsou paralelně přivedeny na všechny datové vstupy SDIN, resp. hodinové vstupy SCLK SIPO obvodů. Signály „výběru“ obvodů CE jsou zde připojeny samostatně na „adresový“ port mikroprocesoru (CE1, CE2, ..., CEn). Programová obsluha v tomto případě provede výstup dat pouze 8 bitů, podle zvoleného (a vybraného) SIPO obvodu.
|
||||||||||||
Možnosti použití obvodu SIPO 74HCT595
Obvod HCT595 jako SIPO, umožňuje převádět vstupní sériová data do paralelní výstupní podoby. Tento převodník je tvořen 8-mi klopnými obvody typu „D“, zapojenými do série, přičemž vstup prvního (SDIN) a výstup posledního (SDIN) je vyveden. Dále obsahuje výstupní 8-bitovou „paměť“ a nezbytné nastavovací, resp. nulovací obvody. Pro správnou funkci je nezbytný vstup SCLK - vstup sériových hodin, jehož funkce je shodná s funkcí SCLK PSI rozhraní a zajišťuje překlopení těchto klopných obvodů. Přesun dat mezi „pracovními“ klopnými obvody typu „D“ a výstupní pamětí je prováděno signálem LATCH. Ve většině katalozích je tento signál charakterizován krátkým impulsem „H“, „L“, „H“ na konci přenesených dat do pracovních klopných obvodů. Pokud programátor napíše ovládací program, který bude přesně kopírovat požadované změny na vodičích SDATA, SCLK a LATCH, není o čem diskutovat, bude snad jen delší doba vykonávání. Pro připojení ke standardnímu SPI rozhraní, které se v současnosti stává součástí jednočipového mikroprocesoru, začíná být trošku problém, jak se signálem LATCH. Pokud by se připojil jen jeden SIPO obvod, tady by problém nebyl, v okamžiku připojení více obvodů (sériově nebo paralelně řazené) již tento problém může nastat. Na ?. je uvedeno základní připojení SIPO obvodu HCT595 k SPI ADuC812. Pokud využijeme i signálu RESET, tak musí být „invertován“ k signálu pro mikroprocesor. Tento signál nám zajistí „nulování“ výstupních klopných obvodů po zapnutí napájení. Pokud jej nechceme použít připojíme PIN SRCLR na +5V a programově zajistíme po naběhnutí napájení prvotní nastavení vnitřních klopných obvodů.
Předložený článek ukazuje na jednu z možností, jak tento problém řešit. Zaměřuje se na paralelní připojení více SIPO obvodů k mikroprocesoru ADuC812. Na obrázku 4 je uvedeno elektrické schéma zapojení pro připojení až 8-mi obvodů HCT595 na sériovou linku SPI, přičemž vhodným programovým nastavením SPI rozhraní v mP lze dosáhnout rychlosti obsluhy cca 3.5ms při použití krystalu o hodnotě "jen" 11.0592MHz.
Uvedené zapojení může, ale také nemusí využívat požadavku na přerušení. To záleží na celé koncepci konkrétní programové vybavení.
Komentovaný výpis programu bez použití přerušení
; Pripojeni 8 obvodu 595 a adresoveho dekoderu na SPI ADuC812 ;========= ADR0 BIT P0.0 ;adresa dekoderu ADR1 BIT P0.1 ;adresa dekoderu ADR2 BIT P0.2 ;adresa dekoderu CE_SP BIT P0.3 ;spolecny vyber ADRESA DATA 020H ;pametove misto s adresou vybraneho SIPO . . . nastaveni configuracniho registru . MOV SPICON,#00110000B ; |||||||+---;SPR0 - Bit rate select ; ||||||+----;SPR1 ; |||||+-----;CPHA - SCLK Phase Select ; ||||+------;CPOL - SCLK Polarity Select ; |||+-------;SPIM - Master Mode Select ; ||+--------;SPE - PSI Enable Bit ; |+---------;WCOL - Write Collosion Error Flag ; +----------;ISPI - SPI Interupt Bit; ; . . . . v registru Acc jsou vysilana data . ANL P0,#11111000B ;maska na adesove bity ORL P0,ADRESA ;nastaveni adresy vybraneho obvodu CLR CE_SP ;vyber CE SIPO obvodu MOV SPIDAT,A ;data do SPI registru NOP ;cekame dle konfigurace NOP SETB CE_SP ;konec vyberu obvodu SIPO .
Komentář k údajům konfiguračního registru SPICON
Nastavení konfiguračního registru v mP ADuC812 určuje všechny parametry SPI rozhraní. Především bity SPR0 a SPR1 určují rychlost přenosu dat na výstup SDATA a velikost periody hodinového signálu SCLK. Zde je nastaven na nejvyšší rychlost tj. 0.361ms (obvod HCT595 zvládne zpracovat hodinové impulsy o šířce periody 0.041ms). Bit CPHA určuje fázi na výstupu SCLK a bit SPOL pak polaritu těchto hodin, oba jsou nastaveny n „L“. Bit SPIM určuje režim MASTER-SLAVE SPI v mP a bit SPE povoluje případný režim pod přerušením.
Časové výsledky s takto zapojenými SIPO obvody jsou sejmuty logickým analyzátorem na ?. Z nich lze snadno odvodit čas potřebný na výstup 8-mi bitů.
Závěr
Předložený příspěvek ukazuje na skutečnost, že při použití „jen“ 4 bitů portu a vestavěné SPI získáme až 8 x 8 bitů výstupních portů. Uvedený příklad použití je určitě použitelný u jiných mP, které mají vestavěné SPI. Bude nutné jen upravit čekání po zápisu dat nebo pracovat v přerušovacím režimu.
- 74HCT595 Datasheet - HC595.pdf