Timer 8254
Indice Imposta Esci
Introduzione
• L’8254 è un interval timer event/counter,
progettato per risolvere i problemi del controllo del timing, comuni ad ogni microcomputer.
• E’ costituito da da 3 contatori indipendenti da 16 bit, che possono essere programmati dal sistema software in 6 modi di operare.
• Il data sheet completo è reperibile al
• http://www.intel.com/design/periphrl/datashts/
Timer 8254
Indice Imposta Esci
Funzioni implementabili con 8254
• Generazione di un ritardo Generazione di un ritardo
• Generazione di un’onda generica Generazione di un’onda generica
• Generazione del “real time clock” Generazione del “real time clock”
• Contatore di eventi Contatore di eventi
Timer 8254
Indice Imposta Esci
Pinout
D7 D6 D5 D4 D3 D2 D1 D0 CLK 0 OUT 0 GATE 0 GND
Vcc WR RD CS A0 A1
CLK 2 OUT 2 GATE 2 CLK 1
OUT 1 GATE1
82548254
Timer 8254
Indice Imposta Esci
Modalità
• I tre contatori di 16 bit dell’8254 possono
essere programmati tramite la Control Word in 5 modi di operare. Diamo ora una breve rassegna di tali modalità.
• Per il modo 0 e 1 verrà dettagliato il modo di interpretarne il timing, per gli altri modi si invita lo studente a derivarli analizzando il timing
Timer 8254
Indice Imposta Esci
Modo 0
• Il Modo 0 è usato in ogni tipologia di conteggio, ma in particolare per contare eventi.
• Dopo che la Control Word è stata scritta il segnale di OUT è posto basso e rimarrà
basso fino alla fine del conteggio.
Timer 8254
Indice Imposta Esci
Modo 0 (Caso a: gate sempre alto)
C W = 10 L S B = 4
W R
C L K G A T E
O U T
N N N N 0
4
0 3
0 2
0 1
0 0
F F F F
E E E E
fronte clk che imposta il modo
fronte clk che inizia il conteggio
imposto il valore iniziale
Timer 8254
Indice Imposta Esci
Modo 0 (caso b: gate abbassato )
W R
CLK
GATE
OUT
N N 0
3
0 2
0 1
0 0 0
2
0 2
FF FF N
N
CW = 10 LSB = 3
mentre il gate è basso il conteggio è sospeso
Timer 8254
Indice Imposta Esci
Modo 0 (caso c:conteggio reinizializzato)
W R
C L K
G A T E
O U T
N N N N 0
3
0 2
0 1
0 2
0 1
0 0
F F F F
C W = 10 L SB = 3 L S B = 2
restart del counter quando arriverà a zero
Timer 8254
Indice Imposta Esci
Modo 1
• Il Modo 1 è usato per generare il one_shot_pulse.
• OUT è inizializzato alto.
• OUT andrà basso al verificarsi di un Trigger; al termine del conteggio OUT ritornerà alto.
Timer 8254
Indice Imposta Esci
Modo 1 (caso a)
CW = 12 LSB = 3
WR CLK
GATE
OUT
N N N N N 0
3
0 2
0 1
0 0
0 3 FF
FF
impulsi di trigger del conteggio
Timer 8254
Indice Imposta Esci
Modo 1 (caso b)
W R
C L K
G A T E
O U T
C W = 12 L S B = 3
N N N N N 0
3
0 2
0 1
0 3
0 2
0 1
0 0
impulsi di triggerdel conteggio, il conteggio continua poiché il trigger è giunto prima di terminare il conteggio
Timer 8254
Indice Imposta
Modo 1 (caso c: modificazione del valore Esci
di inizio dopo il retrigger
)
L S B = 4 C W = 12 L S B = 3
W R
C L K
G A T E
O U T
N N N N N 0
2
0 1
0 0
F F F F
F F F E
0 4
0 3
impulsi di trigger del conteggio
Modifica del valore
Timer 8254
Indice Imposta Esci
Modo 2
• Il modo 2 fa si che il contatore funzioni come un divisore.
• Tale modo è utilizzato per generare l’interrupt per tempo reale di clock (orologio del sistema).
Timer 8254
Indice Imposta Esci
Modo 2 (Caso a)
C W = 14 L SB = 3
W R
C L K
G A T E
O U T
N N N N 0
3
0 2
0 1
0 3
0 2
0 1
0 3
Timer 8254
Indice Imposta Esci
Modo 2 (caso b)
W R
CLK GATE
OUT
N N N 0
2
N 0
3
0 2
0 3
0 2
0 1
0 3
CW = 14 LSB = 3
Timer 8254
Indice Imposta Esci
Modo 2 (caso c)
CW =14 LSB = 4 LSB = 5
W R
CLK GATE
OUT
N N N N 0
4
0 3
0 2
0 1
0 5
0 4
0 3
Timer 8254
Indice Imposta Esci
Modo 3
• Il modo 3 è tipicamente usato per la
generazione di onde quadre. E’ simile al modo 2 eccetto per il ciclo dell’OUT.
• OUT viene inizializzato alto.
• Quando il conteggio del contatore è giunto alla metà del valore iniziale, OUT viene
posto basso per tutta la successiva metà del conteggio.
Timer 8254
Indice Imposta Esci
Modo 3 (caso a)
CW = 16 LSB = 4
W R
CLK GATE
OUT
N N N N 0
4
0 2
0 4
0 2
0 4
0 2
0 4
0 2
0 4
0 2
Timer 8254
Indice Imposta Esci
Modo 3 (caso b)
CW = 16 LSB = 5
WR
CLK GATE
OUT
N N N N 0
4
0 2
0 0
0 4
0 2
0 4
0 2
0 0
0 4
0 2
Timer 8254
Indice Imposta Esci
Modo 3 (caso c)
CW = 16 LSB = 4
WR
CLK GATE
OUT
N N N N 0
4
0 2
0 4
0 2
0 2
0 2
0 4
0 2
0 4
0 2
Timer 8254
Indice Imposta Esci
Modo 4
• OUT è inizializzato alto
• Quando il conteggio el contatore raggiunge lo zero, OUT va basso per un
impulso di CLK e poi ritorna subito alto.
Timer 8254
Indice Imposta Esci
Modo 4 (caso a)
LSB = 3 CW = 18
WR
CLK GATE
OUT
N N N N 0
3
0 3
0 0
0 1
FF FF
FF FE
FF FD
Timer 8254
Indice Imposta Esci
Modo 4 (caso b)
CW = 18 LSB = 3
W R
CLK
GATE
OUT
N N N N 0
3
0 3
0 2
0 1 0
3
00 00
FF FF
Timer 8254
Indice Imposta Esci
Modo 4 (caso c)
CW = 18 LSB = 3 LSB = 2
WR
CLK GATE
OUT
N N N N 0
3
0 2
0 1
0 2
0 1
0 0
FF FF
Timer 8254
Indice Imposta Esci
Modo 5
• OUT è inizializzato alto.
• Il conteggio è attivato da un Trigger.
• Quando il conteggio è terminato OUT va basso per la durata di un Impulso di CLK per poi tornare subito di nuovo alto.
Timer 8254
Indice Imposta Esci
Modo 5 (caso a)
CW = 1A LSB = 3
WR
CLK
GATE
OUT N N N N N 0
3
0 2
0 1
0 0
FF FF
0 3
Timer 8254
Indice Imposta Esci
Modo 5 (caso b)
CW = 1A LSB = 3
WR
CLK
GATE
OUT
N N N N N 0
3
0 2
0 3
0 2
0 1
0 0
FF FF
Timer 8254
Indice Imposta Esci
Modo 5 (caso c)
WR
CLK
GATE
OUT
CW = 1A LSB = 3 LSB = 5
N N N N N 0 0 0 0 FF 0
Timer 8254
Indice Imposta Esci
Block Diagram
Data Bus Buffer
Read Write Logic
Control Word Register
Counter 0
Counter 1
Counter 2
8
CLK 0 GATE 0 OUT 0
CLK 1 GATE 1 OUT 1
CLK 2 GATE 2 OUT 2 RD
WR A0 A1 CS D7- D0
Timer 8254
Indice Imposta Esci
CE
CRL CRM
OLL OLM
Control Word Register
Status Register
OUT n CLK n
Bus interno
Control Logic
Struttura di un contatore
La Control Word Register non appartiene a un contatore, ma ne definisce il modo
Timer 8254
Indice Imposta Esci
Status Register
• Il contenuto corrente della Control Word Register.
• Lo stato dell’ouput del Contatore.
• Lo stato del Null Counter Flag.
CE
CRL CRM
OLL OLM
Control Word Register
Status Register
OUT n GATE n
CLK n
Bus interno
Control Logic
• Lo status register, quando è stato caricato, contiene:
Timer 8254
Indice Imposta Esci
CE - Down Conter
• Nella figura il contatore è indicato con l’etichetta CECE (Counting C Element). Si tratta di un down E
counter presettabile sincrono di 16 bit.
CE
CRL CRM
OLL OLM
Control RegisterWord
Status Register
Bus interno
Control Logic
Timer 8254
Indice Imposta Esci
Output Latch (OL)
• OLM e OLL sono due latch di 8 bit di Output
• Contengono il valore corrente del conteggio del contatore a cui
appartengono.
CE
CRL CRM
OLL OLM
Control RegisterWord
Status Register
OUT n
GATE n CLK n
Bus interno
Control Logic
Timer 8254
Indice Imposta Esci
Counter Register
CE
CRL CRM
OLL OLM
Control RegisterWord
Status Register
OUT n
GATE n CLK n
Bus interno
Control Logic
• Normalmente sono,
entrambi, referenziati con una unica chiamata.
• Quando un nuovo valore deve essere scritto sul
contatore, il valore è caricato in CR e successivamente
trasferito in CE.
CRM e CRL (counter register) sono due registri di 8 bit.
Timer 8254
Indice Imposta Esci
Inizializzazione di un contatore
• Nel caso in cui il contatore sia stato
programmato per un solo byte, l’altro byte verrà posto a zero.
Timer 8254
Indice Imposta Esci
Control Word
• Tutte le Control Word sono scritte nella Control Word Register, la quale è
selezionata quando A1, A0 = 11. Nella Control Word viene specificato quale contatore sarà programmato.
Timer 8254
Indice Imposta Esci
Control Word Format
SC1 SC0 RW1RW0 M2 M1 M0 BCD SC-Select Counter
SC1 SC0
0 0 Seleziona il Contatore 0
0 1 Seleziona il Contatore 1
1 0 Seleziona il Contatore 2
1 1 Read-Back Command
D7 D6 D5 D4 D3 D2 D1 D0
Il Read Back Command attiva uno dei diversi modi per latchare, leggere i contatori...
Timer 8254
Indice Imposta Esci
Control Word Format
SC1 SC0 RW1RW0 M2 M1 M0 BCD RW - Read/Write
RW1RW0
0 0 Counter Latch Command
0 1 Read/Write solo il byte meno significativo
1 0 Read/Write solo il byte più significativo
1 1 Read/Write il byte meno significativo prima, poi il byte più significativo
D7 D6 D5 D4 D3 D2 D1 D0
Timer 8254
Indice Imposta Esci
Control Word Format
SC1 SC0 RW1RW0 M2 M1 M0 BCD
M - Mode M2 M1 M0
0 0 1 Modo 1
X 1 0 Modo 2
X 1 1 Modo 3
1 0 0 Modo 4
1 0 1 Modo 5
0 0 0 Modo 0
D7 D6 D5 D4 D3 D2 D1 D0
Timer 8254
Indice Imposta Esci
Control Word Format
SC1 SC0 RW1RW0 M2 M1 M0 BCD BCD
BCD
0 Contatore binario a 16 bit 1 Contatore Decimale BCD
(Binary Coded Decimal) a 4 decimali
D7 D6 D5 D4 D3 D2 D1 D0
Timer 8254
Indice Imposta Esci
Programmazione delle procedure
• La programmazione delle procedure per l’8254 è molto flessibile. Solo due convenzioni devono essere ricordate:
– Per ciascun contatore la Control Word deve essere scritta prima del suo valore di
inizializzazione.
– Il valore iniziale del contatore deve rispettare il formato specificato dalla Control Word.