Chapitre 5 : les interruptions
OBJECTIF : interrompre le programme principal lorsque
c’est nécessaire !
Généralités
«En informatique, une interruption est un arrêt temporaire de l'exécution
normale d'un programme par le microprocesseur afin d'exécuter un autre
programme (appelé routine de gestion d'interruption) ».
Dans le cas d'un microcontrôleur, les interruptions sont de deux types :
internes ou externes. Externes, quand ce sont des signaux électriques sur
certaines broches du composant qui provoquent l'interruption du
programme ; internes quand ce sont les périphériques internes du
microcontrôleur qui interrompent le programme principal.
Dans les deux cas, c'est le contrôleur d'interruption qui gère les conditions
d'arrêt du programme principal.
Après cette définition générale, voyons l’intérêt des interruptions !
2 IUT de TOURS GEII INFO2 07/03/2023
Airbag sans interruption...
Prenons le cas d’un véhicule qui possède des airbags
Qui déclenche l’airbag dans un véhicule ?
Qui détecte la situation d’accident ?
3 IUT de TOURS GEII INFO2 07/03/2023
Airbag sans interruption...
Qui déclenche l’airbag dans un véhicule ?
On mesure par des accéléromètres la décélération brutale du véhicule ou sa
déformation à des endroits stratégiques de la carrosserie.
Mettons-nous dans le cas d’un système sans interruption.
=> lecture périodique des capteurs...
4 IUT de TOURS GEII INFO2 07/03/2023
Airbag sans interruption...
=> lecture périodique des capteurs…
=> on ne sait pas quand l’accident va arriver…
On lit l’état des capteurs peut être pour rien...
=> les tâches du programme sont sans cesse interrompues…
Solution : lire moins souvent les capteurs
Inconvénient : si accident, risque de le voir tardivement !
5 IUT de TOURS GEII INFO2 07/03/2023
Airbag avec interruption...
=> L’électronique de gestion des capteurs effectue une demande
d’interruption que lors d’une situation d’accident :
Le processeur de la carte électronique de gestion des airbags répond à la
demande d’interruption et permet le gonflage des airbags !
=> plus d’attente d’un éventuel accident
=> on déclenche les airbags très rapidement !
6 IUT de TOURS GEII INFO2 07/03/2023
Le contrôleur d’interruption
Dans un microcontrôleur, le contrôleur d'interruption est un ensemble de
circuits électroniques, interne au microcontrôleur, qui gère la détection des
signaux d'interruptions (signaux électriques externes au microcontrôleur
ou signaux provenant des périphériques internes). Si les conditions
d'interruptions, configurées par programmation, sont réalisées alors le
contrôleur d'interruption interrompt le programme en cours et lance
l’exécution de la routine d'interruption correspondante au périphérique
ayant émis la demande d'interruption.
Dans les deux cas, c'est le contrôleur d'interruption qui gère les conditions
d'arrêt du programme principal.
Pour résumé, c’est l’électronique qui gère les interruptions, pas vous !
7 IUT de TOURS GEII INFO2 07/03/2023
Et si on a plusieurs demandes d’interruptions ?
Plusieurs capteurs peuvent émettent des demandes d’interruptions
en même temps !
=> Il faut imposer des priorités
Dans le cas des PSoC, fonction C → SetPriority()
=> conséquence : code le plus concis dans chaque
fonctions d’interruption
Dans la pratique il est important de respecter le point suivant :
La durée d'une fonction d'interruption doit être la plus faible possible pour ne pas
gêner le fonctionnement du programme principal.
8 IUT de TOURS GEII INFO2 07/03/2023
Interruptions externes au µC
Les signaux d’interruptions proviennent de composants
extérieurs au µC, connectés sur ses broches GPIO.
Broches GPIO souvent nommées : INT0, INT1, etc.. PCINT0,
PCINT1, etc.
Ne pas oublier : une broche a
plusieurs fonctions !
9 IUT de TOURS GEII INFO2 07/03/2023
Interruptions externes au µC
Sur PSoC, on relie graphiquement un bloc d’interruption (isr_1) à
une GPIO (Pin_2).
Ensuite, on configure la condition de déclenchement :
La condition de déclenchement d'une interruption externe est configurable
de plusieurs manières :
●
déclenchement sur niveau logique (bas en général),
●
déclenchement sur front (montant, descendant ou les deux).
Ceci se fait par une boîte de dialogue graphique sur isr_1
10 IUT de TOURS GEII INFO2 07/03/2023
Configuration de l’Interruption
●
DERIVED : configuration réalisée sur le périphérique source (ici Pin_2),
●
RISING_EDGE : interruption sur front montant,
●
LEVEL : utilisé généralement par les composants de type PWM, Timer,
Counter, UART, SPI. Voir bibliographie pour plus d'explications.
La configuration de déclenchement
réalisée, il faut exécuter du code !
Dans notre exemple : le gonflage des
airbags…
Mais dans quelle fonction ?
11 IUT de TOURS GEII INFO2 07/03/2023
La fonction d’interruption
Le contrôleur d’interruption a détecté une interruption et
prévenu le processeur.
On doit exécuter du code propre à cette interruption !
Où ? Tout simplement dans la fonction d’interruption attachée
au périphérique qui a émis la demande d’interruption.
Dans notre exemple : la GPIO Pin_2 grâce au bloc isr_1
12 IUT de TOURS GEII INFO2 07/03/2023
Code C de la fonction d’interruption pour PSoC
//Fonction d'interruption reliée à la broche Pin₂
CY_ISR(InterruptionExternePin_2)
CY_ISR : mot clé pour la fonction
{ d’interruption
//ici code de la fonction d'interruption (nom du vecteur d’interruption)
Ici InterruptionExternePin_2
}
int main()
Liaison entre la fonction d’interruption
{ et la source d’interruption
//Lancement du composant isr_1
//et affectation de son vecteur d'interruption
isr_1_StartEx(InterruptionExternePin_2);
CyGlobalIntEnable; //Validation des interruptions du processeur
Ne pas oublier !
13 IUT de TOURS GEII INFO2 07/03/2023
Particularité de la fonction d’interruption
La fonction d'interruption ne possède aucune variable en paramètre ni
valeur de retour. Il est alors nécessaire d'utiliser des variables globales
pour transmettre des valeurs entre cette fonction et le reste du
programme.
Attention : le programmeur ne doit pas écrire le code d'appel de la
fonction d'interruption. L'appel de cette fonction est réalisée par la partie
matérielle du microcontrôleur !
En clair : interdiction dans votre code d’appeler cette fonction
14 IUT de TOURS GEII INFO2 07/03/2023
Interruptions internes
Objectif :
Le but est d'autoriser des périphériques internes au microcontrôleur à
demander d'interrompre le programme principal. La problématique est la
même que l'exemple de l'airbag, on désire exploiter au mieux les capacités
du processeur et l'interrompre lorsque c'est nécessaire.
→ Quels sont les périphériques concernés ? En général, tous !
→ La configuration de l’interruption interne dépend du périphérique (voir sa
documentation)
15 IUT de TOURS GEII INFO2 07/03/2023
Exemples d’interruptions internes
●
demande d'interruption du CAN lorsqu'il a fini sa conversion de données,
●
demande d'interruption d'un périphérique de communication à la réception
complète d'une donnée ou à la fin de la transmission d'une donnée.
●
demande d'interruption d'une mémoire (EEPROM) à la fin d'un cycle d'écriture.
L'accès à cette mémoire est très lent par rapport à la vitesse du processeur.
●
demande d'interruption des TIMER (compteur de temps). Ceci sera abordé dans
le chapitre VII.
16 IUT de TOURS GEII INFO2 07/03/2023
Exemple d’interruption interne du CAN
//Fonction d'interruption liée au convertisseur
CY_ISR(InterruptionADC)
{
//ici code de la fonction d'interruption
}
int main()
{
//Lancement du composant isr_2
EOC : End Of
//et affectation de sa fonction d'interruption Conversion
isr_2_StartEx(InterruptionADC);
CyGlobalIntEnable; /*Validation des interruptions du processeur */
...
17 IUT de TOURS GEII INFO2 07/03/2023
Multiples sources d’interruptions
→ Une fonction d’interruption par source !
→ Niveau de priorité réglable (fonction C ou graphiquement)
→ On peut mélanger source
d’interruption externe
et interne à volonté !
18 IUT de TOURS GEII INFO2 07/03/2023
Quelques vidéos :
Une vidéo de SILIS Electronique (5 mn) :
https://www.youtube.com/watch?v=Mkj-W-5A8Cg
Encore nos amis suisses ! (23 mn)
https://www.youtube.com/watch?v=OgeNv0Oc4t4&list=PLEVjCycRK1D0YvSf9bTjISt
hjLdoXacy8&index=27
19 IUT de TOURS GEII INFO2 07/03/2023