Interrupciones en los ARM Cortex-M. Interrupciones EXTI para St STM32F4xx 2015/04/22 Àngel Perles armpower.blogs.upv.es Contenido ● Objetivos ● Introducción ● Interrupciones en ARM Cortex-M ● Interrupción EXTI en los St STM32F4xx interrupciones ● Ejercicio Interrupciones ARM Cortex-M armpower.blogs.upv.es 2 Objetivos ● ● ● Comprender el concepto de interrupción. Conocer las características de las interrupciones en los ARM Cortex-M Aprender a programar interrupciones básicas para el St STM32F4xx Interrupciones ARM Cortex-M armpower.blogs.upv.es 3 Introducción ● Dos aproximaciones para la “sincronización” ● consulta de estado (“polling”) e interrupción Interrupciones ARM Cortex-M armpower.blogs.upv.es 4 Introducción ● La consulta de estado o “polling” ● ● consiste en comprobar continuamente el estado de periféricos, ... ● La interrupción ● ● da lugar a la llamada “espera ocupada” ● Interrupciones ARM Cortex-M armpower.blogs.upv.es los dispositivos y ciertas excepciones generan eventos la CPU los atiende deteniendo el programa actual, ejecutando un subprograma y regresando al programa actual transparente 5 Concepto y jerga de la interrupción ● La CPU muestrea el subsistema de eventos en cada instrucción “Flag”s petición Habilitaciones Muestreo priorizado Fuente interrupción Fuente interrupción “Vectorizado” Fuente interrupción Fuente interrupción Interrupciones ARM Cortex-M armpower.blogs.upv.es 6 Concepto y jerga de la interrupción ● Si se acepta la interrupción, se paraliza programa en curso y pasa a ejecutarse el “servicio de interrupción o “manejador” CPU D isp o sitiv o A In ic io P ro g ra m a p rin c ip a l o” d za i r cto e “V A S e rv ic io p a ra A S e r v ic io d e in te r r u p c ió n (m a n e ja d o r ) R e to rn o Interrupciones ARM Cortex-M armpower.blogs.upv.es 7 Interrupciones en ARM Cortex-M ● ● ● Unidad específica Nested Vectored Interrupt Controller (NVIC) “Preemptiva”: una interrupción puede ser interrumpida por una más prioritaria Interrupciones identificadas mediante números enteros ● En CMSIS, definiciones en archivo nombre_dispositivo.h (stm32f4xx.h) Interrupciones ARM Cortex-M armpower.blogs.upv.es 8 Interrupciones en ARM Cortex-M ● Los manejadores son funciones C normales ● Siguiendo CMSIS, manejadores con nombre obligatorio ● Definidos en startup_nombre-dispositivo.s (startup-stm32f4xx.s) Interrupciones ARM Cortex-M armpower.blogs.upv.es 9 Interrupciones en ARM Cortex-M ● ● Y las (re)implementaciones se hacen en nombre-dispositivo_it.c (stm32f4xx_it.c) Ejemplo: manejador por defecto para “BusFault” (acceso a zona de memoria inexistente) Interrupciones ARM Cortex-M armpower.blogs.upv.es 10 Interrupciones en ARM Cortex-M ● Actividad: Crea una aplicación a partir de la plantilla según siguiente listado. Compila y prueba a ejecutarlo en la placa. Interrupciones ARM Cortex-M armpower.blogs.upv.es 11 Interrupciones en ARM Cortex-M ● Actividad: Manipula el manejador para que se encienda un led según el siguiente listado. Prueba de nuevo el programa ● Razona qué ha pasado. Pon solución. Interrupciones ARM Cortex-M armpower.blogs.upv.es 12 Interrupciones en ARM Cortex-M ● Para programar nuestro propio sistema de interrupciones usaremos las funciones CMSIS para el NVIC Interrupciones ARM Cortex-M armpower.blogs.upv.es 13 Interrupciones en ARM Cortex-M ● Proporcionamos un manejador ● Y seguimos el siguiente orden de acciones ● 1. Desconectar sistema de interrupciones ● 2. Programar el dispositivo fuente ● 3. Habilitar interrupción fuente ● 4. Conectar sistema de interrupciones Interrupciones ARM Cortex-M armpower.blogs.upv.es 14 Interrupciones EXTI en los STM32F4 ● Ejemplificamos ahora con un dispositivo exclusivo STM32F4xx ● External interrupt/event controller (EXTI) ● Detector de flancos digitales en pines y en otros dispositivos (RTC, Ethernet wake-up, USB OTG wake-up, PVD, etc.) ● 23 lineas en total ● Los 16 primeras son para los 16 bits de los puertos GPIO – pin PA0, PB0, PC0 ... → EXTI line 0 Interrupciones ARM Cortex-M armpower.blogs.upv.es 15 Interrupciones EXTI en los STM32F4 ● API implementada en el módulo stm32f4xx_exti.c Interrupciones ARM Cortex-M armpower.blogs.upv.es 16 Interrupciones EXTI en los STM32F4 ● Ejemplo: Pulsador azul discovery (PA0) → Puede generar EXTI Line0 Interrupciones ARM Cortex-M armpower.blogs.upv.es 17 Interrupciones EXTI en los STM32F4 Interrupciones ARM Cortex-M armpower.blogs.upv.es 18 Interrupciones EXTI en los STM32F4 Interrupciones ARM Cortex-M armpower.blogs.upv.es 19 Interrupciones EXTI en los STM32F4 ● Ahora el manejador. Debe definirse en stm32f4xx_it.c Interrupciones ARM Cortex-M armpower.blogs.upv.es 20 Ejercicio ● ● Ahora tu ... prueba el ejemplo y analízalo Modifica el ejemplo para contabilizar y mostrar el número de veces que se ha producido la interrupción ● Define una variable global volatile uint32_t contador = 0; ● En el manejador la incrementas ● En el programa principal, la vas imprimiendo cada cierto tiempo ¿volatile? ¿Sabes para qué sirve? Y, si te pones serio con las interrupciones, también tendrás que lidiar con las “condiciones de carrera”. Interrupciones ARM Cortex-M armpower.blogs.upv.es 21