Tutorials - PIC18 by Data Sheet

 
 

pag.135 - TMR3


TIMER3

Il Timer3 (TMR3) ha un funzionamento analogo al Timer1, con cui condivide molti aspetti. Le caratteristiche essenziali sono :

  • possibilità di selezionare da software operazioni di scrittura/lettura dei registri a 8 oppure a 16 bit
  • selezione del clock interno o esterno
  • prescaler programmabile  dedicato
  • un unico registro di controllo
  • reset in seguito ad evento trigger CCP

Inoltre , come per tutte le sorgenti di interrupt della serie PIC18, anche Timer3 può essere impostato per generare richieste di interrupt a due livelli di priorità.

Il registro T3CON è la via per controllare  le funzioni del Timer1, compreso il prescaler ; si presenta in modo molto simile a  T1CON :

T3CON bit RD16 T3CCP2 T3CKPS1 T3CKPS0 T3CCP1 !T3SYNC TMR3CS TMR3ON
funzione R/W R/W R/W R/W R/W R/W R/W R/W
default 0 0 0 0 0 0 0 0
  • bit 7     RD16 : operazione 16 bit
                 1 = Timer 1 letto/scritto in una unica operazione
                 0 = Timer 1 letto/scritto in due operazioni
  • bit 6,3   T3CCP2:1 : abilitazione CCP di Timer 1 e Timer 3
                 1x = Timer 3 comanda i moduli CCP
                 01 = Timer 3 comanda CCP2
                          Timer 1 comanda CCP1
                 00 = Timer 1 comanda i moduli CCP
  • bit 5-4  T3CKPS1:0 : prescaler
                 11 =  1 : 8
                 10 =  1 : 4
                 01 =  1 : 2
                 00 =  1 : 1
  • bit 2     !T3SYNC : controllo del sincronismo esterno
                 1 =  abilitato
                 0 =  disabilitato
  • bit 2    !T1SYBC  :  selezione sincronizzazione
                (Il bit non è utilizzabile se il clock arriva da Timer1 o Timer3)
                 con TMR3CS = 1
                 1 =  clock esterno non sincronizzato
                 0 =  clock esterno sincronizzato
                 con  TMR3CS = 0
                  bit disabilitato
  • bit 1      TMR3CS : selezione sorgente clock
                 1 =
    clock esterno dall' oscillatore di Timer1 o da T13CKI
                 0 =
    clock interno (Fosc/4)
  • bit 6     TMR3ON  : abilitazione Timer 3
                 1 =
    timer abilitato
                 0 =
    timer disabilitato
        

I valori di default al POR sono indicati nella tabella.

Inoltre, per il controllo dell' interrupt, sono disponibili i soliti tre bit IE/IF/IP, secondo la tabella seguente :

Registro  Bit 7  Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit Bit 0
PIR2 - - - - -   TMR3IF -
PIE2 - - - - -   TMR3IE -
IPR2 - - -  - -   TMR3IP -

La presenza dei bit di controllo nei registri PIR/PIE/IPIR indica che si tratta di un interrupt periferico, che necessita per la sua abilitazione dei entrambi gli switch globali GIE/PEIE.


I registri di conteggio di TIMER3

Il conteggio viene immagazzinato in una coppia di registri,  TMR3H:L. Sono programmabili due modi per leggere e scrivere questi registri.

I diagrammi seguenti schematizzano il funzionamento di Timer0 nel funzionamento con due istruzioni a 8 bit per caricare i registri di conteggio :

e in quello con una unica operazione a 16 bit :

Il primo modo, default al POR, prevede che  TMR3H. e TMR3L. siano due registri separati il cui caricamento o lettura richiede singole operazioni a 8 bit. Questo rende Timer1 analogo a quello della famiglia PIC16F.

Nel secondo modo operativo, ovvero portando il bit RD16 (T3CON<7>) a 1, l' indirizzo del registro TMR3H è mappato in buffer. Una lettura di TMR3L carica il contenuto del counter alto nel buffer in modo da evitare problemi di lettura con il timer in funzione. Analogamente, la scrittura di TMR3H avviene nel buffer, che sarà trasferito al registro di conteggio al momento della scrittura di TMR3L. Questo consente di caricare il contatore a 16 bit con una unica operazione, evitando gli errori che si avrebbero con una operazione in più fasi e il timer in funzione.
Da notare che il contenuto di conteggio del prescaler viene azzerato alla scrittura di TMR3L, iniziando un ciclo di lavoro interamente nuovo.
La modalità a 16 bit va impiegata in quelle situazioni in cui è critica la precisione nel ri aggiornamento del contenuto dei registri di conteggio. 

In ogni caso il contatore viene incrementato ad ogni transizione del clock che può essere filtrata dal prescaler. 
La scrittura di TMR3H non azzera il contenuto di conteggio del prescaler, mentre questo è attuato alla scrittura di TMR3L.

Timer3 non include un proprio oscillatore, ma può sfruttare le seguenti sorgenti di clock :
- il clock interno (Fosc/4)
- il clock generato dall' oscillatore di Timer1 (incremento sul fronte di salita)

Per utilizzare come clock di Timer3 l' oscillatore di Timer1, questo deve essere abilitato settando T1OSCEN (T1CON<3>) e deve essere settato anche TMR3CS (T3CON<1>).


L' interrupt di Timer3

La coppia di registri TMR3H:L incrementa da 0000h a FFFFh e va in overflow al clock successivo. L' interrupt è maschjerato da TMR3IE (PIE2<1>) e indicato dal flag TMR3IF (PIR2<1>).

La gestione interrupt del Timer3 richiede :

  • l' abilitazione del bit TMR3IE (PIE2<1>) , che va posto a 1 se si desidera attivare l' interrupt 
  • Il bit di selezione della priorità dell' interrupt è TMR3IP (IPIR2<1>) . E' a 1 se si desidera l' alta priorità, altrimenti va a posto a 0. L' abilitazione del modo interrupt con priorità richiede di aver settato il bit IPEN (RCON<7>)  ; altrimenti viene impiegato un sistema di interrupt senza livelli di priorità e l' impostazione di TMR3IP è indifferente.
  • Il flag di identificazione è TMR3IF (PIR2<1>) che va a 1 a seguito all' overflow del counter e va cancellato da software.

L' interrupt di Timer1 fa riferimento al registro PIR e quindi è considerata una interruzione periferica  e quindi sono dipendenti per l' abilitazione non solo da GIE, ma anche da PEIE.


Uso di Timer3 in CCP

Se almeno uno dei moduli CCP è programmato per utilizzare Timer3 e generare uno Special Event Trigger in modo Compare (CCP1M3:0 o CCP2M3:0 = 1011), il segnale resetta i registri del Timer3. Contemporaneamente viene fatta partire una conversione A/D se il modulo relativo è stato abilitato.

Si può avere una configurazione come timer o come contatore sincrono; usando quest' ultimo modo, i registri CCPR2H:L conterranno il periodo relativo a Timer3.

Nel funzionamento in modo asincrono, l' operazione di reset pò non funzionare.

Nel caso in cui l' operazione di scrittura dei registri del Timer3 coincida con lo Special Event Trigger del modulo CCP, la scrittura ha la precedenza.
Va notato, inoltre, che lo Special Event Trigger dal modulo CCP2 non attiva il flag di interrupt TMR3IF.

 


 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 28/09/11.