7.6 LES INTERRUPTIONS DU 80186
Ce paragraphe n'est pas essentiel. Il a été rédigé pour que le lecteur ait une première idée de l'évolution de la complexité des systèmes d'interruptions en quelques années. L'Intel 80186 a été mis sur le marché en 1982. Il est le deuxième successeur du 8085, après le 8086. Depuis lors, les choses n'ont pas gagné en simplicité.
Le 80186 peut recevoir des interruptions de sources internes et externes. Elles sont gérées par un contrôleur interne au processeur suivant plusieurs modes de fonctionnement. La description de ce contrôleur est faite dans ce paragraphe.
Les sources d'interruptions sont réparties en deux groupes :
- les interruptions
matérielles.
Elles se produisent en réponse
à une entrée extérieure et sont classées en :
* non masquables,
* masquables.
- les interruptions
logicielles.
Elles sont classées selon
leur origine :
* les instructions spécifiques
(INT, ESC,...)
* les exceptions d'instructions lorsqu'une
condition imprévue empêche la poursuite du traitement de l'instruction.
7.6.1 Sources d'interruptions matérielles
Les sources d'interruptions matérielles sont les 3 temporisateurs ou horloges (timers), les 2 canaux ADM, accès direct à la mémoire (DMA), 5 broches externes NMI non masquables, et 4 broches INT0 à INT3 qui peuvent être configurées de plusieurs manières.
À la suspension
de l'exécution du programme en cours, le processeur sauvegarde dans
la pile :
* le compteur ordinal CO,
* le registre de segmentation CS,
* le registre d'état.
Le contrôleur fournit à l'unité centrale le numéro attaché à la source d'interruption sur un octet. Ce numéro est celui d'une ligne d'une table de 256 lignes (table des vecteurs d'interruption). La ligne contient l'adresse de début du programme de traitement de l'interruption. Cette adresse est chargée dans le CO. Le programme de traitement est donc lancé par un appel indirect.
7.6.2 Sources d'interruptions logicielles
Les interruptions
logicielles du 80186 sont :
- l'erreur de division :
elle est construite quand un quotient obtenu par une instruction DIV ou IDIV
ne peut pas être exprimé dans l'opérande de destination
;
- le pas à pas : elle
est construite après la plupart des instructions si le bit TF du registre
d'état de l'UC est à 1 ;
- un point d'arrêt :
par l'exécution de l'instruction INT ;
- la détection de dépassement
: pendant l'instruction INTO si le drapeau OF du registre d'état est
à 1 ;
- la limite de tableau :
elle est émise par l'exécution d'une instruction BOUND si l'index
du tableau sort des limites fixées au préalable ;
- un code d'opération non
prévu : elle est émise si on tente l'exécution de
codes d'opérations non définis et donc indécodables,
à ne pas confondre avec des codes d'opérations définis,
existant mais non signalés dans la documentation ;
- le code d'opération Échap
: elle se produit lorsque le bit ET du registre de réallocation est
positionné et que l'on tente l'exécution de l'instruction Échap.
7.6.3 Modes de fonctionnement
Le contrôleur interne du 80186 a deux modes de fonctionnement.
Le fonctionnement
du contrôleur d'interruptions en mode non iRMX est semblable à
celui du 8259 en 4 sortes :
- le mode complètement imbriqué
(ou hiérarchisé);
- le mode spécial complètement
imbriqué;
- le mode cascade;
- le mode scrutation.
Dans les trois premiers, le contrôleur d'interruptions répond comme s'il s'agissait d'interruptions internes, mais les interprétations des 4 broches externes INT0 à INT3 sont différentes.
-- MODE COMPLÈTEMENT IMBRIQUE --
Dans ce mode, les 4 broches font une demande directe d'interruption. Les interruptions d'une priorité égale ou inférieure sont ignorées.
-- MODE SPÉCIAL COMPLÈTEMENT IMBRIQUE --
On entre dans ce mode en positionnant le bit SFNM des registres de commande INT0 et INT1. Toutes les sources d'interruptions du contrôleur externe maître sont groupées sur la même broche d'interruption du 80186. Par la scrutation du registre «en service» du contrôleur maître on détermine si la demande d'interruption a été faite par plus d'une source.
-- MODE CASCADE --
Dans ce mode, les 4 broches INTO à INT3 sont configurées en 2 broches d'interruption -INT0 et INT2- et 2 broches de reconnaissance d'interruption -INT2 et INT3-. Ce mode est utilisé lorsqu'on connecte un contrôleur d'interruptions externe 8259 au 80186. Chaque paire peut être programmée en mode cascade ou non cascade par l'intermédiaire des registres de contrôle INT0 et INT1. L'utilisation des signaux de reconnaissance d'interruption rend inutile une logique externe pour émettre les signaux d'acquittement et de sélection de boîtiers. Le mode cascade sert 128 interruptions externes au plus.
-- MODE SCRUTATION --
Le contrôleur peut être utilisé dans le mode scrutation si les interruptions n'ont pas à être traitées dans l'instant. Les interruptions sont inhibées et le programme scrute le contrôleur d'interruptions par la lecture du registre de scrutation qui contient les priorités des interruptions présentes.
La lecture du registre de scrutation entraîne automatiquement le traitement de l'interruption en attente de plus haute priorité. Le contenu de ce registre est dupliqué dans le registre d'état de scrutation dont la lecture n'a aucun effet.
Le mode iRMX
Ce mode rend compatibles le 80186 et le système d'exploitation iRMX86. Le modèle d'interruption d'iRMX86 nécessite un contrôleur maître et plusieurs contrôleurs esclaves programmés dans le mode cascade. Le contrôleur d'interruption interne du 80186 est utilisé en esclave et le contrôleur externe devient maître. Les ressources internes du 80186 sont sous la dépendance du contrôleur interne.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
La connexion du 80186 avec un contrôleur externe 8259 est décrite dans la figure suivante :
L'architecture
L'architecture
du contrôleur d'interruptions intégré à l'iAPX
186 est détaillée dans la figure suivante.
Un arbitre des priorités d'interruption (interrupt priority resolver) reçoit toutes les sources d'interruptions. Il décide parmi les demandes d'interruptions simultanées, en fonction de la priorité de chacune. Il est associé à des registres de commandes et d'état et à un générateur de vecteurs d'interruptions.
Les registres de commande et d'état du contrôleur d'interruption sont situés dans le bloc de commande des périphériques internes. Leur utilisation est légèrement différente suivant le mode de fonctionnement (iRMX ou non iRMX).
DÉSIGNATION | DÉPLACEMENT
(hexadécimal) |
Niveau 5, registre de commande de l'horloge 2 Niveau 5, registre de commande de l'horloge 1 Niveau 5, registre de commande ADM 1 Niveau 5, registre de commande ADM 0 Niveau 5, registre de commande de l'horloge 0 Demande d'interruption Registre «en service» Registre de masquage de niveau de priorité Registre de masquage Registre spécifique Registre de vecteur d'interruption Registre de commande de l'INT3 Registre de commande de l'INT2 Registre de commande de l'INT1 Registre de commande de l'INT0 Registre de commande de l'ADM1 Registre de commande de l'ADM0 Registre de commande de l'horloge Registre d'état d'un contrôleur d'interruption Registre de demande d'interruption Registre de service Registre de masque de priorité Registre de masque Registre d'état de scrutation Registre de scrutation Registre EOI |
3A 38 36 34 32 2E 2C 2A 24 22 20 3E 3C 3A 38 36 34 32 30 2E 2C 2A 28 26 24 22 |
Registre de commande des sources internes.
Les sources d'interruption internes, temporisateurs et canaux ADM, possèdent chacune, en plus de leur propre registre, un registre de commande pour les interruptions. Il est décrit ci-dessous :
PRx : ces 3 bits codent la priorité
de la source, 0 est plus prioritaire que 7.
MSK masque ou non l'interruption. Les bits MSK des registres de contrôle individuels ont le même usage que ceux du registre de masque. Leur modification dans les registres de contrôle individuels modifie ceux du registre de masque et réciproquement.
Registre de commande des sources externes
Les sources d'interruption externes, INT0 à INT3, possèdent chacune un mot de commande. Le format des registres de commande d'INT0 et INT1 est donné ci-dessous.
Celui des registres de commande INT2
et INT3 est décrit par la figure suivante
Dans le mode cascade ou dans le
mode spécial complètement imbriqué, les mots de contrôle
INT2 et INT3 ne sont pas utilisés. Les bits de ces différents
registres sont encodés comme suit :
PRx : ces 3 bits
codent la priorité de la source,
LTM : définit le mode de
déclenchement, front ou niveau,
MSK : masque ou non la source d'interruption,
C : met le contrôleur en mode
cascade,
SFNM : met le contrôleur dans
le mode spécial complètement imbriqué,
Registre d'état
des interruptions.
Ce registre indique l'état
du contrôleur d'interruptions.
Ses bits ont les fonctions suivantes
:
DHLT : arrête les transferts
ADM
IRTx : ces bits valident les interruptions
provenant des temporisateurs.
Registre de
demande d'interruption.
Toutes les demandes d'interruptions
sont regroupées dans un même registre:
Le bit TMR est le OU logique de
toutes les demandes d'interruption des temporisateurs. D0 et D1 sont les
demandes d'interruption des canaux ADM. L'état des broches d'interruptions
externes est indiqué en mode non iRMX uniquement.
Registre «en service»
Il contient le bit «en service» (IS) de chaque source d'interruption. Il indique que le programme de traitement de cette interruption est ou non en cours d'exécution. Ainsi, le contrôleur d'interruptions n'émettra pas d'interruption vers l'UC tant que les demandes qu'il recevra auront une priorité inférieure à celle de l'interruption en cours de traitement. Le bit TMR est le bit en service pour les trois temporisateurs. Les bits D0 et D1 sont des bits en service pour les deux canaux ADM, 10 à 13 sont ceux des broches d'interruptions externes. Le bit IS est remis à 0 en employant une commande de fin d'interruption (EOI).
L'encodage des
bits du registre de scrutation est :
- Sx : indique le vecteur de source
d'interruption de plus haute priorité en attente ;
- INTREQ : détermine si une
demande d'interruption est présente.
Registre de fin d'interruption.
C'est un registre de commande de fin d'interruption. Il ne peut pas être lu. Son écriture initialise une commande EOI. En mode non iRMX les bits de ce registre sont encodés de la façon suivante :
-Sx spécifie le vecteur d'interruption.
-NSPEC détermine le type de
la commande EOI.
En mode iRMX, ils sont codés comme ci-dessous :
- Lx indique la priorité de
la source d'interruption dont le bit en service est à remettre à
zéro.
Vectorisation des interruptions.
Nom de l'interruption | N° du vecteur |
Priorité par défaut |
Instructions associées |
Tentative de division par 0 |
0
|
*1
|
DIV IDIV |
Mode pas-à-pas |
1
|
**2
|
Toutes |
NMI |
2
|
*1
|
Toutes |
Point d'arrêt |
3
|
*1
|
INT |
Détection de l'INT 0 |
4
|
*1
|
INT0 |
Dépassement de bornes de tableau |
5
|
*1
|
BOUND |
Code d'opération non utilisé |
6
|
*1
|
non définie |
codes d'opération ESC |
7
|
****4
|
codes d'opération ESC |
Interruption horloge 0 |
8
|
2A ***3
|
|
Interruption horloge 1 |
18
|
2B ***3
|
|
Interruption horloge 2 |
19
|
2C ***3
|
|
Réservée |
9
|
3
|
|
Interruption ADM 0 |
10
|
4
|
|
Interruption ADM 1 |
11
|
5
|
|
Interruption INT 0 |
12
|
6
|
|
Interruption INT 1 |
13
|
7
|
|
Interruption INT 2 |
14
|
8
|
|
Interruption INT 3 |
15
|
9
|
Notes : Pour faciliter la lecture de documents originaux, nous avons conservé ici les dénominations d'Intel avec les conventions d'écriture suivantes :
*1 Sont construits comme résultat d'une exception d'instruction.
**2 Manipulé comme dans le 8086.
***3 Les horloges constituent une source de demandes au contrôleur d'interruption. Les interruptions d'horloge ont toutes la même priorité par défaut par rapport aux autres sources d'interruption. Toutefois, elles sont ordonnées entre elles. La priorité 2A est plus haute que 2B, chaque interruption d'horloge a un numéro de vecteur différent.
****4 Un code d'opération d'échappement provoque une trappe si le bit approprié est positionné dans le registre de relocation de bloc périphérique.
Cette table fournit également les priorités prises par défaut.
Dans le mode iRMX, le contrôleur d'interruptions construit un vecteur de 8 bits que le CPU multiplie par 4 et utilise comme point d'entrée dans la table.
Les 5 bits significatifs du vecteur sont programmables par l'utilisateur tandis que les 3 bits de plus faible poids sont construits par le registre de priorité. Le registre des vecteurs d'interruptions fournit les 5 bits de plus fort poids pour l'adresse du vecteur d'interruption. Le contrôleur d'interruptions fournit les 3 bits de plus faible poids du vecteur d'interruptions.
Le format de
ce registre est :
-Tx sont les 5 bits de plus fort
poids du vecteur d'interruption.
Mécanisme d'initialisation.
Lors du RESET,
la configuration du contrôleur d'interruption est la suivante :
- Tous les bits SFNM sont à
0. On se trouve dans le mode complètement imbriqué.
- Tous les bits PR des différents
registres de contrôle sont à 1 ce qui met toutes les sources
dans la priorité la plus basse.
- Tous les bits LTM sont à
0, le déclenchement des interruptions externes est fait sur les fronts
des signaux :
- Tous les bits «en service»
sont à 0
- Tous les bits de masque sont à
1
- Tous les bits C (mode cascade)
sont mis à 0
- Tous les bits PRM (masque de priorité)
sont mis à 1, c'est-à-dire qu'aucune priorité n'est
masquée.
On se trouve dans le mode non iRMX.
Conservatoire national des arts et métiers
Architectures des systèmes informatiques
CHAPITRE 7
Gestion des événements, systèmes d'interruptions
Année 2002-2003