Interrupciones STM32F

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