Vous êtes sur la page 1sur 4

Les interruptions

Qu’est-ce qu’une interruption ?

Supposons que vous êtes entrain de travailler et que soudain le téléphone sonne. Allez-vous
répondre ?

• Vous pouvez choisir de ne pas répondre au téléphone qui est entrain de vous
interrompre (ignorer l’appel)
• Ou bien vous pouvez répondre (handle) à l’interruption et ensuite continuer votre
travail (retourner à ce que vous faisiez avant de répondre)

Le microcontrôleur a la capacité de se comporter d’une manière similaire :

• Il peut ignorer les sources d’interruption (comportement par défaut)


• Ou bien traiter (handle) les interruptions ( ceci est obtenu en mettant à ‘1’ le bit I du
registre SREG, ce bit valide toutes les sources d’interruptions du microcontrôleur:
global interrupt enable).

Une interruption dans un microcontrôleur est une ressource puissante, c’est la capacité de
suspendre l’exécution du programme en cours dans le but de traiter (handle) quelque chose
d’autre qui nécessite l’attention du CPU.

Pour l’Atmega328P ce quelque chose d’autre qui peut interrompre le microcontrôleur peut
être une ou plusieurs parmi 26 sources d’interruption

Comment cela fonctionne ?

• Il faut tout d’abord valider les interruptions (car le microcontrôleur les ignore par
défaut)
• Choisir lesquelles parmi les 26 sources d’interruption le microcontrôleur va traiter
• Lorsque l’interruption a lieu, le microcontrôleur a besoin de savoir :
✓ Qu’est-ce qu’il va faire (comment traiter cette interruption) et où va-t-il
aller pour traiter cette interruption
✓ Qu’est ce que le microcontrôleur faisait et ou était-il avant l’interruption
(ceci est important puisqu’après le traitement de l’interruption le
microcontrôleur doit revenir à sa tache précédente)

En résumé :

• Mettre le bit I de SREG à ‘1’ (grâce à l’instruction SEI)


• Ensuite mettre à ‘1’ les différents bits de masque des sources d’interruptions qu’on
veut valider (chaque source d’interruption possède un bit de validation à l’interieur
d’un registre parmi les 64 registres I/O ou les 160 registres I/O extension)
• Lors d’une interruption le microcontrôleur va aller à un vecteur d’interruption (un
vecteur spécifique pour chaque source d’interruption) qui donne l’adresse de début du
sous-programme d’interruption (ISR :interrupt service routine). Cette adresse sera
chargée dans le registre PC.

25
Les interruptions

• Le retour au programme précédent se fait automatiquement à l’aide de la pile et du


pointeur de pile SP . L’adresse de retour (qui est généralement PC+1) est poussée
dans la pile. Une fois l’interruption traitée, l’adresse de retour est retirée de la pile et
rechargée dans le registre PC

Remarque importante :

Seul le contenu du registre PC est stockée dans la pile lors d’une interruption. Pour
sauvegarder d’autres informations importantes dans la pile telles que SREG et les GPRs il
faudra le faire manuellement par les instructions PUSH et POP.

Pour l’Atmega328P :

• 26 sources d’interruptions
• Chaque source d’interruption possède son vecteur d’interruption
• Chaque source d’interruption doit être validée individuellement à l’aide d’un bit à
l’intérieur d’un registre I/O
• Même lorsque le bit spécifique à une interruption est validé, le bit de validation
globale des interruptions (bit I du SREG)doit être validé.
• Important : lorsqu’une interruption a lieu, le bit I de SREG est mis à ‘0’
(interruptions désactivées) ceci dans le but d’exécuter seulement une seule routine
d’interruption à la fois, les interruptions emboitées (nested interrupts) peut être
utilisées si on repositionne manuellement le bit I de SREG à ‘1’ à l’intérieur du sous-
programme d’interruption.
• Après achèvement du sous-programme d’interruption on doit utiliser l’instruction
RETI qui a deux actions :
✓ Restitue l’adresse de retour (PC+1) dans le PC
✓ Réactive le bit I de SREG pour permettre à nouveau touts les interruptions

26
Les interruptions

Le tableau suivant donne les interruptions de l’Atmega328P :

27
Les interruptions

Voici la configuration la plus typique généralement adoptée :

28

Vous aimerez peut-être aussi