Vnitřní periferie mikrořadiče 80C196 a jejich programování
Časovače
Univerzální čítače jsou 16b. a mají funkci časovačů nebo čítačů podle nastaveného módu. Čítač TIM1 je volnoběžný, inkrementující, signál hodin je odvozený z hodin procesoru. Inkrementuje každý 8 stav a stav chápeme jako např. interval 167 ns při fosc = 12 MHz. Čítač TIM2 čítá „nahoru/dolu“ události – obě hrany vstupního signálu – a signál přivedeme z bitu brány P2 nebo ze vstupu HSI. Může být modifikován např. čtením / zápisem stavu nebo resetován HW / SW / jednotkou HSO. Vyvolává přerušení po překročení stavu v obou směrech při změně FFFFh / 0000h a 7FFFh / 8000h.
Hlídací čítač Watchdog je také 16b. a inkrementuje s frekvencí hodin mikrořadiče 80C196 (např. 12 MHz). WDT musí být včas programem vynulován, jinak přeteče a vyvolá Reset systému. Jeho úkolem je vyvést 80C196 z možných chybových stavů, do kterých se dostal vlivem poruch. Po nastartování ho lze vypnout jen Resetem mikrořadiče, nulování se provádí programově.
Převodníky
Mikrořadič má integrovaný A/D převodník s postupnou aproximací a šířkou výstupních dat 10b. Je schopen zpracovat až 8 vstupních analogových signálů přivedených na P0, signály se multiplexují a pak zachycují ve vzorkovači S&H. Perioda rychlosti převodu je 15μs.
D/A převod se provádí pomocí výstupu pulzně – šířkového modulátoru. Modulace je založena na komparaci obsahu registru převáděného digitálního čísla s obsahem 8b. nezávislého čítače. Pokud dojde ke shodě registru a čítače, je ukončeno generování aktivní hodnoty na výstupu. Kvantování doby trvání výstupní hodnoty je 255 úrovní, cyklus převodu je asi 12 kHz při 12 MHz hodin.. Analogový signál se získá mimo mikrořadič na samostatném integrátoru s OZ.
HSO a HSI
High Speed Output – jednotka rychlých výstupů může generovat požadované události v určených okamžicích, které zjišťují čítače TIM1 a TIM2 (čítají buď vnitřní hodiny nebo vnější události). Úkolem programátora činností HSO je určit „co dělat“ a „kdy to dělat“. Do asociativní paměti CAM je vloženo až 8 specifikací požadovaných událostí, kdy jedna specifikace obsahuje 16b. předvolbu a 8b. určení události (tedy celkem 23b. ve slově). Podstatou činnosti je neustálé prohledávání obsahu paměti CAM a porovnávání s obsahy čítačů TIM1 a TIM2. V případě shody se bere na pomoc 8b. informace, která určí, jaký typ události má nastat a zda je čítač relevantní. Jednotka HSO zná 16 možných generovaných událostí – 8 vnějších a 8 vnitřních. Externí události mohou nastat na 6 vývodech HSO 0 až HSO 5, souvisí i s vektorem přerušení INT03. Interní události představují nastavení 4 SW časovačů nebo resetování čítače TIM2 nebo start A/D převodu (SW časovač souvisí s vektorem přerušení INT05).
High Speed Input – jednotka rychlých vstupů zachycuje hodnotu v čítači TIM1, když nastane událost na 1 ze 4 vstupních přívodů HSI 0 až HSI 3. Jako událost se považuje vzestupná hrana nebo sestupná hrana nebo libovolná hrana či každá 8 vzestupná hrana. Jestliže událost nastane, ukazují čítač TIM1 a 4 stavové bity, kde a jaká událost nastala. Stav TIM1 –16b. – a 4 stavové bity klíče se uloží jako 20b. informace do fronty FIFO o hloubce 7 záznamů. Kód událostí, který je připravený k odebrání z FIFO, je umístěný do registru holdingu (prakticky je fronta o hloubce 8). HSI může generovat žádost o přerušení takto:
1) při každém přesunu do registru holdingu
2) když fronta FIFO je zaplněna 4 událostmi (3 zápisy jsou volné)
3) když fronta FIFO obsahuje nejméně 6 událostí.
Je nutné sledovat přeplňování FIFO z důvodu ztráty informací a vyvolávat přerušení. Testování HSI lze provádět také metodou dotazovací (pooling)
V2.
HSO
Účel HSO:
Velice zjednodušeně lze říci, že HSO (High Speed Output) je samostatný specializovaný mikropočítač (v mikropočítači) a určuje co, kdy a kde se stane.
Spuštění činnosti HSO se provede na základě porovnání stavu jednoho z čítačů (T1 nebo T2 – dle volby v HSO_COMMAND) s nastavenými časy v jednotlivých položkách paměti CAM. Ve chvíli, kdy je shodný stav jednoho z čítačů se stavem jedné z položek v paměti CAM, HSO vykoná jednu z činností (ke každému času v paměti CAM přísluší nějaká činnost určená programátorem):
na vnitřních výstupech
-nastartování převodu AD převodníku
-nulování čítače TIMER 2
-spuštění jednoho ze softwarových časovačů SW TIMER 0-3
na vnějších vstupech
-nastaví úroveň log1 nebo log0 (volí se v registru HSO_COMMAND)
Popis blokového schématu:
HSO_COMMAND, HSO_TIME:
Jsou to dva paměťové registry, pomocí nichž se jednotka HSO programuje (naplňují se položky v paměti CAM). Tyto položky se naplňují přes BUFFER.
KOMPARÁTOR:
Komparátor porovnává stav jednoho z čítačů T1 nebo T2 s časy naprogramovanými v paměti CAM. Zda bude komparátor porovnávat s T1 nebo s T2 zvolíme v 6. bitu registru HSO_COMMAND při programování. Implicitně je nastaven čítač T1.
ŘÍZENÍ CAM:
Řízení CAM řekne paměti, aby z následující položky vyslala čas (HSO_TIME) do KOMPARÁTORU a příkaz (HSO_COMMAND) do DEKODERU PŘÍKAZŮ. Pokud komparátor zjistí, že vyslaný čas je shodný s časem timeru (T1 nebo T2), oznámí to ŘÍZENÍ CAM a to následně vyšle signál do DEKODERU PŘÍKAZŮ, aby příkaz (který právě obsahuje – vyslaný HSO_COMMAND) zpracoval. Tento děj probíhá jednou za každý jeden takt hodin (tzn. 8x za jeden takt čítače T1 vždy a T2 v případě, že čítá 1/8 hodinové frekvence => nemá nastavené rychlé čítání nebo není ovládán vnějším vstupem).
DEKODÉR PŘÍKAZŮ:
Na základě impulsu od řízení CAM dekóduje HSO_COMMAND a na základě jeho obsahu vykoná požadovanou operaci.
PAMĚŤ CAM (Content Adresable Memory – Obsahem Adresovatelná Paměť):
Je to asociativní paměť (když nebudeš vědět co to znamená volej 0723005037). Obsahuje 8 položek po 24 bitech. Položky se naplňují pomocí registrů HSO_COMMAND (8b) a HSO_TIME (16b). Tyto registry se do paměti CAM zapíší ve chvíli jejich naplnění.
HSO_TIME, HSO_COMMAND:
Do HSO_TIME se zadává čas vykonání příkazu, který je zadán v HSO_COMMAND.
HSO_COMMAND:
- LOCK – volba, zda se má požadavek v paměti zachovat po jeho vykonání.
- INT – jestli se má vyvolat přerušení
- IOC2
- T2 – porovnání s T2 místo T1
- SET – nastavení ext. Výstupu na 0/1
- CMD 0-3 – co má příkaz vykonat
PROGRAMOVÁNÍ:
IOC2:
CLCAM – vynulování paměti v HSO
ECAML – povolení
HSI:
-schéma viz soubor v adresáři
-High Speed Input (Jednotka rychlých vstupů)
stalo…HSI
-co, kde, kdy se
má stát…HSO
-HSI i HSO jsou vlastně další počítače v počítači
-HSI má vstup, kterým můžu něco hlídat – nějakou změnu z log0 na log1
-jakmile se stala nějaká tato změna, tak :
-všechny události se zapisují do vnitřní paměti typu FIFO :
-vím CO se stalo – v HSI_MODE naprogramuji co se má sledovat (náběžná, spádová, každá,…)
-vím KDE se to stalo (jeden ze 4 vstupů)
-vím KDY se to stalo – v okamžiku změny se zapíše hodnota čítače T1 do vnitřní paměti HSI
ČÍTAČE:
WDT-WatchDogTimer:
-čítá hodinovou frekvenci od doby, kdy je aktivován, po přetečení vykoná reset
-je to ochrana proti zbloudění programu
-jedou za čas (než přeteče) se musí programově vynulovat
T1-časovač:
-čítá vnitřní hodinovou frekvenci dělenou 8mi
-je 16ti bitový, čítá nahoru a neustále
-umím ho nastavit
-přetečením umí vyvolat přerušení
T2-čítač:
-čítá zevnější impulsy z T2CLK
-umí čítat nahoru i dolu, programově lze nastavit na tzv. rychlé čítání (čítá hodinovou frekvenci 6Mhz), jinak čítá 1/8 hodinové frekvence
-ovládací signály jsou v P2 (hodiny, směr čítání, nulování, zápis do latche-okamžitou hodnotu čítače zapíše do latche)