| La Trasmissione Dati
verso la porta seriale non è cosa
limitata a questo
Registro; sebbene l'interfaccia
di scrittura a 8 bit con il processore sia il suo indirizzo
[port_8],
coinvolto dall'istruzione
OUT,
questo servizio
richiede una discreta attività da parte dell'UART:
| il
byte viene in realtà trasmesso da un buffer
non accessibile
da programma, un registro a scorrimento detto Transmit Shift Register,
TSR, dal quale viene fatto
scorrere fuori (serializzato) direttamente
sulla linea di trasmissione
TD,
subito dopo essere stato
formattato in accordo alle
scelte RS232
predisposte prima della trasmissione, inserendogli
davanti un bit di start e facendogli seguire
l'eventuale bit di parità e il numero desiderato
di bit di stop |
| il
byte da trasmettere viene automaticamente trasferito dalla locazione
corrente del
buffer FIFO in
Trasmissione (con UART
16550A) o dal nostro
Transmit Holding Register, THR
(con UART 8250/16450 o con UART
16550A se il
FIFO è disabilitato) |
| nessun nuovo dato può essere accettato (cioè
scritto nel THR)
prima che il precedente sia stato spedito
sulla linea (cioè prima che il TSR sia
vuoto, con UART
8250/16450); con UART
16550A o successivi la scrittura dati può
continuare in blocco fino a quando il
buffer FIFO in
Trasmissione è pieno, senza
attendere il loro effettivo trasferimento in linea |
| per stabilire l'esatto momento per fornire
nuovi dati ogni programma può consultare 2 bit del
Registro
di Stato della Linea
[port_D]
(o affidarsi alle tecniche d'interruzione, discusse in altra parte):
| il bit5
(detto Transmitter Holding Register Empty,
THRE) a 1
logico indica che il
THR [port_8]
(o che il
buffer FIFO in
Trasmissione) è vuoto cioè che il dato in esso
scritto in precedenza dal processore è stato
trasferito al TSR; il Trasmettitore è pronto ad accettare nuovi caratteri
da trasmettere e, non appena uno di essi entra nel THR (o
nel
FIFO),
riporta a 0 logico questo bit |
| il bit6
(detto Transmitter Shift Register Empty,
TSRE) a 1
logico indica che il
TSR [interno]
è vuoto: il Trasmettitore è inoperoso, in
attesa di dati da mettere in linea; in queste
condizioni anche il
THR [port_8]
(o il buffer FIFO in
Trasmissione) è ovviamente vuoto e, non appena un dato
vi entrerà, questo bit torna a 0 logico |
|
|