1/19
2/19
Buffer Indirizzi. ciò che avviene per il Buffer Dati avviene per il Buffer Indirizzi, con l’unica
differenza che quest’ultimo è collegato al Bus indirizzi.
Bus Interno. è un bus a 8 bit che consente la comunicazione tra i dispositivi interni della
CPU secondo le indicazioni dell’unità di controllo che deve mantenere il controllo di tutte le
operazioni e trasferimenti di dati.
Come è noto la comunicazione con l’esterno è resa possibile da particolari linee dedicate
denominate Bus. Nel caso dello Z80, i tre diversi tipi di bus hanno le seguenti
caratteristiche:
Bus Dati: è un bus bidirezionale di 8 bit preposto al trasporto dei dati. Le otto linee di
questo bus permettono al dato di viaggiare in un senso o nell’altro, ma non è possibile che
singoli bit viaggino nei due sensi opposti contemporaneamente.
Bus Indirizzi: nello Z80 gli indirizzi sono a 16 bit: tale sarà allora il numero di linee che
compongono questo bus. Poiché è l’unità centrale a generare e inviare gli indirizzi alla
memoria o alle porte di I/O, il bus indirizzi è un bus unidirezionale in uscita
Bus di Controllo. ognuna delle 13 linee che compongono questo bus unidirezionale in un
senso o nell’altro. Ciò significa che il bus di controllo è bidirezionale, ma in maniera
diversa da bus dati. In altre parole, il bus di controllo è costituito da 13 linee, di cui 8 in
uscita e 5 in ingresso.
Il μP Z80 funziona con un’alimentazione di +5V, con una frequenza che varia fra 2,5 e 8
MHz.
3/19
Il PIO Z80 (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).
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:
5/19
Struttura interna
La struttura interna del PIO è rappresentata nella figura seguente
6/19
7/19
MODI DI FUNZIONAMENTO
Si possono definire tre modalità diverse di trasmissione:
• Simplex
• Half-duplex
• Full-duplex
Nel collegamento simplex i dati possono viaggiare soltanto in un senso. Il ruolo di
trasmettitore e di ricevitore sono assegnati una volta per tutte. Il dispositivo ricevitore non
può inviare a sua volta dati al trasmettitore.
Nel collegamento half-duplex esiste un’unica linea di connessione come nel caso del
collegamento simplex. Stavolta, però, i ruoli di trasmettitore e ricevitore non sono fissati in
modo rigido ed i dati possono viaggiare in entrambe le direzioni. Essendo, però, la linea di
comunicazione unica, di volta in volta uno dei due terminali è in ricezione è l’altro in
trasmissione. Perché si scambino i ruoli occorre un certo tempo di turnaround.
8/19
Come si vede dalla figura, all’interno della porta si genera un segnale *WR che va a zero
quando il microprocessore scrive il dato sulla porta per cui si ha contemporaneamente che
• RD è ad uno quindi RD è a zero (si sta scrivendo)
• CE è a zero (il microprocessore ha abilitato il PIO)
9/19
Mentre *WR è attivo, il dato viene trasferito sui piedini che collegano la porta alla
periferica (Port Output), quando il segnale *WR si rialza vuol dire che l’operazione di
scrittura da parte del microprocessore sulla porta è terminata. Allora la porta alza il
segnale READY per avvertire la periferica che un dato è disponibile per essa. La
periferica risponde mandando basso il segnale STROBE. Finché questo segnale
rimane basso vuol dire che la periferica è ancora impegnata nell’acquisizione del dato
stesso impedendo alla porta del PIO di inviarle altri dati. Quando STROBE si rialza
indica alla porta del Pio che il trasferimento del dato è stato completato e si può inviare
alla periferica un altro dato. Se la porta è abilitata ad utilizzare le interruzioni genera a
questo punto un’interruzione per il microprocessore per costringerlo ad inviare un
nuovo dato.
10/19
11/19
12/19
13/19
Sio Z80
14/19
SIO/1
15/19
D0-D7
Bus dati del sistema, serve per trasferire dati e comandi fra la CPU e il SIO con D0 il bit
meno significativo.
B/A
Selezione del canale A o B, il livello alto seleziona il canale B, questo ingresso quale
canale è abilitato è abilitato durante un trasferimento di dati fra la CPU e il SIO
C/D
Selezione comandi o dati. Questo ingresso definisce il tipo di informazione trasferita tra la
CPU e il SIO, un livello alto durante il ciclo di scrittura fa si che le informazioni presenti sul
bus dei dati siano interpretati come comandi dal canale selezionato. Un livello basso
significa che le informazioni sono interpretate come dati.
CE
Chip Enable, abilitazione del chip, un livello basso abilita il SIO ad accettare comandi o
dati in ingresso dalla CPU durante il ciclo di scrittura oppure inviare dati alla CPU durante
il ciclo di lettura.
Φ
Clock del sistema.
16/19
IORQ
Richiesta di ingresso/uscita. IORQ è usato in congiunzione con B/A, C/D, CE e RD per
trasferire comandi e dati fra la CPU e il SIO.
RD
Richiesta di lettura. Se RD è attivo un’operazione di lettura di memoria o di I/O è in corso.
RESET
Reset. Azzeramento. Un livello sull’ingresso attivo basso disabilita sia il ricevitore che il
trasmettitore.
IEI
Ingresso di abilitazione delle interruzioni (attivo alto). Un livello alto su questa linea indica
che nessun altro componente con priorità più elevata sta richiedendo un’interruzione alla
CPU.
IEO
Uscita di abilitazione delle interruzioni (attivo alto). Questo segnale è alto solo se IEI è alto
e la CPU non sta già eseguendo un’interruzione per questo SIO.
INT
Richiesta d’interruzione
W/RDYA W/RDYB
Attesa / pronto A, Attesa / pronto B. Queste uscite possono essere programmate come
linee wait per sincronizzare la CPU alla velocità di trasferimento dati del SIO.
CTSA CTSB
Libera l’invio dei dati dal canale A o B (abilitazione alla trasmissione).
DCDA DCDB
Rivelazione della portante di dati, sono simili agli ingressi CTS, eccetto che sono
utilizzabili come abilitazione ai ricevitori.
RxDA RxDB
Ricezioni dati canale A e canale B.
TxDA TxDB
Trasmissioni dati canale A e canale B
RxCA RxCB
Clock di ricezione canale A e canale B (ingressi)
TxCA TxCB
Clock di trasmissione
17/19
DTRA DTRB
Il SIO è pronto a ricevere dati (uscite attivo basso)
SYNC A SYNC B
Sincronizzazione ingressi/uscite. Possono comportarsi ciascuno come ingresso o come
uscita.
La struttura interna del dispositivo comprende l’interfaccia alla CPU la logica d’interruzione
e di controllo interno, e due canali “full-duplex”. Associati a ciascun canale si hanno i
registri di lettura e scrittura e la logica di stato e di controllo che provvede all’interfaccia
con il modem e con altri dispositivi esterni.
DESCRIZIONE FUNZIONALE
Le caratteristiche funzionali del SIO possono essere descritte da due differenti punti di
vista: come dispositivo per le comunicazioni di dati o come dispositivo periferico della
famiglia Z80. Nel primo caso esso trasmette e riceve dati seriali e soddisfa le richieste dei
vari protocolli di comunicazione dati. Come dispositivo periferico della famiglia Z80 invece,
il SIO interagisce con la CPU e con gli altri dispositivi periferici condividendone
perfettamente il bus dati, il bus indirizzi e il bus di controllo come parte integrante della
struttura d’interruzione Z80. come periferica di altri microprocessori, il SIO offre preziose
caratteristiche come l’interruzione non vettorizzata, la capacità di funzionare in modo
polling (consultazione) ed in modo handshake.
Polling il modo polling evita l’interruzione, tutti i modi di interruzione del SIO devono
essere disabilitati. Mentre la CPU nella sua sequenza di polling esamina lo stato contenuto
in RR0 (stato del registro di trasmissione/ricezione, stato dell’interruzione e stato esterno)
per ciascun canale, i bit di stato di RR0 danno una risposta alla domanda di consultazione.
I due bit di stato D0 eD2 del registro RR0 indicano che è necessario dar seguito ad
un’operazione di ricezione o di trasmissione. I bit di stato indicano anche errori ed altre
condizioni speciali.
Interruzioni. Il SIO per fornire risposte veloci alle interruzioni, nelle applicazioni in tempo
reale offre un piano elaborato di interruzioni. I registri del canale B WR2 (vettore
d’interruzione) e RR2 (vettore d’interruzione modificato solo per il canale B) contengono il
vettore d’interruzione che indirizza in memoria una routine di servizio per l’interruzione.
I principali sorgenti d’interruzione sono le interruzioni di trasmissione, le interruzioni di
ricezione e le interruzioni da stato esterno. Ciascuna sorgente d’interruzione è abilitata
sotto il controllo del programma con la priorità più alta al canale A rispetto al canale B.
Quando è abilitata l’interruzione dal ricevitore, la CPU può essere interrotta in uno dei tre
modi seguenti.
18/19
REGISTRI DI SCRITTURA
Il SIO contiene 8 registri di scrittura (WR0-WR7) per ciascun canale, programmabili
separatamente dal software di sistema al fine di personalizzare funzionalmente i canali. La
programmazione dei registri di scrittura richiede 2 byte eccetto il registro WR0. Il primo
byte contiene 3 bit (D0-D2) che indicano il registro selezionato; il secondo byte è la parola
di controllo effettiva che deve essere scritta in quel registro per configurare il SIO.
Si noti che il programmatore , dopo aver indirizzato il registro selezionato, ha completa
libertà sia di leggere per verificare il registro di lettura che di scrivere per inizializzare il
registro di scrittura. Per una programmazione modulare e strutturata d’inizializzazione del
SIO, il programmatore può usare le istruzioni di trasferimento di blocco di I/O.
La scrittura del registro WR0 è un caso speciale in cui tutti i comandi base (CMD0-CMD2)
possono essere accessibili con un singolo byte. Il Reset (interno od esterno) inizializza i bit
del puntatore Do-D2 a puntare al registro WR0.
I comandi base (CMD0-CMD2) ed i controlli CRC (CRC0, CRC1) sono contenuti nel primo
byte di qualunque registro di scrittura reso accessibile. Questo fatto mantiene la massima
flessibilità nel controllo del sistema.
REGISTRI DI LETTURA
Il SIO contiene tre registri di lettura, (RR0-RR2), che possono essere letti per ottenere
l’informazione di stato di ciascun canale (ad eccezione di RR2, valido solo per il canale B).
L’informazione di stato comprende le condizioni di errore, il vettore d’interruzione ed i
segnali dell’interfaccia di comunicazioni standard.
Per leggere il contenuto di un registro di lettura selezionato, il software del sistema deve
prima scrivere in WR0 il byte contenente l’informazione per il puntatore, esattamente nella
stessa maniera delle operazioni con i registri di scrittura, quindi eseguendo un’istruzione
d’ingresso, il contenuto del registro di lettura indirizzato può essere letto dalla CPU.
I bit di stato dei registri RR0 e RR1 sono stati attentamente raggruppati per semplificarne il
controllo. Per esempio, quando il vettore d’interruzione indica che è avvenuta
un’interruzione dovuta ad una condizione speciale di ricezione, tutti i bit di errore
appropriati possono essere da un singolo registro (RR1).
19/19