Odskúšané, famózné, úžasné, ono to fakt funguje. 8256 dokáže spracovávať INTA signál a v správnom okamihu poslať na zbernicu patričnú RST inštrukciu. Paráda. Na skúšku som spustil 16-bitový timer T24, nastavil mu 1ms takt, 5000 ako začiatočnú hodnotu a bum. Po 5s sa vyvolalo prerušenie RST 6, blikla INTA LEDka a spustila rutina na obsluhu prerušenia. V nej je potrebné znova nastaviť timeout a v mask registri zase povoliť prerušenie od T24. To preto lebo prerušenia od timerov v 8256 sú iba jednorázové, hneď sa vypne príslušný bit v mask registri, aby nedochádzalo k opakovanému spúšťaniu. Ďalšia podivná vec je, že timer dopočíta do nuly a potom pretečie a ide od FFFF .. preto treba nastaviť aj novú začiatočnú hodnotu timeoutu.
Krásne to bliká, pretože na kratulinký signál INTA je pripojená "predlžovačka" impulzov 74123. Takže v takte 5s na mňa pomrkáva LEDka. Vyskúšal som aj prerušenie od sériového portu. Podľa očakávania, pri príjme znaku sa vyvolá príslušná rutina RST 4 a samozrejme blikne INTA LEDka.
Updatol som fotky v blogu o NCD85 1. Floppy radič, teraz sú už s takmer plne osadeným NCD85.
Pri ladení a testovaní prerušení som objavil chybu popisky na NCD. Popiska pri JUM4 je naopak, v polohe RST7.5 je v skutočnosti INT a naopak. Doplnil som to aj v blogu o NCD. Uvedomil som si ešte jeden zádrhel s konfliktným pripojením INTA signálu do PCF8584.
PCF8584 totižto tiež vie prerušovať a generovať RST inštrukciu. Zatiaľ to ani najmenej nevadí, pretože PCF používam ako I2C bus mastera a v polling režime. Ale ak by som niekedy chcel aby PCF8584 fungovalo aj ako slave (zatiaľ nechcem, napadá ma iba jedno jediné praktické využitie), tak by bolo vhodné aby pri oslovení iným masterom vyvolalo prerušenie CPU. Ak by niekto mal iba PCF8584 bez osadenej 8256, tak nie je žiadny problém. Jumper JUM3 sa nastaví na PCF (popiska INT). PCF pošle žiadosť o prerušenie a pri signále INTA vygeneruje RST 0 a všetko funguje ako má.
Ale pri osadení obidvoch obvodov PCF8584 aj 8256, sa musí kaskádovať prerušenie z PCF do vstupu EXTINT na 8256. Jumper JUM3 sa prehodí na polohu 8256. Vtedy je signál INT z PCF vedený do EXTINT vstupu 8256. Následne 8256 vygeneruje signál INT ktorý je pripojený na vstup CPU. A pri prijatí prerušenia na CPU by chceli obidvaja reagovať na signál INTA. A to by bol konflikt. Pri signále INTA som na jumper nemyslel. Tak sa asi bude musieť preškriabnuť INTA do PCFka .. a v software sa pollne interrupt register 8256, aby sa detektlo že ide o externý interrupt z PCFka. Vstup INTA na PCF mal ísť na jumper a mal sa dať voliť medzi VCC a signálom INTA z CPU.
Showing posts with label 8256. Show all posts
Showing posts with label 8256. Show all posts
Monday, January 25, 2016
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
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
Subscribe to:
Posts (Atom)