Vous êtes sur la page 1sur 21

Exercice 5 : Gestion des interruptions

En programmation système, 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. Une interruption alerte le
processeur en cas de problème de priorité élevée nécessitant
l'interruption du code en cours d'exécution par le processeur. Le
processeur répond en suspendant ses activités en cours, en sauvegardant
son état et en exécutant une fonction appelée gestionnaire d'interruption
(ou routine de service d'interruption, ISR) pour traiter l'événement. Cette
interruption est temporaire et, une fois le gestionnaire d'interruptions
terminé, le processeur reprend ses activités normales. Il existe deux types
d'interruptions: les interruptions matérielles et les interruptions
logicielles.

Le Bloc PIE :

Le bloc PIE sert à multiplexer de nombreuses sources d'interruption en


un ensemble plus petit d'entrées d'interruption. Le bloc PIE peut prendre
en charge jusqu'à 96 interruptions périphériques. Sur les F281x et C281x,
45 des 96 interruptions possibles sont utilisées par les périphériques. Les
96 interruptions sont regroupées en blocs de 8 et chaque groupe est
inséré dans l'une des 12 lignes d'interruption de la CPU (INT1 à INT12).
Chacune des 96 interruptions est supportée par son propre vecteur
stocké dans un bloc de RAM dédié pouvant être écrasé par l'utilisateur.
Le vecteur est automatiquement récupéré par la CPU lors du traitement
de l'interruption. Il faut 8 cycles d'horloge de la CPU pour extraire le
vecteur et sauvegarder les registres critiques de la CPU. Par conséquent,
le processeur peut répondre rapidement aux événements d'interruption.
La priorisation des interruptions est contrôlée dans le matériel et les
logiciels. Chaque interruption individuelle peut être activée / désactivée
dans le bloc PIE.

Interruptions périphériques PIE :


Description des Registres PIE :
Gestion des interruptions externes TM :

Les périphériques prennent en charge huit interruptions externes


masquées (XINT1 XINT7, XNMI). XNMI peut être connecté à l’INT13 ou
à l’interruption NMI de la CPU. Chacune des interruptions peut être
sélectionnée pour le déclenchement de front négatif, positif ou à la fois
négatif et positif et peut également être activée ou désactivée (y compris
XNMI). XINT1, XINT2 et XNMI contiennent également un compteur
libre de 16 bits, remis à zéro lorsqu'un zéro d'interruption valide est
détecté. Ce compteur peut être utilisé pour horodatage précis de
l’interruption. Contrairement aux périphériques 281x, il n'y a pas de
broches dédiées pour les interruptions externes. XINT1 Les interruptions
XINT2 et XNMI peuvent accepter les entrées des broches GPIO0 à
GPIO31. XINT3 Les interruptions XINT7 peuvent accepter les entrées
des broches GPIO32 – GPIO63.
On définit la latence est temps écoulé entre le moment où une
interruption survient et le décodage de la première instruction
ISR « Routines de service d'interruption ».

Latence minimale:

 Périphériques internes: 10-14 cycles


 Signaux externes: 11 cycles

Latence maximale: dépend des états d’attente, prêt, INTM.

Source d’interruption :
La séquence d'opérations d'interruption :

Les interruptions multiplexées par la PIE. Les sources d'interruption non


multiplexées sont directement alimentées par la CPU.

Interruption au niveau périphériques

Lorsque que la requête est envoyée à la CPU, le bit d'indicateur


d'interruption de niveau de la CPU correspondant à INTx est défini. Une
fois qu'un indicateur a été verrouillé dans l'IFR, l'interruption
correspondante n'est pas traitée jusqu'à ce qu'elle soit activée de manière
appropriée dans le registre d'activation d'interruption de la CPU (IER) ou
le registre d'activation d'interruption de débogage (DBGIER) et le bit de
masque d'interruption global (INTM).

 Lorsque le 28x est en mode d'émulation temps réel et que la CPU


est arrêtée, un processus différent est utilisé. Dans ce cas
particulier, le DBGIER est utilisé et le bit INTM est ignoré.

 lorsque DSP est en mode temps réel et que la CPU est en cours
d'exécution, le processus de traitement des interruptions standard
est appliqué.

Interruption au niveau CPU

La génération d’une interruption se produit dans un périphérique. Le bit


indicateur d'interruption (IF) correspondant à cet événement est défini
dans un registre pour ce périphérique particulier. Si le bit d'activation
d'interruption (IE) correspondant est activé, le périphérique génère une
demande d'interruption auprès du contrôleur PIE.

 FI reste défini jusqu'à ce qu'il soit effacé par le logiciel Lorsque


l'interruption n'est pas activée au niveau du périphérique.
 Dans le cas contraire et que l'indicateur d'interruption est toujours
défini, la demande d'interruption est attribuée à la PIE.
Activation des interruptions

standard INTM = 0 et le bit dans IER vaut 1

DSP en mode temps réel et arrêté Bit dans IER est 1 et DBGIER est 1

Registres d'interruption PIE :

Registre PIECTRL : 16 BIT

15 1 0
PIEVECT ENPIE

Example : If PIECTRL = 0x0d27

Alors le vecteur de l'adresse 0x0D26 (opération illégale) a été récupéré

Registre de reconnaissance d'interruption PIE

15 12 11 0
Réservé PIEACKx

PIEACKx :

L'écriture d'un 1 dans le bit d'interruption respectif efface le bit et permet


au bloc PIE de piloter une impulsion dans l'entrée d'interruption
principale, si une interruption est en attente pour l'une des interruptions
de groupe. La lecture de ce registre indique si une interruption est en
attente dans le groupe respectif. Le bit 0 fait référence à INT1 jusqu'au bit
11, ce qui correspond à INT12.

Registres de drapeau d'interruption PIE et Registres


d'activation d'interruption PIE :

Registre PIEIFRx :
15 8
Réservé
7 6 5 4 3 2 1 0
INTx.8 INTx.7 INTx.6 INTx.5 INTx.4 INTx.3 INTx.2 INTx.1

Pour les flag :


 Ne jamais effacer un bit PIEIFR. Une interruption peut être perdue
lors de l'opération lecture-modification-écriture.
Pour enable :
 Des précautions doivent être prises lors de la suppression des bits
PIEIER en cours de fonctionnement normal.

Registre d'indicateurs d'interruption de la CPU (IFR) :

Registre du drapeau d'interruption :


15 14 13 12 11 10 9 8
RTOSINT DLOGINT INT14 INT13 INT12 INT11 INT10 INT9

7 6 5 4 3 2 1 0
INT8 INT7 INT6 INT5 INT4 INT3 INT2 INT1
Registre d'activation d'interruption (IER) et registre
d'activation d'interruption de débogage (DBGIER) :

Interrompre activer le registre (EIR)

Lors de la réinitialisation, tous les bits IER sont réinitialisés à 0,


désactivant toutes les interruptions masquables du niveau de la CPU.

15 14 13 12 11 10 9 8
RTOSINT DLOGINT INT14 INT13 INT12 INT11 INT10 INT9

7 6 5 4 3 2 1 0
INT8 INT7 INT6 INT5 INT4 INT3 INT2 INT1
Le registre d'activation d'interruption de débogage (DBGIER) est utilisé
uniquement lorsque la CPU est arrêtée en mode d'émulation en temps
réel. Une interruption activée dans le DBGIER est définie comme une
interruption critique du temps. Comme avec l'IER, vous pouvez lire le
DBGIER pour identifier les interruptions activées ou désactivées et écrire
dans le DBGIER pour activer ou désactiver les interruptions. Pour activer
une interruption, définissez son bit correspondant sur 1. Pour désactiver
une interruption, définissez son bit correspondant sur 0.

Registres de contrôle d'interruption externe :

15 8
réservé

7 3 2 1 0
réservé polarité réservé Enable

15-8 :Les lectures réservées renvoient zéro; les écritures n'ont aucun
effet.

2 : Polarité Ce bit de lecture / écriture détermine si des interruptions sont


générées sur le front montant ou sur le front descendant d'un signal sur
la broche.
 0 Interruption générée sur un front descendant (transition de haut
en bas)
 1 interruption générée lors d’une transition de bas en haut)
