PERIFERICHE DI TIMING
Periferiche di timing
• I sistemi digitali sono caratterizzati dalla presenza di un elaboratore, il
processore, attorno a cui si distribuiscono altri dispositivi quali memorie e
periferiche.
• Le periferiche rappresentano una serie di componenti collegati al processore che
adempiono a compiti precisi e specifici in modo ottimale.
• Fra le periferiche di maggior interesse spiccano quelle di “timing”, che possono
presentarsi sia come dispositivi “stand alone” (“off-the-shelf”), sia come
dispositivi embedded, integrate su silicio assieme al processore (”on-chip”).
• Fra le periferiche di timing si analizzeranno:
- timers
- contatori
- altri timer (interval timers, cascaded counters, timer con prescaler, watchdog
timers).
Timers
• Sono dispositivi che misurano lo scorrere del tempo o intervalli di tempo.
• Possono essere utilizzati per generare eventi ad intervalli di tempo specifici o per
determinare l’intervallo di tempo che intercorre fra due eventi esterni, contando
gli impulsi di un segnale di clock, avente periodo noto, in ingresso.
• Esempio di timer elementare realizzato da un
contatore a 16 bit di tipo ‘up’.
• Il contatore quindi viene incrementato ad ogni
impulso di clock (Clk).
• Cnt rappresenta il numero di impulsi di Clk contati
dall’ultimo reset.
• Top indica il raggiungimento del massimo valore del contatore (va a 1 quando il
contatore viene resettato).
• I parametri caratteristici di un timer sono:
– il range, cioè il massimo intervallo di tempo che il timer è in grado di misurare;
– la risoluzione, cioè il minimo intervallo che può misurare.
Counters
• Si tratta di dispositivi che contano il numero di impulsi che si presentano in
ingresso. A differenza dei timer non contano impulsi di clock ma eventi esterni.
• Contatore asincrono binario (uscita in forma binaria) a 4 bit (conta fino a ‘1111’).
• Realizzato utilizzando 4 stadi di
flip-flop JK connessi in cascata.
• Gli ingressi J e K sono forzati a
‘1’: i flip-flop possano commutare
lo stato ogni volta che un evento
(impulso) si verifica.
• Asincrono, poiché i suoi flip-flop non ricevono l’impulso di temporizzazione
simultaneamente (limitazione in velocità).
• Contatore sincrono binario a 4 bit.
• Tale
struttura
permette
la
temporizzazione contemporanea
dei 4 flip-flop.
• Per questa regione prende il nome
di contatore sincrono.
Timer/Counter
• Timer e contatori circuitalmente sono sinonimi.
• E’ possibile concepire quindi un circuito che possa fungere da timer o da
contatore, aggiungendo ad un contatore a 16 bit un registro ad 1 bit ed un
multiplexer .
• Clk è un impulso di clock.
• Cnt_in è un impulso esterno.
• Mode
seleziona
tramite
il
multiplexer l’input del contatore.
• Tramite il registro Mode tale
dispositivo può essere programmato
dall’utente.
• Clk_counter=Clk: il dispositivo funziona da timer, e conta gli impulsi di clock;
• Clk_counter=Cnt_in: il dispositivo funziona da contatore, e conta gli impulsi su
Cnt_in.
Intel 8253 - 1
• L’Intel 8253 è un dispositivo programmabile “stand-alone”, progettato per essere
utilizzato come periferica di timing per microcomputer Intel.
• Utilizza la tecnologia nMOS.
• Package DIP a 24 pin.
• Consta di tre contatori/timer
indipendenti da 16 bit di tipo
‘down’, ciascuno con una frequenza
di conteggio superiore a 2Mhz.
• Sei modalità timer programmabili.
• Data bus buffer: contiene la logica per il
trasferimento dei dati con il processore (bus a 8 bit)
e con i registri interni (attraverso il bus interno).
• Read/Write logic: gestisce la lettura e scrittura dei
registri di conteggio (A1 e A0 indicano quale dei 3
contatori leggere o scrivere).
• Control word register: contiene la parola di
controllo (bit [D7…D0]) che il microprocessore
invia al dispositivo per la sua programmazione.
Intel 8253 - 2
• I bit [D7-D0] definiscono la parola di controllo con cui il processore programma l’8253.
• I bit D7 e D6 definiscono quale dei 4 contatori selezionare e
programmare.
• I bit D5 e D4 indicano se, nel contatore selezionato, viene letto o
caricato il byte più o meno significativo o entrambi.
• I bit D3, D2 e D1 settano la modalità di funzionamento dei contatori.
• Mode 0: il contatore viene programmato ad un valore
iniziale da cui inizia a contare fino a 0: quindi il
relativo pin OUT va a 1 fino a nuovo conteggio o
parola di controllo.
• Mode 1: come mode 1, ma il conteggio inizia al fronte
di salita del segnale GATE. Durante il conteggio il
segnale GATE è ignorato.
• Mode 2: dopo l’attivazione del conteggio, OUT resta
alto finché il contatore non raggiunge 1, e quindi va a
0 per un solo impulso di clock.
• Mode 3: come mode 2, ma OUT è alto per metà del periodo e bassa per l’altra metà.
• Mode 4: all’attivazione del conteggio OUT resta alto finché il contatore non raggiunge 0,
quindi OUT va a 0 per un solo periodo di clock dopo di che ritorna alto.
• Mode 5: come mode 4, ma il conteggio inizia quando GATE viene triggerato.
• Il bit D0 definisce se il conteggio è binario o decimale.
Microcontrollore ADuC836 - 1
• Esempio di periferiche di timing “on chip”: microcontrollore ADuC836 di
Analog Devices.
•
•
•
•
•
Basato su un core 8052 (Intel).
Tre timer/contatori a 16 bit.
Un watch-dog timer.
Un wake-up/RTC timer.
Ogni
timer/contatore
è
costituito da 2 registri ad 8 bit
(THx e TLx, x=0,1,2) e può
operare in quattro differenti
modi (codificati da 2 “timer
mode select” bit).
• In funzionamento timer, TLx
viene incrementato ad ogni
ciclo macchina.
• In funzionamento counter, vengono campionati i pin T0, T1, T2 (in base al
timer).
Microcontrollore ADuC836 - 2
• Modi del Timer 0: sono codificati dai bit 0 e 1 del registro TMOD.
• Mode 00: TH0 timer/counter ad 8 bit, TL0 prescaler (divisore del clock) a 5 bit.
•
•
•
•
•
•
•
T0: input per il timer in modalità Counter.
INT0: utilizzato per attivare il Timer.
C/T: (bit 2 di TMOD) seleziona se counter o timer.
TR0: attiva il timer/counter (control).
GATE=0: si attiva il conteggio settando TR0.
GATE=1: si attiva il conteggio se TR0=1 e P3.2=1.
TF0: bit 5 di TCON, viene settato dall’hardware
quando si ha overflow, quindi genera un interrupt.
• Mode 01: funzionamento e schema analoghi al mode 00, con la differenza che il
timer/counter è a 16 bit (TH0 e TL0 in cascata entrambi a 8 bit).
• Mode 10: TL0 è un timer/counter ad 8 bit con reload.
• Il valore di reload è programmato in TH0 e caricato in
TL0 ad ogni overflow.
• L’overflow di TL0 setta TF0 (interrupt).
• TH0 viene settato via software ed il suo contenuto non
viene modificato dall’overflow.
Microcontrollore ADuC836 - 3
• Mode 11: TL0 è un timer/counter ad 8 bit pilotato da TR0, TH0 è un timer ad 8 bit
pilotato dai bit di controllo del Timer 1, quindi da TR1.
• Con Timer 0 in mode 3 si hanno 3
timer/contatori: timer TH0, timer/counter TL0 e il
timer/contatore del Timer 1, che può funzionare
a sua volta in mode 0, 1, 2.
• Modi del Timer 1: coincidono con quelli del Timer 0. Sono codificati dai bit 4 e 5 del
registro TMOD. In mode 3, timer 1 mantiene il valore del registro, ma è disabilitato. Gli
altri bit di Timer 1 servono per pilotare Timer 0.
• Modi del Timer 2:
• Timer/counter a 16 bit con “autoreload”: un segnale esterno può attivare il reload.
• Timer/Counter a 16 bit con Capture: un segnale esterno provvede a trasferire il valore del
counter in due registri ad 8 bit.
• Baud Rate generator per UART: può essere configurato per temporizzare i segnali di Rx e/o
Tx della UART.
Altri timers - 1
• Interval timer: misura un intervallo di tempo.
• Si azzera e genera il segnale Top quando il timer raggiunge un
valore assegnato.
• Se il valore del contatore è uguale a Terminal count, si resetta il
timer generando un segnale su Top.
• Comparatore a 16 bit e registro programmabile (Terminal
count) a 16 bit.
• Realizzazione alternativa: si utilizza un NOR a 16 bit (rileva
tutti 0 sui 16 bit) in luogo del comparatore, e un contatore
down.
• Number of clock cycles=Desired time interval/Clock period.
• Cascaded counters: connettendo in cascata più
contatori si ottiene un modulo con capacità di conteggio
maggiore.
• La struttura risulta quindi nel complesso seriale, quindi
asincrona.
Altri timers - 2
• Timer con prescaler: il prescaler è un circuito divisore di clock configurabile, in
grado quindi di abbassarne opportunamente la frequenza.
• Si utilizza quando si vuole campionare un segnale
di clock ad una frequenza estremamente alta (più
alta di quella che il timer può sopportare).
• Genera un impulso di clock ogni n impulsi
ricevuti dal clock d’ingresso (“divide-by-n”).
• Il valore del registro Mode determina il valore della divisione:
- Mode=0, Freq_out=Freq_in;
- Mode=1, Freq_out=½Freq_in;
- Mode=2, Freq_out=¼Freq_in;
- Mode=3, Freq_out=1/8Freq_in.
• Esempio: il timer è a 16 bit, la frequenza di clock è di 100MHz (10ns), quindi il
timer ha risoluzione di 10ns e range di 655.35μs. Se si attiva il prescaler con
Mode=3 il timer ha risoluzione di 80ns, il range è 65535*80ns=5.24ms.
Altri timers - Watchdog timer - 1
• Watchdog timer: nella sua forma più semplice è un contatore.
• Quando tale contatore va in overflow, allora il watchdog porta alto il segnale di
RESET del sistema e quindi il controllore si resetta.
• In condizioni di funzionamento normale, il codice che il controllore elabora
azzera periodicamente il contatore del watchdog, quindi quest’ultimo non va in
overflow (“watchdog hit”).
• Quando il controllore entra in un loop infinito, o commette errori
nell’elaborazione di sequenze di istruzioni, il controllore fallisce la hit: quindi il
watchdog va in overflow resettando di conseguenza il controllore.
• Il controllore grazie al reset può quindi tornare a funzionare correttamente,
elaborando il codice.
Altri timers - Watchdog timer - 2
• Un watchdog timer può essere implementato utilizzando elementi discreti.
• Timer LMC555, che fa da oscillatore.
• Contatore 74HC161.
• Il blocco “Edge Detector” è utile affinché la linea di reset del watchdog sia
sensibile solo alle transizioni.
• Soluzione costosa e che richiede molto spazio “on-board”.
Altri timers - Watchdog timer - 3
• Una implementazione più integrata è il “dedicated supervisor chip”: composto da
- blocco monitoraggio della potenza;
- blocco di generazione del reset;
- blocco watchdog;
- batteria di ripristino per lo spegnimento e SRAM.
• Un esempio di tale chip è l’ ADM691 di Analog Devices.
• Due periodi di timeout, uno lungo e l’altro corto (la
differenza fra i due periodi è di un fattore pari a 3).
• L’iniziale timeout lungo sul watchdog garantisce al
controllore o processore di teminare le necessarie
inizializzazioni (variabili, stack, frame) e far partire le
applicazioni.
• Quando il codice è ormai in esecuzione, azzererà
periodicamente (hit), in condizioni di funzionamento
corretto, il contatore prima di un suo overflow.
• Quando ciò avviene il watchdog si accorge che il codice sta girando correttamente e
quindi passa ad un periodo di timeout corto.
• In generale i watchdog timer sono utilizzati nei sistemi embedded per garantire
affidabilità riguardo errori software e hardware.
Scarica

Periferiche di Timing