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.