Approfondimento del PIO

 

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. 


Pagina e disegni realizzati da Claudio Fin