Sistemas Embebidos para Tiempo Real 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 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, cada grupo deberá realizar una demostración de las Tareas Previas realizadas según se detalla más adelante. Además, algunos alumnos contestarán un cuestionario relacionado con la preparación de la páctica. La demostración y los cuestionarios se calificarán. Objetivos Objetivos generales 1. Escribir rutinas de atención a las interrupciones y explicar el funcionamiento de las interrupciones en los microcontroladores 2. Describir el problema de datos compartidos. 3. Adquirir buenas prácticas de codificación y documentación del código. 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. 5. Documentar correctamente todo el código utilizando Doxygen. Material Hardware • Plataforma de desarrollo Launchpad MSP-EXP430G2 basado en un MSP430G2553. 1/4 Evaluación Los docentes evaluarán el trabajo de cada estudiante durante todo el laboratorio, dando asistencia cuando sea requerida al igual que sugerencias y comentarios conceptuales de la actividad del estudiante. Cada estudiante será evaluado considerando: i) si las tareas previas se realizaron correctamente, ii) si todas las tareas indicadas en este laboratorio se completan en tiempo, iii) las respuestas al cuestionario, iv) si las propuestas de solución para las tareas indicadas a lo largo de la letra son realizadas correctamente y v) si los comentarios introducidos en los programas siguen las recomendaciones provistas en los ejemplos que se encuentra en la web del curso. Actividades a Realizar El sistema de desarrollo Launchpad MSP-EXP430G2 contiene un MSP430G2553. Además la placa de desarrollo tiene soldado un cristal externo de 32768 Hz conectado a los pines XIN y XOUT del MCU, el cual se usará como base de tiempo. Se programará y probará una aplicación en la que, usando como base ese reloj, el TIMER_A genere una interrupción cada 250 ms para actualizar un reloj de tiempo real como el desarrollado en el Laboratorio 2 (en adelante, módulo RTC). Tareas previas Al llegar al laboratorio se deberá entregar de forma impresa: 1. Código comentado utilizando doxygen (siguendo el ejemplo de comentarios que se encuentra en la web del curso) del módulo RTC realizado en el laboratorio 2. 2. Código del módulo timer conteniendo 1. Rutina de inicialización del timer, detallando el contenido de cada registro involucrado. Considerar la programación del timer y la del módulo generador de relojes internos (Basic Clock Module+). Los comentarios deben explicar claramente cómo se obtiene el "tick" de 250 ms utilizando el Timer A del microcontrolador. 2. Aplicación de prueba del timer en la que una rutina de atención a la interrupción (ISR) conmute un LED en cada interrupción. Al inicio del laboratorio el grupo demostrará: 1. El módulo RTC del laboratorio 2 con una pequeña aplicación de test que muestre que funciona correctamente. 2. Aplicación de prueba del timer que muestre el funcionamiento de la ISR conmutando un LED en cada interrupción (resultando en 2 destellos por segundo). Sugerencia: En el programa principal probar el módulo llamando alternadamente (en un bucle infinito) la función para incrementar el tiempo y la función que lee el tiempo (y lo guarda en una variable accesible desde main para luego inspeccionarla en memoria). 2/4 Actividades a realizar durante el Laboratorio Temporizador hardware En esta parte se modificará el código de prueba del 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 atención a la interrupción del temporizador hardware. Configuración y manejo de la interrupción 1. Utilizar las rutinas de configuración del reloj y de inicialización del timer presentadas en las tareas previas. 2. Escribir la rutina de atención a la interrupción del timer. La misma llamará a la función que incrementa el temporizador. Recordar habilitar las interrupciones en el programa principal antes de entrar al bucle infinito. Para verificar el correcto funcionamiento, conmutar un LED cuando se pruebe en el hardware. Simulación de la interrupción 1. Seguir los pasos indicados en el manual “IAR Embedded Workbench® IDE for MSP430 - User Guide” (Part 5 - Simulating interrupts) 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 utilizar 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 atención 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 cómo se obtiene un dato de tiempo corrupto. 4. Modificar el código para asegurar que no se produce el problema de datos compartidos. Depurado En esta parte se probará la aplicación en hardware, previamente habiendo simulado la misma y verificado su correcto funcionamiento. Recordar 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” Nota: Si se realiza un watch sobre una bandera de una interrupción, al ser leída por el debugger se reseteará. 3/4 Lecturas recomendadas • Problema de datos compartidos: “An Embedded Software Primer", Chapter 4: Interrupts, Section 4.3: The Shared-Data Problem • • Hojas de datos del MSP430G2553 (http://www.ti.com/product/msp430g2553): • MSP430G2x53, MSP430G2x13 Mixed Signal Microcontroller (Rev. J) • MSP430G2553 Device Erratasheet (Rev. D) • MSP430x2xx Family User's Guide (Rev. J) Descripción del módulo de desarrollo: • • MSP-EXP430G2 LaunchPad Evaluation Kit User's Guide (Rev. E) (http://www.ti.com/lit/pdf/slau318) "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] • “MSP430 Microcontroller Basics”, Chapter 8: Timers, John Davies, 2008. 4/4