L'integrato Z80-PIO

Il PIO (parallel input/output) è un integrato che mette a disposizione due porte di I/O programmabili. E'stato studiato per funzionare assieme ad una CPU Z80 e non può essere collegato direttamente ad altri processori. Ogni porta può funzionare in diverse modalità, e dispone di due segnali ausiliari (RDY e STB) che consentono la sincronizzazione con le periferiche esterne (segnali di handshaking). Inoltre ogni porta può generare un interrupt, e più dispositivi PIO si possono collegare in cascata con i pin IEIN e IEOUT per realizzare una catena di interrupt a diversa priorità (daisy chain). 
 
 

Integrato Z80 PIO

Rosso: BUS dati a 8 bit 

Blu: Alimentazioni e clock. 

Giallo: I segnali di controllo 

Grigio scuro: ingressi, se non sono usati collegare IEIN a +5V con una resistenza e ASTB BSTB a massa. 

PA0..PA7 e PB0..PB7 sono i pin di ingresso uscita delle due porte, gli altri segnali sono uscite, se non vengono usate si lasciano scollegate (servono per gli interrupt e l' handshaking). 

I segnali di controllo sono molti e sono richiesti anche M1 e il clock perché il PIO li usa per sincronizzarsi internamente con lo Z80. Il pin WR dello Z80 non è necessario in quanto il PIO riesce a "capire" dalla combinazione degli altri segnali se si sta tentando di scrivere in esso. Inoltre non è richiesto un pin di reset in quanto questo è automatico all'accensione. 

Il segnale E abilita il PIO e generalmente proviene da un address decoder. A/B seleziona la porta A (se basso) o B (se alto). C/D seleziona il registro dati (se basso) o il registro di controllo (se alto) della porta scelta con A/B. Generalmente A/B e C/D vengono collegati ai pin A0 e A1 dello Z80. 

Se opportunamente programmato il PIO può generare degli interrupt sul pin di uscita INT. Il pin IEIN basso impedisce al PIO di generare interrupt, pertanto va tenuto alto con una resistenza. IEOUT si collega all'IEIN di un altro eventuale PIO, altrimenti si lascia scollegato. 

Se i segnali RDY e STB non vengono usati è bene lasciare RDY scollegato e STB bloccato a massa. 

Questa pagina tratta della modalità di funzionamento più semplice, detta "modo di controllo". In questa modalità i segnali RDY e STB non vengono usati (STB è ignorato e RDY forzato a 0) e i singoli pin delle porte possono essere configurati come ingressi o come uscite. 

La figura seguente mostra come collegare un singolo PIO al BUS dello Z80, se non si vogliono usare gli interrupt del PIO il pin INT del PIO può rimanere scollegato: 



Visto che i segnali A/B C/D ed E sono collegati ai bit A0 A1 A2 del BUS indirizzi, i registri dati e di controllo si trovano mappati a 4 indirizzi consecutivi: 

Per configurare una porta in "modo di controllo" bisogna inviare al registro di controllo di quella porta due byte, il primo stabilisce il modo di funzionamento e il secondo quali pin devono essere uscite e quali ingressi (X=bit indifferentemente 1 o 0): 
 


 

Ad esempio, inviando al registro di controllo della porta A (indirizzo 2) i due byte 11111111B e 00000111B la porta A viene configurata da PA0 a PA2 come ingressi e da PA3 a PA7 come uscite. A questo punto è possibile scrivere sulle uscite con OUT (0);A e leggere dagli ingressi con IN A,(0). Naturalmente in questo caso in scrittura il valore dei bit D0..D2 di A viene ignorato, e in lettura i valori dei bit D3..D7 in arrivo dalla porta non hanno alcun significato. 

Non sono necessarie porte esterne di adattamento perché il PIO è progettato apposta per lavorare con i segnali dello Z80, e rappresenta quindi la soluzione ideale se si vuole disporre di 16 fili di ingresso/uscita con il minor numero di componenti. Come per la CPU anche i PIO esistono in diverse versioni, lo Z80A-PIO lavora fino a 4 Mhz, lo Z80B-PIO lavora fino a 6 Mhz. 

Se si volessero collegare più PIO si dovrebbe usare un 74138 che controlla i bit di indirizzamento superiori ad A1 per scegliere quale PIO abilitare. Facendo un po'di attenzione è possibile però usare una "scorciatoia" e collegare più PIO anche senza alcun address decoder: 



Questi due PIO condividono tutti i segnali ad esclusione del pin di abilitazione. Il primo PIO viene abilitato da quegli indirizzi che hanno il bit A2 a 0, il secondo da quegli indirizzi che hanno il bit A3 a 0: 



ATTENZIONE: Con questo collegamento si deve prestare molta attenzione a non usare indirizzi di I/O che rappresentati in binario hanno i bit A2 e A3 contemporaneamente a zero. In questo caso infatti si abiliterebbero entrambi i PIO e sorgerebbero conflitti sul BUS dati che potrebbero danneggiarli. 

Se non si vogliono usare gli interrupt dei PIO, i pin INT si possono lasciare scollegati. Il circuito di questo schema è predisposto per poter usare gli interrupt di tutte 4 le porte. Il segnale IEOUT del PIO1 va collegato a IEIN del PIO2, in questo modo quando il primo PIO deve generare un interrupt disabilita il secondo portando basso IEOUT (e IEIN del secondo). Si vede già da questo come il PIO1 ha una priorità maggiore rispetto al 2, all'interno di ogni singolo PIO la porta A ha priorità maggiore rispetto alla porta B. Nel nostro caso la porta con priorità maggiore è la A del PIO1, quella con priorità minore è la B del secondo. 

NOTA: Le uscite INT dei PIO sono di di tipo open collector, quindi sulla linea INT del processore è comunque necessaria una resistenza di pull'up da 10K. 

Con due soli PIO e il modulo logico con CPU e memorie è possibile realizzare un sistema completo con 32 fili di ingresso/uscita singolarmente configurabili, e che possono essere programmati per generare fino a 4 tipi diversi di interrupt (uno per ogni porta). 


Cliccare sul disegno per vedere lo schema elettrico



Pagina e disegni realizzati da Claudio Fin