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

Suite N°2...

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 mode non iRMX

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.

Le système d'exploitation iRMX86 exige qu'on assigne à chaque périphérique une priorité fixe. Ceci est incompatible avec le fonctionnement normal du contrôleur d'interruption 80186. Le logiciel d'initialisation doit donc programmer la priorité de chaque source. Le priorités requises pour les sources d'interruptions internes dans le mode iRMX sont donnés dans la table suivante :

 
Niveau de priorité
Source d'interruption
0
Horloge 0
1
réservé
2
ADM 0
3
ADM 1
4
Horloge 1
5
Horloge 2

La connexion du 80186 avec un contrôleur externe 8259 est décrite dans la figure suivante :


L'entrée INT0 est utilisée comme entrée d'interruption du 80186. INT3 fonctionne comme une sortie pour envoyer une demande d'interruption esclave à une des 8 entrées du contrôleur maître. L'interface maître-esclave nécessite le décodage des adresses d'esclaves. Les 8259 font ce décodage de façon interne, mais à cause du nombre limité de broches, les adresses du 80186 sont être décodées de façon externe. INT1 est utilisée comme une entrée de sélection du contrôleur esclave. Notons que le vecteur d'interruption esclave est transféré de façon interne.

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).

Registre de commande du contrôleur d'interruptions en mode 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.

Le contrôleur d'interruption du 80186 construit les vecteurs d'interruption des canaux ADM et des temporisations ainsi que ceux des broches d'interruptions externes si elles ne sont pas en mode cascade ou en mode spécial complètement imbriqué. Les vecteurs d'interruption intégrés sont fixes et ne peuvent pas être modifiés.

 
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.

CE FICHIER N'A PAS DE QUESTIONNAIRE

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