Page Personnelle de Vincent Kerhoas
Vincent Kerhoas
Enseignant du Supérieur
Professeur Agrégé
Page Personnelle de Vincent Kerhoas

Les Interruptions

Back                  << Index >>


DOCUMENTATION


Le problème du livreur

Gestion par Scrutation

J’attends un colis ; la sonnette est cassée. Je me lève donc régulièrement pour voir si le livreur arrive.
Nous appellerons cela de la scrutation, à savoir que dans un programme je prévois d’aller consulter régulièrement l’état d’un registre.

Gestion par Interruption

J’attends un colis ; la sonnette est réparée.
Si le livreur est présent, il sonne ; il interrompt donc ma lecture.
Je traite cette interruption en allant ouvrir la porte.
Au passage j’ai pris soin de marquer ma page pour reprendre ma lecture là où je l’avais laissée.


Les différentes catégories d’exceptions

Une Exception est un événement qui interrompt un programme.
On distingue les Exceptions :

Par la suite nous allons nous intéresser uniquement aux interruption Matérielles liées à un périphérique.


Le contrôleur d’Interruptions ( NVIC = Nested Vectored Interrupt Controler )

Problématique

Tous les périphériques sont susceptible de déclencher une interruption.
Le processeur est interrompu dès lors que la ligne IRQ est active.
Pour connaître l’auteur de l’interruption, le processeur devrait interroger chaque périphérique ( via son registre d’état ).

Pour éviter cette situation, il existe un composant supplémentaire faisant le lien entre les demandes d’interruption des périphériques et la ligne IRQ du processeur.
Il s’agit du Contrôleur d’Interruptions ( NVIC ).
Comme chaque périphérique est relié à une entrée numérotée du NVIC, ce dernier connait le périphérique, il transmet donc directement au processeur le numéro correspondant.

Gestion des priorités par le NVIC

Etant donné que plusieurs périphériques peuvent demander une interruption à un instant t, le NVIC permet de définir des niveaux de priorité en fonction des sources d’interruption.


Scénario d’une interruption

La table des vecteurs se trouve dans le fichier startup_stm32f411xe.s

Lors d’une interruption, le PC charge la routine d’interruption IRQHandler , en fonction du numéro d’interruption transmis par le NVIC.

Le fichier stm32f4xx_it.c fait le lien entre ces routines d’interruption et une fonction permettant de traiter cette interruption.

Cette fonction nous amène alors dans le fichier relatif au périphérique ( ici stm32f4xx_hal_gpio.c ) :

On y trouve :

La fonction de callback peut figurer dans main.c :

Interruption et Changement de Mode :

Lors de la réception du signal IRQ, le processeur bascule dans un mode privilégié ( mode Handler ) donnant accès à l’ensemble des instructions et des registres.
Comme le programme précédent en cours a été interrompu, des registres ( contexte ) sont automatiquement sauvegardés dans la pile du mode Handler :
R0-R3, R12, LR, xPSR
A l’issue du traitement de l’interruption, les valeurs sont alors restituées.


Les interruptions externes

Les interruption externes sont les interruptions liées aux entrées GPIO.

Une chose assez particulière au STM32 : une interruption externe EXTi est déclenchée par une ième broche de n’importe quel port.

Ex: EXTI2 correspond à une interruption liée soit à PA2, soit à PB2, soit à PC2, etc…

Conclusion : PA2 et PB2 ne peuvent pas déclencher tous les deux une interruption externe.

Le Choix du port se fait avec les registres EXTICR ( qui pilotent des multiplexeurs )

Une fois qu’une ligne EXTIi est active, on peut avoir une interruption soir sur front montant, soit sur front descendant.

Le registre IMR ( Interrupt Mask Register ) permet d’authoriser la source d’interruption, afin qu’elle soit enregistrée dans le registre PR (Pending Register)

Le registre PR est relié au NVIC, afin de relayer la demande d’interruption auprès du processeur.


Configuration d’une interruption Externe

Si l’on souhaite que la broche PC0, sur laquelle est reliée le bouton SWITH RIGHT, déclenche une interruption externe, il faut réaliser la configuration suivante dans le fichier stm32f4xx_hal_msp.c.

stm32f4xx_hal_msp.c

Travaux Pratiques

PROJET SOURCE


WORKSPACE_F411_HAL_STM32CUBE


Interruption Externe : contrôle de l’allumage d’une LED sur interruption liée à un bouton poussoir

Q1. Modifier le projet ci dessus afin d’allumer ou d’éteindre la Led Rouge ( mode toogle ) en appuyant sur Switch Center.

Q2. Même question pour la Led Verte en appuyant sur Switch up

Interruptions d’un Timer : clignotement d’une LED sur interruption liée à un Timer

Pour autoriser les interruption d’un Timer, il faut :

1- Autoriser cette interruption au niveau du NVIC :

stm32f4xx_hal_msp.c

2- Autoriser cette interruption au niveau du périphérique Timer :

Il faudra autoriser l’interruption de type ‘update’ dans le registre DIER du timer.

Q3. Compléter la fonction HAL_TIM_Base_Start_IT() pour :

Q4. Compléter le projet afin de :


Back                  << Index >>