UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Diseño con Microcontroladores TIMER_A El Timer_A es un timer/contador de 16 bit con tres registros de captura/comparación. El Timer_A soporta múltiples capturas/comparaciones y temporización de intervalos de tiempo; también genera salidas PWM. El Timer_A además tiene la capacidad de generar interrupciones. Las interrupciones pueden ser generadas por un contador en condiciones de desborde y desde cada registro de captura/comparación. El Timer_A incluye: • • • • • • Timer/contador asincrónico de 16 bit con cuatro modos de operación. Fuente de reloj seleccionable y configurable. Tres registros configurables en captura/comparación. Salidas configurables con capacidad PWM. Entradas asincrónicas y salidas con latch. Registro del vector de interrupciones para decodificación rápida de todas las interrupciones del Timer_A. Figura 1. Diagrama de bloques del Timer_A Paola Andrea Rojas Contreras Se habilita la captura estando seteado el bit CAP del registro de control TACCTLx. Si el bit está en cero corresponde al modo comparación 16-01-2004 9 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Diseño con Microcontroladores OPERACIÓN: La estructura y operación del Timer_A se encuentran a continuación: • El Timer_A puede leer y escribir vía software, además puede generar interrupciones, al igual que watchdog timer. El registro que contiene esta información es el TAR. • El reloj puede ser configurado a través del registro TACTL en los bits TASSELx. La selección del reloj podrá ser interno o externo. Las opciones que se tienen son las siguientes: o TACLK que se encuentra configurado por defecto, es decir es configurado con los bits en TASSELx en 00. o ACLK, que corresponde al reloj auxiliar configurable con los bits TASSELx en 01. o SMCLK que es el sub-sistema del reloj maestro, se configura con los bits TASSELx en 10. o Finalmente, 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 IDx. Los modos de operación del temporizador son cuatro. Este se selecciona con los bits MCx. MCx 00 01 Modo Detenido Incrementando 10 Continuo 11 Subida/Bajada Descripción El timer está detenido El timer cuenta repetitivamente desde cero hasta el valor de TACCR0. El timer cuenta repetitivamente desde cero hasta 0FFFFh. El timer cuenta repetitivamente desde cero hasta el valor de TACCR0 y regresa hasta cero. Figura 2. Modos de operación Timer A Más detalles de los modos de configuración se pueden encontrar en el manual de microcontroladores de la familia MSP430x1xx. MODO CAPTURA Este modo se selecciona con el bit CAP = 1, del registro de control TACCTLx. El modo captura es usado para registrar eventos temporales. Puede ser usado para cálculos de velocidad o mediciones de tiempo. Las entradas de captura CCIxA y CCIxB están Paola Andrea Rojas Contreras 16-01-2004 9 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Diseño con Microcontroladores conectadas a pines externos o señales internas y son seleccionadas con los bits CCISx. Una captura ocurre en el canto seleccionado de la señal de entrada. Si una captura ocurre: • El valor del temporizador es copiado en el registro TACCRx • El flag de interrupción CCIFG es seteado Figura 3. Captura de la señal MODO COMPARACIÓN La comparación se selecciona cuando el bit CAP está en cero. El modo de comparación se usa para generar señales de salida PWM o interrupciones en un intervalo específico. Cuando el TAR cuenta hasta el valor almacenado en el registro 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 UNIDADES DE SALIDA Cada bloque de captura/comparación contiene una unidad de salida, que es usada para generar distintas señales, por ejemplo del tipo PWM. Cada señal de salida tiene ocho modos de operación configurables en el registro TACCTLx. Estos son los que muestran a continuación: OUTMODx 000 MODO Output 001 Set Paola Andrea Rojas Contreras DESCRIPCIÓN La señal de salida OUTx está definida por el bit OUTx. La señal OUTx se actualiza inmediatamente cuando OUTx es actualizado. La salida está seteada cuando la cuenta del temporizador llega al valor TACCRx. Se mantiene seteado hasta un reset del timer, o hasta que otro modo de salida más sea seleccionado y afecte la salida. 16-01-2004 9 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Diseño con Microcontroladores 010 Toggle/Reset 011 Set/Reset 100 Toggle 101 Reset 110 Toggle/Set 111 Reset/Set La salida cambia su estado (de cero a uno si estaba en cero, y de uno a cero si estaba en uno), cuando la cuenta del timer llega al valor de TACCRx. Es reseteada cuando la cuenta del timer llega al valor de TACCR0. La salida es seteada cuando el temporizador cuenta hasta el valor TACCRx. Esta será reseteada cuando el temporizador cuente hasta el valor TACCR0. La salida cambia su estado (de cero a uno si estaba en cero, y de uno a cero si estaba en uno), cuando la cuenta del timer llega al valor de TACCRx. La salida periódica es del doble del período del temporizador. La salida es reseteada cuando el temporizador cuenta hasta el valor TACCRx. Se mantiene reseteada hasta que otro modo de salida más sea seleccionado y afecte la salida La salida cambia su estado (de cero a uno si estaba en cero, y de uno a cero si estaba en uno), cuando la cuenta del timer llega al valor de TACCRx. Es seteada cuando la cuenta del temporizador llega al valor TACCR0. La salida es reseteada cuando el temporizador cuenta hasta el valor TACCRx. Es seteada cuando el valor del temporizador llega al valor TACCR0. Figura 4. Modos de operación de la salida Registros del Timer_A Figura 5. Registros del Timer_A Algunos de los registros del Timer_A se muestran a continuación: TACTL, Registro de Control del Timer_A Paola Andrea Rojas Contreras 16-01-2004 9 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Diseño con Microcontroladores Figura 6. Registro TACTL del Timer_A TAR, Registro del Timer_A Figura 7. Registro TAR del Timer_A TACCTLx, Registro de Control Captura/Compara Figura 8. Registro TACCTLx del Timer_A TAIV, Registro de interrupción del Timer_A Figura 9. Registro TAIV del Timer_A Paola Andrea Rojas Contreras 16-01-2004 9 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Diseño con Microcontroladores Ejemplos. Los siguientes ejemplos son algunas aplicaciones de la utilización del Timer_A. Se ha empleado el modo de tiempo continuo en ambos ejemplos: EJEMPLO 1. Ejemplo básico del uso del Timer_A, en el cual se emplea el modo continuo con la unidad de salida Reset/Set: #include <msp430x14x.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include "MSP430lib.c" void InitTimer_A(void); void main (void) { InitOsc(); InitPorts(); InitLCD(); InitTimer_A(); } void InitTimer_A(void) { P1SEL = 0x80; P1DIR |= BIT7; // inicialización osciladores // inicialización puertos // inicialización LCD // inicialización Timer A //enable Dallas output BCSCTL1 &= ~DIVA0; // ACLK = XT1 / 4 = 2 MHz BCSCTL1 |= DIVA1; TACTL = ID1 | ID0 | TASSEL0 | TAIE; // stop timer, use ACLK / 8 = 250 kHz, gen. int. TACTL |= MC1; // start timer in continuous up-mode //_EINT(); // enable interrupts TACCTL2 = OUTMOD2 | OUTMOD1 | OUTMOD0 | CCIS0; // en este caso el Timer_A está en Reset/set TACCTL2 &= ~CAP; //está en modo de comparación TACCR0 = 0xAAAA; TACCR2 = 0x5555; } La figura 3 muestra la forma de onda que se genera con el uso del Timer_A, en modo continuo. Ella se puede contrastar con las formas de ondas que se generan en modo continuo en forma teórica, la salida es reseteada cuando el temporizador cuenta hasta el valor TACCRx. Es seteada cuando el valor del temporizador llega al valor TACCR0 (figura 4): Paola Andrea Rojas Contreras 16-01-2004 9 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Diseño con Microcontroladores Figura 10. Forma de onda generada por el ejemplo 1. Figura 11. Ejemplo de las señales de salida en el modo continuo. Paola Andrea Rojas Contreras 16-01-2004 9 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Diseño con Microcontroladores EJEMPLO 2. En el siguiente ejemplo se muestra el uso de las interrupciones junto con el uso de la pantalla de cristal líquido (LCD). En cada interrupción se envía un carácter a la LCD: #include <msp430x14x.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include "MSP430lib.c" void InitTimer_A(void); int ii, jj; char Message [] = "Uso del Timer_A"; void main (void) { ii = 0; jj = 0; InitOsc(); InitPorts(); InitLCD(); InitTimer_A(); } void InitTimer_A(void) { P1SEL = 0x80; P1DIR |= BIT7; // inicialización osciladores // inicialización puertos // inicialización LCD // inicialización Timer A //enable Dallas output BCSCTL1 &= ~DIVA0; // ACLK = XT1 / 4 = 2 MHz BCSCTL1 |= DIVA1; TACTL = ID1 | ID0 | TASSEL0 | TAIE; // stop timer, use ACLK / 8 = 250 kHz, gen. int. TACTL |= MC1; // start timer in continuous up-mode _EINT(); // enable interrupts TACCTL2 = OUTMOD2 | CCIS0; // en este caso el Timer_A está en Toggle TACCTL2 &= ~CAP; TACCR0 = 0xAAAA; TACCR2 = 0x5555; } #pragma vector=TIMERA1_VECTOR __interrupt void TCPClockHandler (void) { if (TAIV == 10) // check for timer overflow, reset int.-flag { if (ii++ == 4) { Paola Andrea Rojas Contreras 16-01-2004 9 UNIVERSIDAD TECNICA FEDERICO SANTA MARIA DEPARTAMENTO DE ELECTRONICA Diseño con Microcontroladores //STATUS_LED_ON; P2OUT ^= BIT1; if (jj < sizeof (Message)-1) { SEND_CHAR(Message[jj++]); if (jj == 15) SEND_CMD (DD_RAM_ADDR2); if (jj == 31) { SEND_CMD(CLR_DISP); SEND_CMD(CUR_HOME); } } else { jj = 0; SEND_CMD(CLR_DISP); SEND_CMD(CUR_HOME); } ii = 0; } } } Figura 12. Forma de onda generada por el ejemplo 2. Paola Andrea Rojas Contreras 16-01-2004 9