Les interruptions

Introduction aux interruptions

Il est parfois nécessaire que le processeur prenne en charge des évènements de façon urgente sans avoir à réaliser une surveillance des explicites de ce qui peut être à l'origine de ces évènements. Par exemple, lorsque des données arrivent sur la liaison série, il sera plus simple de laisser le périphérique USART géré la réception de ces données et de lui laisser ensuite la possibilité de prévenir le processeur de la nécessité de gérer ce qui a été reçu. On peut ainsi disposer de plusieurs périphériques travaillant en parallèle et interrompant le processeur juste au moment opportun pour traiter des évènements liés au fonctionnement de ces périphériques.

Ce mécanisme est assurant par le dispositif d'interruption. Une demande d'interruption d'un périphérique peut amener le processeur à interrompre son travail en cours afin de traiter de manière urgente, comprendre prioritaire, la demande du périphérique.

La vidéo suivante propose une introduction à ce concept d'interruption et un exemple reposant sur le traitement d'un appui sur un bouton poussoir.

Noter que la vidéo comporte une erreur : avec le code proposé, l'initialisation de _millis se fait au moment du premier appui. Si on choisit millis() comme valeur initiale, on perd logiquement le premier appui sur le bouton poussoir.

Les interruptions vues avec plus de détails

On s'intéresse au fonctionnement des interruptions de façon plus détaillée et au code généré par le compilateur pour leur mise en place.

Interruptions et variables partagées - Utiliser volatile, cli, sei, SREG

Les variables partagées entre les interruptions et le reste du programme nécessitent de prendre des précautions très importantes. C'est ce que je vous propose de découvrir ici.