Riepilogo comandi del PIO:
Il registro di controllo di una porta accetta 4 tipi di comando. Il comando
è codificato nei bit meno significativi del byte inviato. Quelli
più significativi contengono i diversi parametri. In alcuni casi
è necessario l'invio di un secondo byte, in quanto nel primo non
può essere contenuta tutta l'informazione. I bit segnati con X si
intendono non utilizzati e possono essere indifferentemente 1 o 0.
Comando 1111, definizione del modo
Questo comando permette di selezionare il modo di funzionamento di una
porta. I modi ingresso, uscita e bidirezionale fanno uso dei segnali di
handshaking RDY e STB, il modo di controllo no. NOTA: Solo la porta A può
essere configurata come bidirezionale, e in questo caso la porta B può
funzionare solo nel modo di controllo.
Se si sceglie il modo di controllo allora bisogna inviare un altro byte
per definire quali pin devono essere uscite e quali ingressi:
Il modo di controllo può essere scelto inviando un 255 (tutti
i bit a 1) seguito poi dal byte di configurazione degli ingressi/uscite.
Comando 0, caricamento vettore di interruzione
Comando 0111, definizione controllo interruzioni
Il bit E abilita o disabilita il PIO a generare interruzioni (1=abilitate
0=disabilitate).
Il bit A/O (AND/OR) indica se i diversi pin abilitati a generare un'interruzione
devono essere considerati in AND o in OR, se cioè è necessario
che su tutti appaia il livello previsto o basta su uno solo (1=AND 0=OR).
Il bit A/B (Alto/Basso) indica qual'è il livello che viene sentito
come segnale di interrupt (1=alto 0=basso). Ad esempio se A/B è
a 0 allora è considerato segnale di interrupt il passaggio da 1
a 0 (per poter generare un nuovo interrupt il segnale deve prima tornare
a 1).
Se il bit SM (segue maschera) è a 1 allora bisogna inviare un
altro byte con la maschera dei pin abilitati (controllati) a generare le
interruzioni:
Comando 0011, abilitazione/disabilitazione interruzioni
Questo comando permette di modificare lo stato di abilitazione delle
interruzioni senza alterare il valore dei bit D4..D6.
I segnali RDY e STB:
AVVERTENZA: L'uso di questi segnali non l'ho mai sperimentato
personalmente e le informazioni riportate potrebbero contenere degli errori.
Questi segnali sono un ausilio hardware di cui dispongono le porte per
sincronizzarsi con le periferiche esterne. La porta A dispone dell'uscita
A RDY (ready, pronto) e dell'ingresso A STB (strobe). La porta B dispone
di B RDY e B STB. Nel modo di controllo questi pin non si usano, STB viene
ignorato e RDY è forzato a 0.
|
Nel modo "uscita" RDY è normalmente basso. Quando si scrive
sulla porta RDY va alto per indicare alla periferica esterna che c'è
un dato pronto. La periferica abbassa STB, legge il dato e rialza STB per
indicare che ha letto il dato. Sul fronte di salita di STB, RDY torna basso
e se sono abilitati gli interrupt della porta viene generato un int.
Il modo "uscita" può essere usato anche senza controllare i segnali
RDY e STB, come se la porta fosse in modo di controllo con tutti i bit
settati come uscite. |
|
Collegando assieme RDY e STB ad ogni scrittura sulla porta da RDY si
ottiene un impulso a 1 della durata di un ciclo di clock. |
|
Nel modo "ingresso" RDY è normalmente alto per indicare alla
periferica esterna che la porta è pronta a ricevere un dato. La
periferica presenta il dato alla porta e abbassa STB per farlo acquisire.
Rialza STB, e RDY va basso per indicare che la porta non può accettare
un altro dato (finchè il processore non lo ha letto). Se sono abilitati
gli interrupt il fronte di salita di STB genera un int. La CPU legge la
porta e RDY torna alto per indicare che può essere accettato un
nuovo dato.
Affinchè la porta del PIO acquisisca il dato, l'impulso di STB
deve durare qualche ciclo di clock.
Se la periferica non controlla il valore di RDY, può scrivere
un altro dato prima che il processore abbia letto il precedente, che viene
perciò perso.
Anche il modo ingresso può essere usato come modo di controllo
con tutti i pin programmati come ingressi, il segnale STB in questo caso
deve essere bloccato a massa. |
NOTA: Se non si usano gli interrupt non c'è alcun modo
per sapere se la periferica ha inviato un dato alla porta, questo vuol
dire che se si usa la porta di ingresso con gli interrupt disabilitati
questa può essere gestita solo mediante polling software. Inoltre
in questo caso si deve bloccare STB a massa.
Modo bidirezionale
Solo la porta A può funzionare in modalità bidirezionale,
e in questo caso usa anche i segnali RDY e STB della porta B. La porta
B può pertanto essere usata solo in modo di controllo.
I segnali ARDY e ASTB vengono usati per l'uscita di un dato, BRDY e
BSTB per l'ingresso.
I pin PA0..PA7 sono normalmente in alta impedenza.
La scrittura avviene come nel modo "uscita", il segnale ARDY va alto
e la periferica può abbassare ASTB per indicare che lo sta leggendo.
La differenza sta nel fatto che nella modalità "uscita" il dato
è sempre presente sui pin PA0..PA7, nella modalità bidirezionale
invece viene posto sui pin solo quando viene abbassato ASTB. Quando ASTB
torna alto i pin tornano in alta impedenza e ARDY va basso.
Per la lettura il discorso è simile al modo "ingresso": la periferica
pone il dato sui pin A0..A7 e abbassa BSTB. La porta del PIO acquisisce
il dato e quando BSTB torna alto abbassa BRDY finchè il processore
non ha letto il dato.