Vous êtes sur la page 1sur 19

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

Vous aimerez peut-être aussi