|
 |
Procedure Seriali |
RxD_4 variante RxD_2
[189 di 403] |
- Gestione della
Ricezione Dati con la Tecnica del Polling |
|
4.5 Procedura
RxD_4:
Variante con Time-Out della versione sofisticata |
 | La procedura RxD_4 è
un'ulteriore variante della precedente
RxD_2, adatta a soddisfare la Ricezione
dei dati via seriale, garantendo il rientro al programma chiamante
anche se i
dati non arrivano dalla porta seriale entro un tempo massimo (Time-Out). |
 | Viene proposta solo al fine di mostrare le tecniche per la
gestione e la
visualizzazione degli errori seriali;
questa indagine
la rende infatti utilizzabile con difficoltà:
se il flusso di dati in arrivo non è ottimale sarà
immediatamente terminata. |
 | Il suo codice assembly
è mostrato qui di seguito: |
 | Come la RxD_2 questa procedura
si ferma in attesa che
il
bit0 del
Registro
di Stato Linea [port_D]
passi a 1 (buffer UART
pieni, dato pronto) per un
periodo di tempo limitato (Time-Out) consumato
decrementando
registri, trascorso il quale l'esecuzione viene comunque terminata,
rientrando al programma chiamante con AH=FFH
(non ci sono dati pronti e
il tempo è scaduto). |
 | Se invece il dato è
stato ricevuto
(bit0=1),
prima di leggerlo si verifica
se è gravato da eventuali errori in ricezione;
poichè in AL è ancora disponibile lo
Stato della linea seriale, se
uno o tutti i
bit1,
bit2,
bit3
o
bit4
sono a 1
significa che si è manifestato l'errore ad essi corrispondente; si ritorna al
programma chiamante con AH caricato con il
codice binario 000BFPO0B,
corrispondente agli errori rilevati:
 | [O],
bit1=1, errore di sovrapposizione
(Overrun Error):
il processore non ha fatto in tempo a leggere un dato dal
Registro
di Ricezione [port_8], prima dell'arrivo del successivo,
oppure (con UART
16550) il
buffer FIFO in
Ricezione è pieno e il dato ricostruito nel registro a scorrimento
interno non può esservi inserito; il dato non
letto viene perduto, sovrascritto da quello in arrivo |
 | [P],
bit2=1, errore
di parità (Parity Error):
prima del bit di stop l'UART
ha rilevato nel dato ricevuto un numero di bit a 1
diverso da quello (pari o
dispari) previsto dalla programmazione del
Registro
di Controllo Linea [port_B] |
 | [F],
bit3=1, errore di composizione
(Framing Error):
se, dopo l'ultimo bit di dato previsto dalla programmazione del
Registro
di Controllo Linea [port_B],
viene rilevato uno 0
logico la struttura (frame) del
dato ricevuto è scorretta perchè priva del bit di stop
(notoriamente un bit a 1) |
 | [B],
bit4=1,
sulla linea d'ingresso seriale (SIN,
pin10 dell'UART)
è presente un segnale di Break (Break
Interrupt),
cioè se la linea è tenuta a livello logico 0
(SPACE) per un tempo maggiore a
quello previsto per ricevere un dato formattato (cioè completo di
bit di start, eventuale parità e
di stop) |
|
 | Se la ricezione è avvenuta
senza errori tutti i bit citati sono
a 0: si provvede ad
assume il dato dal
Registro
di Ricezione
[port_8] (o
dal
buffer FIFO in
Ricezione, con UART
16550A),
rientrando al programma chiamante con AH=00H
(dato pronto) |
 | Questa versione è adatta per una ricezione gestita in polling, con
qualunque protocollo hardware; nonostante funzioni anche
in assenza di un
flusso continuo di
dati in arrivo, rimane
sufficientemente affidabile con dati
arrivo con
velocità relativamente basse ed esenti
da errore: la necessità di eseguire istruzioni
in più, tanto per la verifica degli errori
quanto per la verifica del tempo di Time-Out,
può diminuire la certezza che tutti i bytes in arrivo siano rilevati con
correttezza. |
 | Ne fa uso il progetto
RxD4Com1, dedicato alla
COM1, e l'analogo
RxD4Com2, 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
|