|
 |
Procedure Seriali |
ServInt0C - Servizio effettivo 3/3
[203 di 403] |
- Gestione degli eventi seriali con la Tecnica dell'Interruzione |
|
5.4
Procedura ServInt0C:
verifica dell'evento da servire per primo [3 di 3] |
 | Per stabilire quale dei possibili 4
eventi seriali
è
in attesa di essere servito (anche
tutti e 4 potrebbero richiedere l'attenzione del processore
nello stesso
momento) è
possibile consultare i
bit2/bit1 del
Registro
di Identificazione delle Interruzioni
[port_A];
ecco le codifiche, in dettaglio:
 |
bit2/bit1
= 11: durante la ricezione di dati è
stata rilevata la presenza di
errori (di
sovrapposizione, di parità
o
di composizione)
o la presenza di un segnale
di break; l'UART
ha generato una richiesta di Receiver Line Status
Interrupt ed è in attesa di essere servito |
 |
bit2/bit1
= 10:
il numero di bytes ricevuti ha superato quello massimo (trigger
level) previsto per il FIFO
in Ricezione oppure il
FIFO contiene bytes in misura inferiore al
massimo ma il tempo concesso a nuovi arrivi è terminato (timeout) oppure nel
Receive Buffer Register è pronto un singolo dato; l'UART
ha generato una richiesta di
Received Data Available
Interrupt ed è in attesa di essere
servito |
 |
bit2/bit1
= 01: il Transmit
Holding Register è
vuoto (con UART
8250/16450 o con UART
16550A, se il
FIFO in Trasmissione
è disabilitato) oppure il
FIFO ha posti liberi per uno o più bytes; l'UART
ha generato una richiesta di
Transmit Holding Register Empty
Interrupt
ed è in attesa di essere servito |
 |
bit2/bit1
= 00: durante la comunicazione con il Modem
è stata rilevata la variazione dei segnali in arrivo, direzione
DCE>DTE,
come Data Carrier Detect
(CD, rilevato modem
remoto/possibile comunicare),
Ring Indicator (RI, ricevuto segnale acustico
sul canale), Data Set Ready
(DSR, DCE connesso e pronto a
comunicare) e Clear To Send
(CTS, DCE Pronto a ricevere); l'UART
ha generato una richiesta di Modem Status
Interrupt
ed è in attesa di essere servito |
|
 |
Sebbene l'UART
affidi a ciascun evento una sua priorità, da hardware, è sempre possibile
affidare al nostro codice la
sequenza di
priorità: |
 | La nostra scaletta
impone che l'evento che sarà servito per primo (ammesso che la procedura
SetInt0C lo abbia autorizzato ad
interrompere il processore) sia l'Interrupt per
dato ricevuto pronto, seguito da quello per trasmettitore
vuoto e da quelli per
variazioni dello Stato
della Linea o
del Modem. |
 | Di certo, per garantire il
servizio a tutti i possibili concorrenti di
priorità inferiore, ciascun sottoservizio
non potrà essere terminato direttamente con
IRET ma dovrà essere subordinato ad una
nuova verifica del
bit0 del
Registro
di Identificazione delle Interruzioni a livello
Riprova: (vedi paragrafo precedente). |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|