1 ¿ Que es un Timer? Corresponde a un
“contador” que está sincronizado con
algún reloj (“clock”). Se encarga de
cuantificar el tiempo. Introducción
2 Aplicaciones de tiempo real. Contador para ciertos eventos,
dependiendo de la aplicación. Algunos permiten generar
“avisos” a ciertos intervalos y/o eventos externos y
con esto poder realizar alguna tarea necesaria. Usos de los
Timers
3 Principales características destacadas en el ?C
MSP430F149: • Timer/contador de 16 bit (máximo).
• Fuente de reloj seleccionable y configurable. Se puede
pre-escalar el reloj (1, 2, 4 u 8) • Registros configurables
en captura/comparación. • Salidas configurables con
capacidad PWM. • Registro de vector de interrupciones, para
manejo de overflow y de Capt./Comp. Características de los
timers A y B
4 Diferencias entre los Timers A y B El tamaño de cuenta
del Timer B es programable a 8, 10, 12 o 16 bits. El Timer A es
fijo de 16 bits. Timer B tiene 7 registros de Cap./comp. Mientras
que Timer A sólo 3 registros. Los registros TBCCRx del
Timer B tienen buffers dobles y pueden ser agrupados.
5 Diagrama de Bloques Timer A
6 Diagrama de Bloques Timer B
7 Registros de los Timers (Gp:) TBCTL, Registro de Control del
Timer_B (Gp:) 15 (Gp:) 14 (Gp:) 13 (Gp:) 12 (Gp:) 11 (Gp:) 10
(Gp:) 9 (Gp:) 8 (Gp:) TBLGRPx (Gp:) CNTLx (Gp:) TBSSELx (Gp:) 7
(Gp:) 6 (Gp:) 5 (Gp:) 4 (Gp:) 3 (Gp:) 2 (Gp:) 1 (Gp:) 0 (Gp:) Idx
(Gp:) MCx (Gp:) TBCLR (Gp:) TBIE (Gp:) TBIFG (Gp:) TACTL,
Registro de Control del Timer_A (Gp:) 15 (Gp:) 14 (Gp:) 13 (Gp:)
12 (Gp:) 11 (Gp:) 10 (Gp:) 9 (Gp:) 8 (Gp:) TASSELx (Gp:) 7 (Gp:)
6 (Gp:) 5 (Gp:) 4 (Gp:) 3 (Gp:) 2 (Gp:) 1 (Gp:) 0 (Gp:) Idx (Gp:)
MCx (Gp:) TACLR (Gp:) TAIE (Gp:) TAIFG
8 Registros de los Timers cont. (Gp:) TBCCTLx Registro de Control
de Captura/Comparación (Gp:) 15 (Gp:) 14 (Gp:) 13 (Gp:) 12
(Gp:) 11 (Gp:) 10 (Gp:) 9 (Gp:) 8 (Gp:) CMx (Gp:) CCISx (Gp:) SCS
(Gp:) CLLDx (Gp:) CAP (Gp:) 7 (Gp:) 6 (Gp:) 5 (Gp:) 4 (Gp:) 3
(Gp:) 2 (Gp:) 1 (Gp:) 0 (Gp:) OUTMODx (Gp:) CCIE (Gp:) CCI (Gp:)
OUT (Gp:) COV (Gp:) CCIFG (Gp:) TACCTLx Registro de Control de
Captura/Comparación (Gp:) 15 (Gp:) 14 (Gp:) 13 (Gp:) 12
(Gp:) 11 (Gp:) 10 (Gp:) 9 (Gp:) 8 (Gp:) CMx (Gp:) CCISx (Gp:) SCS
(Gp:) SCCI (Gp:) CAP (Gp:) 7 (Gp:) 6 (Gp:) 5 (Gp:) 4 (Gp:) 3
(Gp:) 2 (Gp:) 1 (Gp:) 0 (Gp:) OUTMODx (Gp:) CCIE (Gp:) CCI (Gp:)
OUT (Gp:) COV (Gp:) CCIFG (Gp:) CLLDx
9 Registros de los Timers cont. (Gp:) 15 (Gp:) 14 (Gp:) 13 (Gp:)
12 (Gp:) 11 (Gp:) 10 (Gp:) 9 (Gp:) 8 (Gp:) 7 (Gp:) 6 (Gp:) 5
(Gp:) 4 (Gp:) 3 (Gp:) 2 (Gp:) 1 (Gp:) 0 (Gp:) Timer_B Registro
del Vector de Interrupción (Gp:) 0 (Gp:) 0 (Gp:) 0 (Gp:) 0
(Gp:) 0 (Gp:) 0 (Gp:) 0 (Gp:) 0 (Gp:) 0 (Gp:) 0 (Gp:) 0 (Gp:) 0
(Gp:) TBIVx (Gp:) 0 (Gp:) 15 (Gp:) 14 (Gp:) 13 (Gp:) 12 (Gp:) 11
(Gp:) 10 (Gp:) 9 (Gp:) 8 (Gp:) 7 (Gp:) 6 (Gp:) 5 (Gp:) 4 (Gp:) 3
(Gp:) 2 (Gp:) 1 (Gp:) 0 (Gp:) Timer_A Registro del Vector de
Interrupción (Gp:) 0 (Gp:) 0 (Gp:) 0 (Gp:) 0 (Gp:) 0 (Gp:)
0 (Gp:) 0 (Gp:) 0 (Gp:) 0 (Gp:) 0 (Gp:) 0 (Gp:) 0 (Gp:) TAIVx
(Gp:) 0
10 Otros Registros Registro de los valores de los Timers: TAR,
TBR Registro de Captura/Comparación: TACCRx, TBCCRx
11 Programación: Pasos Configurar las puertas que se
utilizarán (I/O o periféricos) Configurar la
señal de reloj a utilizar (ACLK, TACLK…)
Configuración del Timer (TxCTL, TxCCTLx) Modo de cuenta
(Up/down, Up, Continuo) Habilitación de interrupciones
Modo de comp/capt Modos de salida Si corresponde, programar
rutinas de servicio de interrupciones
12 Ejemplos de programación Inicio de conteo usando Timer
A. void InitTimer_A(void) { P1SEL = 0x80; P1DIR |= BIT7; //Salida
Dallas habilitada // ACLK / 8 , habilitar interrupciones. TACTL =
ID1 | ID0 | TASSEL0 | TAIE; TACTL |= MC1; // modo continuo
TACCTL2 = OUTMOD2 | OUTMOD1 | OUTMOD0 | CCIS0; // en este caso el
Timer_A está en Reset/set TACCTL2 &= ~CAP; // modo de
comparación TACCR0 = 0xAAAA; // config. Registros cap/comp
para salida TACCR2 = 0x5555; }
13 Cont. Ejemplos Ejemplo de captura usando el timer B void
InitTimer_B (void) { P4SEL |= BIT4; // se setea P4.4 como
periférico (TB4) /* Config. Timer_B*/ TBCTL = ID1 |
TBSSEL0 | TBIE; // cuenta a 16 bit /* captura en canto de bajada
señal input, interrupción habilitada */ TBCCTL4 |=
CM1 | CCIE; TBCCTL4 |= CAP; // modo de captura TBCTL |= MC1; //
inicio timer en modo continuo _EINT(); // habilitación
general int’s. }
14 Cont. Ejemplos Rutina de servicio de interrupciones #pragma
vector=TIMERB1_VECTOR __interrupt void TCPClockHandler (void) {
if (TBIV == 14) // check for timer overflow { LPM3_EXIT; } if
(TBIV == 8) // check for input signal (P4.4 = B1) { TBCCTL4
&= ~COV; LPM3_EXIT; //capture = TBCCR4; } }
15 Restricciones del uso del Timer A
16 Restricciones del uso del Timer B Botones
17 Muchas Gracias por su atención.
¿CONSULTAS?
18 El reloj puede ser configurado a través del registro
TACTL en los bits TASSELx. Seleccionándose una fuente
interna o externa. TACLK que se encuentra configurado por
defecto, es decir es configurado con los bits en TASSELx en 00.
ACLK, que corresponde al reloj auxiliar configurable con los bits
TASSELx en 01. SMCLK que es el sub-sistema del reloj maestro, se
configura con los bits TASSELx en 10. El reloj externo, que se
configura con los bits TASSELx en 11. La fuente de reloj puede
ser pasada directamente al temporizador o dividida por 2, 4
ó 8, usando los bits Selección de fuente de reloj y
divisor.
19 Tiene 4 modos de operación Se setean utilizando los
bits de MCx Modos de operación
20 Up mode El timer cuenta repetitivamente hasta el valor
indicado por el registro de comparación TACCR0 Cuando el
valor del timer alcanza el valor de TACCR0, se empieza la cuenta
nuevamente desde cero. Si el UP MODE es seleccionado cuando el
valor del timer es mayor que TACCR0, el timer inmediatamente
empieza la cuenta desde cero. El TACCR0 CCIFG flag de
interrupción es activado cuando el valor del timer alcanza
el valor de TACCR0. EL flag de interrupción TAIFG es
activado cunado el timer cuenta desde TACCR0 a cero.
21 Modo continuo En este modo el timer cuenta repetitivamente
hasta el valor de 0FFFFh y empieza nuevamente desde cero. El flag
de interrupciones es activado cuando el time cuenta desde 0FFFFh
a 0h
22 Modo Up/Down Es utilizado cuando se necesita obtener un pulso
simetrico. El timer cuenta repetitivamente hasta un valor TACCR0
y luego decrementa su valor hasta cero. La direcion de conteo se
encuentra latcheada. Lo que permite al timer se detenido y luego
encendido, contando en la misma dirección que había
quedado antes de ser detenido. Si el valor del bit TACLR es
seteado se limpia la dirección en que se estaba contando
además del valor del TAR y del TACLK divider.
23 Modo Up/Down En este modo el flag de interrupción
TACCR0 CCIFG y el flag de interrupción TAIFG están
activos solo una vez por periodo, separados por medio periodo del
timer. TACCR0 CCIFG se activa cuando el timer cuenta TACCR0-1.
TAIFG se activa cuando el timer cuenta cero.
24 Este modo se usa para registrar eventos temporales. Este modo
se selecciona cuando CAP=1 en el registro de control TACCTLx. Las
entradas de captura están conectadas a pines externos o
señales internas que se seleccionan con los bits CCISx.
Modo Captura
25 Modo Captura La captura de la señal puede ser
asincrónica con respecto del timer del reloj y causa de
una condición de carrera. Cuando la captura ocurre: El
valor del temporizador es copiado en el registro TACCRx. El flag
de interrupción CCIFG es seteado
26 Modo Comparación Este modo se usa para generar
señales de salida PWM o interrupciones en un intervalo
especifico. Este modo se selecciona cuando CAP=0 en el registro
de control TACCTLx.
27 Modo Comparación Cuando el TAR cuenta hasta el valor
almacenado en TACCRx: La interrupción del flag CCIFG es
seteada. La señal interna EQUx = 1. EQUx afecta la salida
según el modo de salida. La señal de entrada CCI es
latcheada en SCCI.
28 Si TBR cuenta al valor de un TBCLx: Se activa el flag de
interrupción CCFIG Señal interna EQUx=1 EQUx afecta
la salida, de acuerdo al modo de salida Latch de
comparación TBCLx TBCLx mantiene el valor a comparar con
el valor del Timer. (TBCLx es “buffered “ por TBCCRx)
El dato a comparar se escribe en cada TBCCRx y se transfiere
automáticamente a TBCLx Cuando se activa la
comparación, TBCCRx finaliza el control de usuario, i.e.,
no existe acceso directo a TBCLx Modo Comparación B
29 Eventos de Carga El momento de la transferencia lo selecciona
el usuario con los bits de CLLDx El nuevo dato se transfiere de
TBCCRx a TBCLx CLLDx Descripción 00 inmediatamente al
escribirse en TBCCRx 01 cuando TBR cuenta a 0 10 modo up y
continuo: Cuando TBR cuenta a 0 modo up down: Cuando TBR cuenta
al valor antiguo de TBCLx o a 0 11 Cuando TBR cuenta al valor
antiguo de TBCLx
30 Agrupación de Latch de comparación Pueden
agruparse juntos para actualizaciones simultaneas de los bits de
TBCLGRPx Condiciones para la carga grupal: Debe ocurrir el evento
de carga Todos los registros TBCCRx del grupo deben actualizarse,
incluso cuando cuando el valor nuevo es igual al antiguo
31 El evento de carga del grupo es definido por los bits CLLDx
del menor de los latch de comparación TBCCRx del grupo,
con excepción de TBCLGRP =3 Si CLLDx = 0 del TBCCRx que
controla, los latch de comparación se actualizan
automáticamente cuando su TBCCRx correspondiente es
escrito, i.e., No están agrupados. Agrupación de
Latch de comparación
32 Modos de Salida Cada bloque de captura/comparación
contiene una unidad de salida para generar distintas
señales. Cada señal de salida tiene ocho modos de
operación. Estos modos se configuran con el registro de
control TACCTLx con los bits OUTMODx.
33 Ejemplos Unidad de Salida Modo UP Modo continuo Modo Up/Down