SEMINARIO DE COMPUTADORES I DISE~ NO CON MICROCONTROLADORES MSP430: Módulo Wachtdog Timer Nombres: Daniel Arancibia Carocca Alex Garay Herrera Juan Carlos Jarur Mu~ noz Bruno Mundaca Moraga Rodrigo Vizcarra Acevedo Profesor: Leopoldo Silva Bijit Índice 1. Introducción 3 2. Modos de operación del Watchdog Timer 4 3. Registros 3.1. Registros del módulo básico de reloj . . . . . . . . . . . . . . . 3.2. Registro de Control del Watchdog Timer . . . . . . . . . . . . 3.3. Configuraciones predeterminadas . . . . . . . . . . . . . . . . 5 5 7 7 2 1. Introducción El watchdog timer es un temporizador de 16 bit que puede ser usado como watchdog o por intervalos de tiempo. La principal función en el modo watchdog es reiniciar el procesador después de que ocurra una falla o problema de software contando con un intervalo de tiempo por defecto de 32 [ms] con la posibilidad de detener su acción o cambiar este intervalo a uno determinado por el programador. Si este watchdog timer no es empleado en ninguna subrutina puede ser configurado como un temporizador de intervalos y puede generar interrupciones en los intervalos de tiempo seleccionados. Las siguientes son las caracterı́sticas del modulo watchdog timer: Ocho intervalos de tiempos seleccionables por software Modo WatchDog Modo intervalo Acceso al registro de control WDT con contraseña protegida Pin de control de la función RST/NMI Fuente de reloj seleccionable Puede ser detenido para conservar la potencia 3 2. Modos de operación del Watchdog Timer El timer Watchdog del microcontrolador MSP430 de Texas Instruments presenta dos posibles modos de operación. Modo Watchdog En este modo de operación el WDT espera un intervalo de tiempo determinado por software, o en el caso de no haberlo determinado esperará un intervalo por defecto, en el cual éste espera por una señal de stop (cambio del valor de un registro) con la cual comenzará a contar un nuevo intervalo y ası́ sucesivamente. En caso de no recibir señal de stop el WDT reiniciará el procesador al finalizar el intervalo de tiempo con lo cual se dará una condición de RESET en el microcontrolador. Modo Timer El WDT también es posible utilizarlo como temporizador, es decir, el WDT ya no podrá resetear el procesador y cumplirá sólo una función de contador de intervalos de tiempo tal como un Timer normal lo que permite utilizarlo como generador de interrupciones entre otras cosas. 4 3. Registros Para el caso que nos interesa, debemos determinar y configurar otros módulos adicionales a los que propiamente configurar parámetros del Watchdog Timer. Las caracterı́sticas y funcionamiento de estos módulos se estudian con detenimiento, en especial los siguientes registros, los cuales permiten manejar de forma arbitraria los parámetros que configuran estos módulos. Registros del módulo básico de reloj. La configuración de estos módulos consiste en asignar a cada uno de los tres módulos, una fuente de reloj determinada que satisfaga los requerimientos de consumo y aplicación que se requiera. Registros de control del watchdog timer. La configuración de este módulo permite configurar el WDT a cualquiera de los modos disponibles. 3.1. Registros del módulo básico de reloj A través de este registro se seleccionan las fuentes de los módulos de reloj del microcontrolador y se manipulan las frecuencias de dichas fuentes. Las fuentes de reloj son las siguientes: Oscilador DCOCLK1 RC interno Caracterı́stica Código C Frecuencia controlada DCOCTL |= DCO0+DCO1 digitalmente BCSCTL1 |= RSEL2 Configuración por defecto f=800[kHz] LFXT1CLK Alta/baja frecuencia BCSCTL1 |= XTS (modo HF) Cristal interno configurable Ausencia código determina modo LF XT2CLK Configurable BCSCTL1|=XT2OFF Cristal externo digitalmente Ausencia código determina modo ON 1 El DCOCLK puede oscilar dentro de un rango entre 80[kHz] y los 8[MHz]. Este rango se encuentra parametrizado por 64 niveles determinables por los bits DCOx(3) del registro DCOCTLx y los bits RSELx(3) del registro BCSCTL1 (ver figura 1). Además, los bits MODx(5) del registro DCOCTL permiten realizar un ajuste fino del nivel de frecuencia seleccionado. En el caso expuesto, esta determinado el código C necesario para configurar el oscilador por defecto. 5 Figura 1: Curva del rango de frecuencia del oscilador DCOCLK Existen tres módulos básicos de reloj, los cuales pueden ser configurados a través de los registros DCOCTL, BCSCTL1 y BCSCTL2. La tabla que se expone a continuación pretende simplificar la búsqueda de los códigos en lenguaje que permiten configurar los módulos de reloj. Módulo ACLK Reloj auxiliar Fuente Código C LFXT1CLK Por defecto MCLK Reloj maestro DCOCLK BCSCTL2 |= SELM0 2 XT2CLK BCSCTL2 |= SELM2 LFXT1CLK BCSCTL2 |= SELM3 SMCLK DCOCLK Reloj subsistema XT2CLK2 BCSCTL2 |= SELS0 BCSCTL2 |= SELS1 6 Div 1 2 4 8 1 2 4 8 1 2 4 8 Código C BCSCTL1 |= BCSCTL1 |= BCSCTL1 |= BCSCTL1 |= BCSCTL2 |= BCSCTL2 |= BCSCTL2 |= BCSCTL2 |= BCSCTL2 |= BCSCTL2 |= BCSCTL2 |= BCSCTL2 |= DIVA0 DIVA1 DIVA2 DIVA3 DIVM0 DIVM1 DIVM2 DIVM3 DIVS0 DIVS1 DIVS2 DIVS3 2 El oscilador XT2CLK es una fuente externa, es decir, su utilización es determinada por lo requerimientos de la aplicación diseñada. Por lo tanto, en aquellos casos en que se prescindiera de ella, el microcontrolador determina a LFXT1CLK como oscilador por defecto. 3.2. Registro de Control del Watchdog Timer Es un registro de 16 bits, que configura los modos de funcionamiento del Watchdog Timer. Inicialmente esta configurado con un intervalo de 32[ms] usando el DCOCLK como fuente de reloj, teniendo que ser configurado antes de que el intervalo expire. Bit 0 1 2 3 4 5 6 7 8 .. . 15 Nombre WDTISx Función Selecciona el intervalo ??? WDTSSEL WDTCNTCL WDTTMSEL WDTNMI WDTNMIES WDTHOLD WDTPWx Selecciona el reloj del WDT Limpia el contador Selecciona el modo del WDT Función para el pin NMI/RST Selecciona el canto para NMI3 Bloqueo del WDT Establece la contraseña 1 reloj/512 reloj/64 ACLK 0 reloj/32768 reloj/8192 SMCLK Temporizador Modo NMI Bajada Desactivada Watchdog Modo RST Subida Activada Lectura: 0x69 Escritura: 0x5A 3 Las interrupciones no enmascarables (NMI) no son manejadas por el bit de habilitación general de interrupciones. Puden ser producidas por un canto en el pin RST/NMI, una falla en el oscilador o por una violación de acceso a la memoria FLASH. 3.3. Configuraciones predeterminadas Las siguientes lı́neas de código parametrizan y simplifican de alguna manera la configuración del modulo watchdog timer. Es necesario recordar que estos parámetros son válidos para la configuración por defecto del módulo básico de reloj (explicado en detalle con anterioridad), vale decir, pueden ser 7 usados para configurar el timer solo si el reloj de sistema esta configurado a 8 [MHz]. #define #define #define #define WDT WDT WDT WDT MDLY MDLY MDLY MDLY 32 WDTPW+WDTTMSEL+WDTCNTCL /* 32ms interval (default) */ 8 WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0 /* 8ms 0 5 WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1) /* 0.5ms 0 064 WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1+WDTIS0 0.064ms*/ /* WDT is clocked by fACLK (assumed 32KHz) */ #define #define #define #define WDT WDT WDT WDT ADLY ADLY ADLY ADLY 1000 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL) /* 1000ms */ 250 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS0) /* 250ms "*/ 16 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1) /* 16ms "*/ 1 9 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0) /* 1.9ms 8