Systèmes embarqués - Interruptions

Une interruption est un signal envoyé au processeur par le matériel ou le logiciel indiquant un événement nécessitant une attention immédiate. Chaque fois qu'une interruption se produit, le contrôleur termine l'exécution de l'instruction en cours et démarre l'exécution d'unInterrupt Service Routine (ISR) ou Interrupt Handler. ISR indique au processeur ou au contrôleur ce qu'il doit faire lorsque l'interruption se produit. Les interruptions peuvent être soit des interruptions matérielles, soit des interruptions logicielles.

Interruption matérielle

Une interruption matérielle est un signal d'alerte électronique envoyé au processeur à partir d'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 de logiciel

Une interruption logicielle est provoquée soit par une condition exceptionnelle, soit par une instruction spéciale dans le 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 pour diviser 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 du logiciel fonctionnent de la même manière que les appels de sous-programmes.

Qu'est-ce que le sondage?

L'état de la surveillance continue est appelé polling. Le microcontrôleur vérifie en permanence l'état des autres appareils; et ce faisant, il n'effectue 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 appareils interfacés et intégrés.

Interrompt l'interrogation v / s

Voici une analogie qui différencie une interruption de l'interrogation -

Interrompre Vote
Une interruption est comme une shopkeeper. Si l'on a besoin d'un service ou d'un produit, il se dirige vers lui et l'informe de ses besoins. En cas d'interruptions, lorsque les drapeaux ou signaux sont reçus, ils informent le contrôleur qu'ils doivent être réparés. La méthode de sondage est comme un salesperson. Le vendeur fait du porte-à-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 appareils 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 interrupt handler. 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 vectoriel d'interruption.

Tableau vectoriel d'interruption

Il y a six interruptions dont RESET dans 8051.

Les interruptions Emplacement de la ROM (hexadécimal) Épingle
Les interruptions Emplacement de la ROM (HEX)
COM série (RI et TI) 0023
Interruptions du temporisateur 1 (TF1) 001B
Interruption matérielle externe 1 (INT1) 0013 P3.3 (13)
Interruption matérielle externe 0 (INT0) 0003 P3.2 (12)
Minuterie 0 (TF0) 000B
Réinitialiser 0000 9
  • Lorsque la broche de réinitialisation est activée, le 8051 saute à l'emplacement d'adresse 0000. Il s'agit d'une réinitialisation à la mise sous tension.

  • Deux interruptions sont réservées aux minuteries: une pour la minuterie 0 et une pour la minuterie 1. Les emplacements de mémoire sont 000BH et 001BH respectivement dans la table de vecteurs d'interruption.

  • Deux interruptions sont réservées aux interruptions matérielles externes. N ° de broche 12 et broche no. 13 dans le port 3 sont pour les interruptions matérielles externes INT0 et INT1, respectivement. Les emplacements de mémoire sont respectivement 0003H et 0013H dans la table de vecteurs d'interruption.

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

Étapes pour exécuter 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 enregistre également l'état actuel de toutes les interruptions en interne (c'est-à-dire pas sur la pile).

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

  • Le microcontrôleur obtient l'adresse de l'ISR à partir de la table des vecteurs d'interruption et y saute. Il commence à exécuter le sous-programme de service d'interruption, qui est RETI (retour d'interruption).

  • Lors de l'exécution de l'instruction RETI, le microcontrôleur retourne à l'emplacement où il a été interrompu. Tout d'abord, il obtient l'adresse du compteur de programme (PC) de la pile en insérant les octets supérieurs de la pile dans le PC. Ensuite, il commence à s'exécuter à partir de cette adresse.

Déclenchement de bord et déclenchement de niveau

Les modules d'interruption sont de deux types: déclenchés par niveau ou déclenchés par front.

Niveau déclenché Edge déclenché
Un module d'interruption déclenché par 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 un front génère une interruption uniquement lorsqu'il détecte un front d'assertion de la source d'interruption. Le front est détecté lorsque le niveau de la source d'interruption change réellement. Il peut également être détecté par échantillonnage périodique et détection d'un niveau affirmé lorsque l'échantillon précédent a été désaffirmé.
Si la source d'interruption est toujours affirmée lorsque le gestionnaire d'interruption de micrologiciel gère l'interruption, le module d'interruption régénérera l'interruption, provoquant le nouvel appel du gestionnaire d'interruption. Les modules d'interruption déclenchés par les fronts peuvent être actionnés immédiatement, quel que soit le comportement de la source d'interruption.
Les interruptions déclenchées par le niveau sont lourdes pour le micrologiciel. Les interruptions déclenchées par la périphérie maintiennent la complexité du code du micrologiciel à un faible niveau, réduisent le nombre de conditions pour le micrologiciel et offrent plus de flexibilité lors du traitement des interruptions.

Activation et désactivation d'une interruption

Lors de la réinitialisation, toutes les interruptions sont désactivées même si elles sont activées. Les interruptions doivent être activées à l'aide d'un logiciel pour que le microcontrôleur réponde à ces interruptions.

Le registre IE (activation d'interruption) est responsable de l'activation et de la désactivation de l'interruption. IE est un registre bitaddressable.

Registre d'activation d'interruption

EA - ET2 ES ET1 EX1 ET0 EX0
  • EA - Activer / désactiver global.

  • - - Indéfini.

  • ET2 - Activer l'interruption de la minuterie 2.

  • ES - Activez l'interruption du port série.

  • ET1 - Activer l'interruption de la minuterie 1.

  • EX1 - Activer l'interruption externe 1.

  • ET0 - Activer l'interruption du minuteur 0.

  • EX0 - Activer l'interruption externe 0.

Pour activer une interruption, nous procédons comme suit -

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

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

Priorité d'interruption dans 8051

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

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 mettons le bit correspondant dans le registre IP à l'état haut.

- - - - PT1 PX1 PT0 PX0

- IP.7 Pas mis en œuvre.
- IP.6 Pas mis en œuvre.
- IP.5 Pas mis en œuvre.
- IP.4 Pas mis en œuvre.
PT1 IP.3 Définit le niveau de priorité d'interruption de la minuterie 1.
PX1 IP.2 Définit le niveau de priorité de l'interruption externe 1.
PT0 IP.1 Définit le niveau de priorité d'interruption du minuteur 0.
PX0 IP.0 Définit le niveau de priorité 0 de l'interruption externe.

Interruption à l'intérieur Interruption

Que se passe-t-il si le 8051 exécute un ISR qui appartient à une interruption et qu'un autre devient actif? Dans de tels cas, une interruption de priorité élevée peut interrompre une interruption de priorité basse. Ceci est connu commeinterrupt inside interrupt. 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 le logiciel

Il y a des moments où nous devons tester un ISR par voie de simulation. Cela peut être fait avec les instructions simples pour régler l'interruption à un niveau haut et ainsi faire sauter le 8051 à la table de vecteurs d'interruption. Par exemple, définissez le bit IE sur 1 pour le temporisateur 1. Une instructionSETB TF1 interrompra le 8051 dans tout ce qu'il fait et le forcera à sauter à la table des vecteurs d'interruption.