| Poichè gli eventi
che le possono generare sono 4 e poichè la
richiesta può pervenire contemporaneamente
anche da più di una, è prevista una
codifica che associa loro una priorità,
cioè un numero che stabilisce quale di esse sarà servita per prima.
|
Interrupt Pending:
se il
bit0
è 0 significa che un'interruzione
è pendente, cioè uno o più eventi
hanno indotto l'UART ha generare una
richiesta che non è stata ancora stata servita (o
servita del tutto) dal processore (per sapere quale evento è attualmente
sottoposto all'attenzione della CPU basta interpretare i 2 bit successivi); questo bit può essere
interrogato (polling) da software
per scoprire se tutte le potenziali richieste sono state soddisfatte |
|
Interrupt ID:
il compito di stabilire quale dei possibili 4 eventi è
in attesa di essere servito è
affidato ai
bit2/bit1:
è prevista una codifica per ciascuno di essi che consente anche di dirimere
l'ordine con cui dovranno essere
serviti, nel caso di 2 o più richieste
contemporanee: la coppia di bit
presente di volta in volta nel registro è quella dell'evento a più alta
priorità e, dopo il suo completo servizio, sarà sostituita (dall'UART)
con quella dell'evento con la successiva più alta prioritaria. 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, di priorità massima
(prima), ed è in attesa di essere servito; la lettura del
Registro
di Stato della Linea
[port_D]
resetta questa segnalazione |
|
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, di seconda priorità, ed è
in attesa di essere servito; la lettura del
Registro
di Ricezione Dati [port_8] resetta questa segnalazione |
|
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,
di terza priorità, ed è in attesa di essere servito; la scrittura del
Registro
di Trasmissione Dati [port_8]
resetta questa segnalazione |
|
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,
di priorità più bassa (quarta), ed è in attesa di essere servito; la lettura
del il
Registro
di Stato del Modem [port_E]
resetta questa segnalazione |
|
|