Z80 SIO (Z80 Serial Input/Output) je integrovaný obvod z rodiny procesoru Z80. Jedná se obvod poskytující dvě sériové brány (označované jako brána A a brána B). Protože se jedná obvod z rodiny procesoru Z80, umožňuje plně využívat možnosti přerušovacího systému procesoru Z80. Podobný obvod v rodině procesoru Intel je obvod Intel 8251.
Obvod je použit např. společně s obvody WD2797, Z80 CTC a Z80 PIO v univerzální I/O kartě EXIO k počítačům Sharp.[1] Může také být základem interface MIDI.[2]
Obvod existuje v několika provedeních, Z80 SIO/0, Z80 SIO/1 a Z80 SIO/2 jsou provedeny ve 40pinovém pouzdru DIP, Z80 SIO/3 ve 44pinovém pouzdru QFP a Z80 SIO/4 ve 44pinovém pouzdru PLCC.
Existence tří variant obvodu v pouzdru DIP je způsobena nedostatečným počtem pinů v těchto pouzdrech, tyto varianty se tak vzájemně liší tím, které signály brány B jsou vyvedeny:
Brány mohou pracovat v následujících režimech:
Obvod je možné konfigurovat pomocí osmi registrů pro zápis a stav obvodu může být čten pomocí tří registrů pro čtení.
registr | význam |
---|---|
WR0 | Základní příkazy |
WR1 | Nastavení generování přerušení a signálu Wait/Ready |
WR2 | Vektor přerušení (tento registr je přístupný pouze při konfiguraci kanálu B) |
WR3 | Řízení příjmu |
WR4 | Nastavení vlastností přenosu |
WR5 | Nastavení vysílání |
WR6 | Nastavení synchronizačního znaku, resp. adresy pro režim SDLC |
WR7 |
registr | význam |
---|---|
RR0 | Příznaky stavu příjmu a vysílání |
RR1 | |
RR2 | Vektor přerušení (tento registr je přístupný pouze při konfiguraci kanálu B) |
Kromě zápisu do registru WR0 je zápis do registrů prováděn zápisem dvou po jdoucích bajtů, kdy první bajt obsahuje číslo registru, pro který je určen následující bajt. Stejným způsobem jsou vybírány registry pro čtení. Pokud neproběhne výběr registru pro čtení, je čten registr RR0.
Registr WR0 | ||||||||
bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
reset CRC: 00 – žádný příkaz 01 – reset výpočtu CRC příchozích dat 10 – reset výpočtu CRC odchozích dat 11 – reset příznaku podtečení při vysílání |
příkaz pro provedení: 000 – žádný příkaz 001 – ukončení vysílání (pouze v režimu SDLC) 010 – reset příznaku přerušení 011 – reset kanálu 100 – povolení generování přerušení při dalším přijatém znaku 101 – reset generování přerušení při prázdném odesílacím bufferu 110 – reset příznaku chyby 111 – návrat z přerušení |
číslo registru se kterým bude prováděna následující operace zápisu nebo čtení |
Registr WR1 | ||||||||
bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
povolení signálů Wait/Ready | přepínání režimu Wait/Ready: 0 – Wait 1 – Ready |
0 – Wait/Ready funguje pro odesílání 1 – Wait/Ready funguje pro přijímání |
nastavení generování přerušení při vysílání: 00 – zakázáno 01 – pro první příchozí znak 10 – pro jakýkoliv příchozí znak, chyba parity je speciální podmínka při příjmu 11 – pro jakýkoliv příchozí znak, chyba parity není speciální podmínka při příjmu |
proměnný vektor přerušení podle události, která přerušení vyvolala (bit je přístupný pouze při konfiguraci kanálu B) | povolení generování přerušení při prázdném odchozím bufferu | povolení generování přerušení stavem vnějšího zařízení (signály /CDC, /CTS, /SYNC) nebo při vysílání CRC nebo synchronizačního znaku |
Registr WR2 | ||||||||
bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
vektor přerušení |
Registr WR3 | ||||||||
bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
počet bitů na znak při příjmu: 00 – 5 10 – 6 01 – 7 11 – 8 |
automatické spuštění odesílání a příjmu při aktivních signálech /DCD a /CTS | vstup do režimu Hunt | povolení výpočtu CRC příchozích dat | potlačení příjmu zpráv, které neobsahují adresu definovanou registrem WR6 (pro režim SDLC) | potlačení příjmu příchozího synchronizačního znaku | povolení příjmu |
Registr WR4 | ||||||||
bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
nastavení časování (TxC, RxC) vůči rychlosti přenosu dat (TxD, RxD) 00 – xC = xD x 1 01 – xC = xD x 16 10 – xC = xD x 32 11 – xC = xD x 64 |
nastavení synchronizace 00 – 8bitový synchronizační znak 01 – 16bitový synchronizační znak 10 – režim SDLC 11 – externí synchronizace |
nastavení stop bitu 00 – synchronní režim 01 – 1 stop bit 10 – 1 1/2 stop bitu 11 – 2 stop bity |
nastavení parity (0 – lichá, 1 – sudá) | zapnutí vysílání a příjmu paritního bitu |
Registr WR5 | ||||||||
bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
signál DTR | počet bitů znaku odesílaných do vysílacího bufferu 00 – 5 a méně[p 1] 01 – 6 10 – 7 11 – 8 |
signál přerušení vysílání | povolení odeslání dat | polynom výpočtu CRC: 0 – polynom CRC-16 X16 + X15 + X2 + 1 1 – 0 – polynom SDLC X16 + X12 + X5 + 1 |
signál RTS | zapnutí výpočtu CRC při odesílání |
Registr WR6 | ||||||||
bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
v závislosti na režimu:
který bude vyslán. |
Registr WR7 | ||||||||
bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
v závislosti na režimu:
|
Registr RR0 | ||||||||
bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
příznak přečtení znaku signalizujícího přerušení vysílání vysílací stranou | příznak podtečení při odesílání | signál CTS | Sync/Hunt | signál DCD v okamžiku, kdy byly splněny speciální podmínky pro vznik přerušení | vysílací buffer je prázdný | nastaly podmínky pro vznik přerušení (pouze pro kanál A, pro kanál B vždy nulový) | příznak přítomnosti alespoň 1 znaku v přijímacím bufferu |
Registr RR1 | ||||||||
bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
konec přijatého rámce (v režimu SDLC) | příznak chyby CRC/rozdělení na rámce | přetečení přijímací bufferu (přijímací buffer může obsahovat nejvýše tři znaky) | příznak chyby parity | délka I-pole v režimu SDLC | příznak odeslání všech znaků z vysílacího bufferu |
Registr RR2 | ||||||||
bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
vektor přerušení (bity 1–3 se v závislosti na režimu mohou lišit od jejich naprogramovaných hodnot registrem WR2) |
Obvod může generovat přerušení při následujících událostech:
Priorita událostí pro generování přerušení:
Vektor přerušení je možné nastavit a číst pomocí registrů WR2 a RR2 pouze v řídicích registrech kanálu B.