C12 - Interrupts
Interrupt Concepts
Definición
- Es cuando se suspende temporalmente la ejecución del programa para ejecutar una subrutina
- Cuando acaba la interrupción se vuelve a reanudar la ejecución donde se habia quedado
- La interrupción se "dispara" (trigger) a través de una acción del hardware
Interrupt Setup ritual
- Arm/Disarm
- Arm - Permite al hardware hacer trigger a la interrupción
- Disarm - Deshabilita la función de trigger
- Cada interrupción tiene un bit de arm/disarm
- Enable NVIC (Nested Vectored Interrupt Controller)
- Es un módulo que controla todas las interrupciones. Se activa el NVIC específico para el device que usaremos
- Para deshabilitar hacemos un set al bit PRIMASK
- En C hay las funciones EnableInterrupts() y Disable Interrupts() para activar/desactivar las interrupciones
- Global enable bit I
- Este bit se activa haciendo un clear. Este bit activa y desactiva todas las interrupciones
- Si el bit es 1 muchas de las interrupciones no están permitidas, estan disable
- Priority
- No se si se refiere a la prioridad del device al thread principal o a que puede haber varias devices por interrupción y cada una tiene una prioridad
- El registro BASEPRI controla la prioridad de las interrupciones
- Trigger - Es un evento asincrono. Es el encargado de activar el device que activa la interrupción. En el registro RIS hay un bit que nos indica que ha habido un trigger.
5 condiciones que han de ser true para que una interrupción sea generada
- Device arm
- NVIC enable
- Global enable
- Prioridad de la itnerrupción actual ha de ser superior al nivel actual
- Hardware event trigger
La interrupción causa 5 eventos