|
 |
Procedure Seriali |
TxD_0 essenziale
[183 di 403] |
- Gestione della
Trasmissione Dati con la Tecnica del Polling |
|
3.1 Procedura
TxD_0:
Versione essenziale |
 | La Trasmissione dei dati
via seriale non è mai una situazione
a rischio; il processore può permettersi di
interrogare (Polling)
l'UART in attesa
delle condizioni ottimali, cioè dell'istante in cui il Buffer
di Trasmissione Dati è vuoto
e quindi disponibile ad accettare nuovi dati. |
 | Poichè il
Registro
di Trasmissione Dati [port_8]
sarà certamente di nuovo vuoto in tempi brevi, il processore non rischierà di
perdere troppo tempo in attesa, rendendo competitiva (per la sua semplicità)
la tecnica del polling rispetto a quella
d'interruzione (descritta comunque tra
qualche pagina...). |
 | In ogni caso in nessun modo sarà possibile gestire una
Trasmissione dati senza prima aver fissato le specifiche
di Ricetrasmissione (la velocità e i parametri
desiderati per il protocollo HW, dimensione dei dati, il
numero di bit di stop ed
eventualmente
di parità) in accordo con quelle concordate con
il Ricevitore, compito delegato alla procedura INIserial, descritta
nelle pagine precedenti. |
 | Il codice necessario
per trasmettere un
dato via seriale è mostrato qui di seguito, nella sua versione
essenziale (procedura TxD_0), con riferimento alla porta
COM1: |
 | Si può notare che la procedura
si ferma in un loop d'attesa: la verifica del
bit di stato è assicurata dall'istruzione
TEST,
che simula l'operazione
AND tra
AL e 00100000 il cui risultato
è zero solo se
bit5=0,
condizione che obbliga (JZ) a
rimanere in attesa. |
 | In pratica si attende che il
bit5 del
Registro
di Stato Linea [port_D]
passi a 1;
questo evento si manifesta quando il
Registro
di Trasmissione
[port_8] (o il
buffer FIFO in
Trasmissione, con UART
16550A) è vuoto:
il dato in esso
scritto in precedenza è stato
trasferito al registro a scorrimento
interno e di lì sulla linea seriale, dopo esser stato formattato. |
 | In queste condizioni
il dato da trasmettere viene immediatamente collocato in uscita (cioè
inserito nel Registro di Trasmissione o
nel FIFO), con l'istruzione di
OUT,
operazione che riporta automaticamente di nuovo a
0 il
bit5 del
Registro
di Stato, fino a quando l'UART
sarà
di nuovo pronto ad
accettare
un altro carattere. |
 | A rigore
potrebbe essere testato anche il
bit6 del
Registro
di Stato Linea [port_D]:
esso passa a 1
se non ci sono dati da trasmettere
cioè se anche il registro a scorrimento
interno è vuoto: il
trasmettitore è inoperoso, in attesa di dati da mettere in linea; in queste
condizioni anche il
Registro
di Trasmissione
[port_8] (o il
buffer FIFO in
Trasmissione, con UART
16550A) è ovviamente
vuoto, per cui l'indagine non è necessaria. |
 | Questa versione, TxD_0,
è adatta per una trasmissione gestita in polling, con
qualunque protocollo hardware e (di massima) con
qualunque velocità (cose impostate dal programma principale tramite la procedura
INIserial);
ne fa uso il progetto
TxD0Com1, dedicato alla
COM1, e l'analogo
TxD0Com2, dedicato alla
COM2; puoi analizzare ogni dettaglio
partendo dall'elenco di
questa pagina. |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|