Publicités

Une interruption est un signal au processeur émis par le matériel ou le logiciel indiquant un événement qui nécessite une attention immédiate. Chaque fois qu’une interruption se produit, le contrôleur termine l’exécution de l’instruction en cours et lance l’exécution d’une routine de service d’interruption (ISR) ou d’un gestionnaire d’interruption. L’ISR indique au processeur ou au contrôleur ce qu’il doit faire lorsque l’interruption se produit. Les interruptions peuvent être des interruptions matérielles ou des interruptions logicielles.

Interruption matérielle

Une interruption matérielle est un signal d’alerte électronique envoyé au processeur par un périphérique externe, comme un contrôleur de disque ou un périphérique externe. Par exemple, lorsque nous appuyons sur une touche du clavier ou déplaçons la souris, ils déclenchent des interruptions matérielles qui amènent le processeur à lire la frappe ou la position de la souris.

Interruption logicielle

Une interruption logicielle est provoquée soit par une condition exceptionnelle, soit par une instruction spéciale du jeu d’instructions qui provoque une interruption lorsqu’elle est exécutée par le processeur. Par exemple, si l’unité arithmétique et logique du processeur exécute une commande de division d’un nombre par zéro, pour provoquer une exception de division par zéro, amenant ainsi l’ordinateur à abandonner le calcul ou à afficher un message d’erreur. Les instructions d’interruption logicielle fonctionnent de manière similaire aux appels de sous-routine.

Qu’est-ce que la scrutation ?

L’état de surveillance continue est connu sous le nom de scrutation. Le microcontrôleur ne cesse de vérifier l’état des autres dispositifs ; et pendant ce temps, il ne fait aucune autre opération et consomme tout son temps de traitement pour la surveillance. Ce problème peut être résolu en utilisant des interruptions.

Dans la méthode d’interruption, le contrôleur ne répond que lorsqu’une interruption se produit. Ainsi, le contrôleur n’est pas tenu de surveiller régulièrement l’état (drapeaux, signaux, etc.) des dispositifs interfacés et intégrés.

Interruptions v/s Polling

Voici une analogie qui différencie une interruption du polling –

Interruption Polling
Une interruption est comme un commerçant. Si quelqu’un a besoin d’un service ou d’un produit, il va le voir et lui fait part de ses besoins. Dans le cas des interruptions, lorsque les drapeaux ou les signaux sont reçus, ils informent le contrôleur qu’ils ont besoin d’être servis. La méthode de sondage est comme un vendeur. Le vendeur va de porte en porte tout en demandant d’acheter un produit ou un service. De même, le contrôleur continue de surveiller les drapeaux ou les signaux un par un pour tous les dispositifs et fournit un service à tout composant qui a besoin de son service.

Routine de service d’interruption

Pour chaque interruption, il doit y avoir une routine de service d’interruption (ISR), ou un gestionnaire d’interruption. Lorsqu’une interruption se produit, le microcontrôleur exécute la routine de service d’interruption. Pour chaque interruption, il existe un emplacement fixe en mémoire qui contient l’adresse de sa routine de service d’interruption, ISR. Le tableau des emplacements de mémoire mis de côté pour contenir les adresses des ISR est appelé tableau de vecteurs d’interruption.

Exécution de programmes

Tableau de vecteurs d’interruption

Il y a six interruptions, y compris RESET dans le 8051.

Interruptions Emplacement duROM (Hex) Pin
Interruptions Emplacement duROM (HEX)
COM série (RI et TI) 0023
Interruptions du temporisateur 1(TF1) 001B
Interruption HW externe 1 (INT1) 0013 P3.3 (13)
Interruption HW externe 0 (INT0) 0003 P3.2 (12)
Timer 0 (TF0) 000B
Reset 0000 9
  • Lorsque la broche de réinitialisation est activée, le 8051 saute à l’adresse 0000. C’est la réinitialisation à la mise sous tension.

  • Deux interruptions sont réservées aux timers : une pour le timer 0 et une pour le timer 1. Les emplacements mémoire sont respectivement 000BH et 001BH dans la table des vecteurs d’interruption.

  • Deux interruptions sont réservées aux interruptions externes matérielles. La broche n° 12 et la broche n° 13 du port 3 sont destinées aux interruptions externes matérielles INT0 et INT1, respectivement. Les emplacements de mémoire sont respectivement 0003H et 0013H dans la table de vecteur d’interruption.

  • La communication série a une seule interruption qui appartient à la fois à la réception et à la transmission. L’emplacement mémoire 0023H appartient à cette interruption.

Étapes d’exécution d’une interruption