1 : Les lectures réservées renvoient zéro; écrit n'a aucun effet.

0 :Activer Ce bit de lecture / écriture active ou désactive l'interruption


externe XINT1.
 0 Désactiver l'interruption
 1 Activer l'interruption

Registre de contrôle d'interruption NMI externe (XNMICR) :

15 8
réservé

7 3 2 1 0
réservé polarité réservé Enable

15−3 : Les lectures réservées renvoient zéro; les écritures n'ont aucun
effet.
2 : Polarité Ce bit de lecture / écriture détermine si des interruptions sont
générées sur le front montant ou sur le front descendant du signal sur la
broche.
 0 Interruption générée sur un front descendant (transition de haut
en bas)
 1 interruption générée lors d’une transition de bas en haut)

1 : Select Sélectionne la source pour INT13


 0 minuterie 1 connecté à INT13
 1 XNMI_XINT13 connecté à INT13

0 :Actif Ce bit de lecture / écriture active ou désactive une interruption


externe NMI
 0 Désactiver l'interruption XNMI
 1 Activer l'interruption XNMI

Interrupteur externe compteur 1 (XINT1CTR)


15 0
INTCTR[15:8]

Il s’agit d’un compteur gratuit à 16 bits qui fonctionne au rythme de


SYSCLKOUT. La valeur du compteur est réinitialisée à 0x0000 quand un
front d'interruption valide est détecté, puis continue à compter jusqu'à ce
que le prochain front d'interruption valide soit détecté. Lorsque
l'interruption est désactivée, le compteur s'arrête. Le compteur est un
compteur libre et revient à zéro lorsque la valeur maximale est atteinte.
Le compteur est un registre en lecture seule et ne peut être remis à zéro
que par un front d'alarme valide ou par une réinitialisation.