Friday, January 22, 2016

NCD85 3. MUART 8256

Z doby pozdného socíku si ešte pamätám, ako som študoval z časákov vnútornú štruktúru 8255 a 8253. Poznal som aj 8251 aj keď už menej podrobne. Sériový port bol v dobe kazeťákov a televízii ako jediných dostupných periférií dosť nepraktický. A podrobnosti o 8259 som si už nevedel nijako vybaviť, len som vedel že slúžila ako radič prerušení. No a tak sa logicky dostávame ku 8256 :-) :-). Skrátka zopár ich mám, a urobil som im miesto na NCD, pretože je to zaujímavý obvod a chcem ho preskúmať. On totiž má z každého zo spomenutých obvodov niečo. Dva 8-bitové IO porty s handshaking, ako má 8255. Päť 8-bitových časovačov, prípadne po zlúčení štyroch z nich do dvoch dvojíc, jeden osembitový a dva 16-bitové. Sériový port. A radič prerušení, ktorý môže pracovať v "normálnom" prípadne "nested" režime. Zatial som vyskúšal UART a PIO.

Brány sú dve P1 a P2. P1 je pin konfigurovateľná, každý pin môže byť nastavený na vstup alebo výstup. P2 je nibble konfigurovateľná, každá štvorica bitov môže byť nastavená ako vstup alebo výstup. P1 môže mať aj alternatívne využitie, ako riadiace signály pre handshaking spolu s portom 2, externé prerušenie, vstupy do counterov atď.

Sériový port má rovnakú štruktúru ako v UART8251. Je double buffered. Má v status registri príznaky Transmit Buffer Empty, Receive Buffer Full prípadne sa dajú využiť aj ďalšie ako Overrun Error a Parity Error. Riadenie toku dát je preto úplne jednoduché. NCB má teda na doske NCD už štvrtý sériový port, a je to druhý sériový port s prerušením. Na dosiahnutie presných normalizovaných prenosových rýchlostí je potrebné aby MUART mal hodiny 1.024, 2.048, 3.072 alebo 5.12MHz. Preto som prešiel na NCB85v2 z hodín 8MHz (kryštál 16MHz) na nižšiu rýchlosť 5.12MHz. Pre jednu z normalizovaných frekvencií je potrebné príslušne nastaviť bity v command registri 2. Dalo by sa aj pretaktovávať, kryštál 12.288MHz mám v šuflíku, niekedy možno vyskúšam. Potom by boli baud rates (s konštantou pre 3.072MHz) dvojnásobné. Existujú aj kryštály s 15.36 a 16.384MHz :-)

Timre majú voliteľný takt 1/16ms alebo 1ms, čo pri 16-bitoch dáva možnosť generovania/merania 65,536 sekundy.. Reload signál timerov prípadne vstupy do counterov sú na pinoch portu P1. Na dosiahnutie presných časových konštánt 1/16 alebo 1ms je tiež potrebné aby MUART mal hodiny 1.024, 2.048, 3.072 alebo 5.12MHz. Pri zlúčení do 16-bitových timerov T24 a T35, predstavujú registre 2 a 3 nižší byte a registre 4 a 5 vyšší byte.

Stará dobrá 8080 poznala 8 prerušení. RST0 až RST7. Rutiny prerušení majú pevnú adresu N x 8. Podľa čísla prerušenia. Malo to len jednu chybu. 8080 v skutočnosti prerušovať nevedela a preto som na PMD85 mohol o prerušeniach iba snívať. Na prerušenia bol potrebný radič 8259 ktorý na zbernicu vygeneroval patričnú inštrukkciu. A ten v PMD a podobných nebol. Tesla nevyrábala. Zo západu sa nedovážal. Potom prišla zázračná 8085 a tá už mala 5 prerušovacích vstupov. INT ako 8080 a štyri nové. RST5.5, 6.5 ,7.5 a TRAP. Pre nové prerušenia si vedela vygenerovať patričnú inštrukciu, pre staré prerušenia ostala odkázaná na radič. Nové prerušenia dostali adresy medzi pôvodnými 5,6,7.


MUART 8256 má v sebe aj radič prerušení. Prerušenia od rôznych zdrojov majú pevne danú prioritu. Priorita zároveň zodpovedá aj číslu N v generovanej RST inštrukcii.

Radič prerušení vie pracovať v dvoch režimoch: normálnom a nested. V normálnom móde je vždy rozpracované iba jedno prerušenie a ďalšie aj keď majú vyššiu prioritu musia počkať. V nested móde sa preruší aj aktuálne vykonávané prerušenie, ak príde požiadavka na prerušenie s vyššou prioritou.

Dokumentácia k 8256 je tu: MUART 8256

No comments:

Post a Comment