Lorsqu’une interruption devient active, le microcontrôleur passe par les étapes suivantes –

  • Le microcontrôleur ferme l’instruction en cours d’exécution et enregistre l’adresse de l’instruction suivante (PC) sur la pile.

  • Il sauvegarde également l’état actuel de toutes les interruptions en interne (c’est-à-dire, pas sur la pile).

  • Il saute à l’emplacement mémoire de la table de vecteurs d’interruption qui contient l’adresse de la routine de service d’interruption.

  • Le microcontrôleur obtient l’adresse de l’ISR à partir de la table de vecteurs d’interruption et y saute. Il commence à exécuter la sous-routine de service d’interruption, qui est RETI (return from interrupt).

  • Sur l’exécution de l’instruction RETI, le microcontrôleur revient à l’endroit où il a été interrompu. D’abord, il récupère l’adresse du compteur de programme (PC) de la pile en faisant sauter les octets supérieurs de la pile dans le PC. Ensuite, il commence à exécuter à partir de cette adresse.

Déclenchement par le bord vs déclenchement par le niveau

Les modules d’interruption sont de deux types – déclenché par le niveau ou déclenché par le bord.

Déclenchement par le niveau Déclenchement par le bord
Un module d’interruption déclenché par le niveau génère toujours une interruption chaque fois que le niveau de la source d’interruption est affirmé. Un module d’interruption déclenché par le bord génère une interruption uniquement lorsqu’il détecte un bord affirmé de la source d’interruption. Le front est détecté lorsque le niveau de la source d’interruption change effectivement. Il peut également être détecté par un échantillonnage périodique et en détectant un niveau affirmé lorsque l’échantillon précédent était désaffirmé.
Si la source d’interruption est toujours affirmée lorsque le gestionnaire d’interruption du micrologiciel traite l’interruption, le module d’interruption régénère l’interruption, ce qui entraîne une nouvelle invocation du gestionnaire d’interruption. Les modules d’interruption à déclenchement par le bord peuvent être actionnés immédiatement, quel que soit le comportement de la source d’interruption.
Les interruptions à déclenchement par le bas sont encombrantes pour le micrologiciel. Les interruptions à déclenchement par le bord maintiennent la complexité du code du micrologiciel, réduisent le nombre de conditions pour le micrologiciel, et fournissent plus de flexibilité lorsque les interruptions sont traitées.

Activation et désactivation d’une interruption

A la réinitialisation, toutes les interruptions sont désactivées même si elles sont activées. Les interruptions doivent être activées par logiciel pour que le microcontrôleur puisse répondre à ces interruptions.

Le registre IE (interrupt enable) est responsable de l’activation et de la désactivation de l’interruption. IE est un registre adressable par bit.

Registre d’activation d’interruption

EA -. ET2 ES ET1 EX1 ET0 EX0
  • EA – Activation/désactivation globale.

  • – – Non défini.

  • ET2 – Activer l’interruption du Timer 2.

  • ES – Activer l’interruption du port série.

  • ET1 – Activer l’interruption du Timer 1.

  • EX1 – Activer l’interruption externe 1.

  • ET0 – Activer l’interruption du temporisateur 0.

  • EX0 – Activer l’interruption externe 0.

Pour activer une interruption, nous suivons les étapes suivantes –

  • Le bit D7 du registre IE (EA) doit être élevé pour permettre au reste du registre de prendre effet.

  • Si EA = 1, les interruptions seront activées et répondront, si leurs bits correspondants dans IE sont élevés. Si EA = 0, aucune interruption ne répondra, même si leurs broches associées dans le registre IE sont élevées.

Priorité d’interruption dans le 8051

Nous pouvons modifier la priorité d’interruption en attribuant la priorité la plus élevée à l’une quelconque des interruptions. Ceci est accompli en programmant un registre appelé IP (interrupt priority).

La figure suivante montre les bits du registre IP. Lors de la réinitialisation, le registre IP contient tous les 0. Pour donner une priorité plus élevée à l’une des interruptions, nous rendons haut le bit correspondant dans le registre IP.

PT1 PT0 PX0
IP.7 Non implanté.
IP.6 Non implanté.
IP.5 Non implanté.
IP.4 Non implanté.
PT1 IP.3 Définit le niveau de priorité de l’interruption du Timer 1.
PX1 IP.2 Définit le niveau de priorité de l’interruption externe 1.
PT0 IP.1 Définit le niveau de priorité de l’interruption du Timer 0.
PX0 IP.0 Définit le niveau de priorité de l’interruption externe 0.

Interruption dans l’interruption

Que se passe-t-il si le 8051 exécute un ISR qui appartient à une interruption et qu’un autre s’active ? Dans ce cas, une interruption de haute priorité peut interrompre une interruption de basse priorité. Ce phénomène est connu sous le nom d’interruption dans l’interruption. En 8051, une interruption de basse priorité peut être interrompue par une interruption de haute priorité, mais pas par une autre interruption de basse priorité.

Déclenchement d’une interruption par logiciel

Il y a des moments où nous devons tester un ISR par le biais d’une simulation. Cela peut être fait avec les instructions simples pour mettre l’interruption en haut et ainsi faire sauter le 8051 à la table de vecteur d’interruption. Par exemple, mettez le bit IE à 1 pour le timer 1. Une instruction SETB TF1 interrompra le 8051 dans ce qu’il est en train de faire et le forcera à sauter à la table des vecteurs d’interruption.

Publicités

.