|
 |
Programmazione |
TECNICHE D'INTERRUZIONE 4/4
[169 di 403] |
|
|
 |
Aggiunto 10 maggio 2005 |
|
****
GESTIONE EVENTI
SERIALI:
INTERRUPT
[4 di 4]
|
 | Prima di terminare la trattazione sul
servizio delle
possibili 4 cause seriali di richiesta d'interruzione,
è interessante fare una valutazione sui tempi a disposizione del processore
per assolvere a questo compito, mediante l'esecuzione
delle procedure INT
0BH e INT
0CH; l'evento ricezione seriale,
per la sua criticità, si presta bene come metro di confronto. |
 | Con i modem di
prima generazione i dati venivano
trasferiti a bassa velocità e senza alcuna codifica e/o compressione: ciascun
byte proposto dal processore, racchiuso (framed) dai bit di protocollo dalla
porta seriale (UART
8250/16450),
veniva trasferito pari pari dal modem su un
canale vocale caratterizzato dalla classica baud rate
di
2400 baud, uguale in questo caso a
2400 bps cioè
240 bytes al secondo. |
 | Supponendo che l'UART
producesse richiesta d'interruzione dopo
ogni byte ricevuto è facile
concludere che il processore veniva interrotto con cadenza di
4,16 ms, un tempo decisamente grande, a
sua disposizione, per garantire il servizio, tale da escludere ogni rischio di perdita dati per sovrascrittura
(errore di sovrapposizione) del
Registro
di Ricezione [port_8]
(Receive
Buffer Register,
RBR). |
 | Utilizzando la stessa baud rate
di 2400 baud con un
modem
operante sotto lo standard
V.32bis, in grado di raggiungere una
bit rate
di 14400
bps per effetto della
Quadrature Amplitude Modulation (capace di affidare 6 bit
ad ogni periodo della portante, 2400
baud x 6 bit = 14,4Kbps),
l'UART può disporre di un nuovo dato ricevuto
ogni 694
μs;
altre simili situazioni temporali sono disponibili nelle
pagine che descrivono l'UART
come componente). |
 | Anche i protocolli di compressione
aumentano notevolmente il numero di bytes posti sulla linea (4 volte più
grande, per esempio, con una compressione 4:1) e riducono, in misura
inversamente proporzionale, i tempi di ricezione. |
 | Se il processore fosse costretto a garantire servizio dopo
ogni byte ricevuto il notevole numero di interruzioni porterebbe ad un
sensibile degrado delle prestazioni del computer e ad una sempre
più probabile possibilità di Overrun Error.
|
 | La soluzione al problema è giunta con la
disponibilità del
buffer FIFO in
Ricezione
nei controller seriali più
recenti,
a partire dall'UART
16550; la richiesta di
Received Data Available
Interrupt è ora da essi operata solo quando il
numero di bytes ricevuti ha superato quello massimo (trigger
level) programmato per generare questo evento, di solito
14 per FIFO
da 16 bytes (gli UART
più recenti hanno buffer più capaci). |
 | In questo modo il processore viene interrotto molto meno
frequentemente ed è chiamato ad assumere in blocco i
14 bytes pronti nel
buffer
nel tempo a disposizione dell'UART
per le 2 rimanenti ricezioni, per evitare che si verifichi il
trabocco del buffer stesso e la conseguente perdita di ulteriori dati in
arrivo; l'analisi dei nuovi tempi in presenza di
buffer FIFO
è stata approfondita nell'ambito della
descrizione generale dell'UART. |
 | La possibilità di programmare
il trigger
level a valori inferiori a
14 (di solito
8, 4
o
1) riduce il
rischio di overflow ma aumenta anche le richieste di
Interrupt,
rallentando l'esecuzione degli altri compiti. |
 | In conclusione è fortemente auspicabile che la velocità di terminale
del collegamento DTE-DCE
tra
computer e
modem (espressa in baud e garantita
dall'UART) sia sensibilmente più grande (almeno
4 volte) di quella del canale (velocità di
linea del collegamento
DCE-DCE tra
modem
e
modem, espressa in bps e garantita dal
modem stesso):
 | nel caso del modem
citato come esempio, in grado di porre in linea
14,4Kbps,
è dunque conveniente programmare la porta seriale per una velocità di
57,6Kbaud |
 | con un modem
operante sotto lo standard
V.34, in grado
di porre in linea 28,8Kbps
conviene programmare la porta seriale per la massima velocità,
115,2Kbaud |
 | con i modem
dell'ultima generazione, ad alta
velocità ed alto rapporto di compressione, sono
necessarie porte seriali con gli UART più recenti, in grado di supportare
velocità di raggiungere e superare i 921.6 Kbaud,
dotati di
buffer FIFO di 64
o
128 bytes. |
|
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|