Laboratorio 4 - Interrupciones Resumen Se implementará un Reloj de Tiempo Real utilizando un timer (temporizador hardware) de un Microcontrolador y el módulo de reloj desarrollado en el Laboratorio 2. Se utilizará la capacidad del timer de generar interrupciones. El Laboratorio debe ser realizado en equipos formados por dos o tres participantes. Si bien se recomienda el intercambio de ideas entre equipos, es obligatorio que cada equipo realice su propia versión del trabajo. Al comienzo del Laboratorio, el grupo deberá entregar el Informe Preparatorio según se detalla más adelante. Conservar una copia para su uso durante la ejecución del Laboratorio. Al final del laboratorio deberán entregar en forma escrita (a mano) un pequeño informe de aproximadamente una carilla con las conclusiones de la práctica. Objetivos Objetivos generales 1. Escribir rutinas de servicio a las interrupciones. 2. Describir el problema de datos compartidos. Objetivos particulares 1. Simulación de interrupciones con IAR: definidas previamente (ocurrencia única, periódicas) y forzadas. 2. Provocar una inconsistencia de datos mediante simulación de interrupciones. 3. Escribir rutinas de servicio a interrupciones que eviten el problema de datos compartidos, utilizando una solución básica. 4. Verificar el funcionamiento en el hardware. Material • Sistema de desarrollo ez430-RF2500 basado en un MSP430 Actividades a Realizar El sistema de desarrollo ez430-RF2500 contiene un MSP430F2274 y un Transceiver de radiofrecuencia CC2500. Este último, además de sus funciones principales que no se usarán, genera un reloj de frecuencia (26 MHz / 192) a partir de un cristal. Ese reloj está conectado al pin XIN del MSP430 y se usará como base de tiempo. Aprovechando ese reloj, un timer generará una interrupción cada aproximadamente 250 ms para actualizar un reloj de tiempo real como el desarrollado en el Laboratorio 2 (en adelante, módulo RTC). Informe previo El informe previo debe contener los siguientes items: 1. Explique conceptualmente cómo logrará obtener un "tick" de 250 ms utilizando un timer del microcontrolador. 2. Elegir un timer particular y fundamente su elección explicando que característica lo diferencia de los demás. 3. Detallar el contenido de cada registro involucrado junto con una pequeña explicación. Considerar la programación del timer y la del módulo generador de relojes internos (Basic Clock Module+). Se deberá entregar por escrito y al comienzo del laboratorio las respuestas de los tres puntos anteriores y los archivos fuente del módulo RTC con una pequeña aplicación de test que muestra que funciona correctamente. Al inicio del laboratorio se mostrará el módulo RTC funcionando (demo). Informe final Al final del laboratorio deberán entregar en forma escrita (a mano) un pequeño informe de aproximadamente una carilla donde se incluya un breve racconto de las actividades realizadas, destacando modificaciones con respecto a la planificación y los puntos que ofrecieron mayor dificultad. Actividades a realizar durante el Laboratorio Creación y simulación de la aplicación 1. Seguir los pasos de creación del proyecto especificados en el Laboratorio 3 eligiendo las herramientas adecuadas a su hardware (toolchain). 2. En la opciones generales de proyecto seleccionar el dispositivo adecuado. 3. Agregar al proyecto los archivos del modulo RTC: timer.h y timer.c y el archivo de la aplicación (contiene la función main() ). 4. Incluir el archivo de encabezado correspondiente al dispositivo (io430... .h). 5. Simular y verificar el correcto funcionamiento. Sugerencia: En el programa principal probar el módulo llamando alternadamente las funciones para incrementar el tiempo, la función que lee el tiempo (y lo guarda en una variable accesible desde main para luego imprimirlo o inspeccionar en memoria). Temporizador hardware En esta parte se modificará el módulo RTC para que el tiempo sea incrementado por un temporizador hardware. La función que incrementa el tiempo se llamará desde la rutina de servicio a la interrupción del temporizador hardware. Configuración y manejo de la interrupción 1. Escribir las rutinas de configuación del reloj y de inicialización del timer según los datos presentados en el informe previo. 2. Escribir la rutina de servicio a la interrupción del timer. ◦ La rutina de servicio a la interrupción del timer llamará a la función que incrementa el temporizador. ◦ Recordar habilitar las interrupciones en el programa principal antes de entrar al bucle infinito. ◦ Opcional: conmutar un LED para que sirva como verificación cuando se pruebe en el hardware. Simulación de la interrupción 1. Configurar la simulación de la interrupción. ◦ Seguir los pasos indicados en los manuales para configurar la simulación de la interrupción. En particular recordar incluir el archivo de descripción del dispositivo en las opciones del proyecto (Device description file en las opciones del Debugger) ◦ Se sugiere 5000 ciclos para la primera activación y para el período de repetición. 2. Simular la aplicación, verificar que la rutina de servicio es llamada y que el programa funciona correctamente. 3. Provocar una inconsistencia de datos (problema de datos compartidos) forzando una interrupción en el instante adecuado y observando como se obtiene un dato del tiempo corrupto. Depurado En esta parte se probará la aplicación en hardware, previamente habiendo simulado la misma y verificado su correcto funcionamiento. 1. Seleccionar el debugger adecuado en las opciones del proyecto (en la ficha Setup de Category: Debugger) y la conexión adecuada (TI USB-IF). IMPORTANTE: En la ficha Download, asegurarse que NO estén marcadas las opciones “Allow Erase/Write ...” y elegir UNICAMENTE la opción “Erase Main Memory”. NO marcar la opción “Erase Main Memory and Information Memory” 2. Iniciar el debugger y verificar el funcionamiento. Atención: Si se realiza un watch sobre una bandera de una interrupción al ser leída por el debugger ésta se reseteará. Referencias a Consultar • Problema de datos compartidos: An Embedded Software Primer", Chapter 4: Interrupts, Section 4.3: The Shared-Data Problem • • Hojas de datos del MSP430F2274 (http://www.ti.com/product/msp430f2274): • MSP430F22x2, MSP430F22x4 Mixed Signal Microcontroller (Rev. G) • MSP430F2274 Device Erratasheet (Rev. C) • MSP430x2xx Family User's Guide (Rev. I) Descripción del módulo de desarrollo: eZ430-RF2500 Development Tool User's Guide (Rev. E) (http://www.ti.com/tool/ez430rf2500) • "MSP430 IAR Embedded Workbench(R) IDE User Guide for Texas Instruments’ MSP430 Microcontroller Family",. [EW430_UserGuide.pdf] Part. 2. Tutorials, Simulating an interrupt Part 5. IAR C-SPY Simulator, Simulating interrupts • "Implementing a Real-Time Clock on the MSP430", Application Report, January 2001. [slaa076.pdf]