Section courante

A propos

Section administrative du site

Port d'entrée/sortie 80x86

0020h

PC, XT, PC Junior, AT, PS/2 8259-1, Commande d'interruption

Description

Ce port permet de manipuler le registre de commande du contrôleur d'interruption 1 du contrôleur 8259A. Normalement, le BIOS réinitialise se port, lequel permet d'initialiser le contrôleur d'interruption. L'initialisation de se processus requière l'envoi d'une commande 8 bits au port 20h, suivi de 2 ou 3 commandes de 8 bits au séquenceur du port 21h.

Écriture

Voici la commande 1 d'initialisation:

Bits Description
0 Ce bit lorsqu'il vaut 1 permet d'indiquer qu'il faut 4 octets d'initialisation.
1 Ce bit permet d'indiquer le mode d'initialisation:
Valeur Description
0 Cette valeur permet d'indiquer que l'initialisation se fait en mode CASCADE. Cette valeur n'est possible que lorsque deux contrôleurs sont utilisés, soit à partir des AT et plus.
1 Cette valeur permet d'indiquer que l'initialisation se fait en mode simple (SINGLE). Quand seulement un contrôleur existe, comme avec les PC/XT.
2 Ce bit n'est pas utilisé.
3 Ce bit permet d'indiquer le mode de déclencheur:
Valeur Description
0 Cette valeur permet d'indiquer que le déclencheur s'effectue par tranche. Soit, pour les PC, XT et AT.
1 Cette valeur permet d'indiquer que le déclencheur s'effectue par niveau. Soit, pour l'architecture MCA.
4 Ce bit doit être à 1 pour provoquer l'initialisation.
5 à 7 Ces bits ne sont jamais utilisés.

Voici la commande 2 d'opération normal:

Bits Description
0 à 2 Ces bits permettent d'indiquer le niveau de priorité:
Valeur Description
000b Cette valeur permet d'indiquer que l'IRQ0 est de basse priorité et que l'IRQ1 est de haute priorité.
001b Cette valeur permet d'indiquer que l'IRQ1 est de basse priorité et que l'IRQ2 est de haute priorité.
010b Cette valeur permet d'indiquer que l'IRQ2 est de basse priorité et que l'IRQ3 est de haute priorité.
011b Cette valeur permet d'indiquer que l'IRQ3 est de basse priorité et que l'IRQ4 est de haute priorité.
100b Cette valeur permet d'indiquer que l'IRQ4 est de basse priorité et que l'IRQ5 est de haute priorité.
100b Cette valeur permet d'indiquer que l'IRQ5 est de basse priorité et que l'IRQ6 est de haute priorité.
101b Cette valeur permet d'indiquer que l'IRQ6 est de basse priorité et que l'IRQ7 est de haute priorité.
111b Cette valeur permet d'indiquer que l'IRQ7 est de basse priorité et que l'IRQ0 est de haute priorité.
3 Ce bit n'est pas utilisé.
4 Ce bit vaut 0 pour indiquer que c'est la commande 2 d'opération normal.
5 à 7 Ces bits permettent d'indiquer la sous-commande:
Valeur Description
000b Cette valeur permet d'effectuer une rotation dans un mode automatique EOI effacé.
001b Cette valeur permet d'effectuer un EOI non spécifique.
010b Cette valeur permet de ne pas effectuer d'opération.
011b Cette valeur permet d'effectuer un EOI spécifique.
100b Cette valeur permet d'effectuer une rotation dans un mode automatique EOI fixé.
100b Cette valeur permet d'effectuer une rotation EOI non spécifique.
101b Cette valeur permet de fixer la priorité de commande.
111b Cette valeur permet d'effectuer une rotation EOI spécifique.

Voici la commande 3 d'opération:

Bits Description
0 à 1 Ces bits permettent d'indiquer le lecture du registre spécifique:
Valeur Description
10b Cette valeur permet d'indiquer que la lecture du registre de requête d'interruption.
11b Cette valeur permet d'indiquer que la lecture du registre en-service.
2 Ce bit doit valoir 0.
3 Ce bit doit valoir 1.
4 Ce bit doit valoir 0 pour demander la commande 3.
5 à 6 Ces bits permettent d'indiquer le masque de mode spécial:
Valeur Description
10b Cette valeur permet d'effacer le mode de masque spécial.
11b Cette valeur permet de fixer le mode de masque spécial.
7 Ce bit doit valoir 0.

Voici la liste des commandes à passer au port 20h:

Valeur Description
00h Cette commande permet d'effectuer une rotation automatique du mode EOI effacé.
0Ah Cette commande permet d'effectuer une lecture du registre de requête d'interruption.
0Bh Cette commande permet d'effectuer une lecture du registre d'interruption en-service.
20h Cette commande permet d'effectuer une commande de fin d'interruption. En assembleur, il suffit de seulement 2 instructions pour exécuter cette commande:

MOV AL,20h
OUT 20h,AL
40h Cette commande permet d'indiquer qu'il ne faut pas effectuer d'opération.
... ...

Références

The Undocumented PC: A programmer's Guide to I/O, CPUs, and Fixed Memory Areas - Second Edition, Edition Addison-Wesley, Frank van Gilluwe, 1997, ISBN: 0-201-47950-8, page 1014 à 1016.

Dernière mise à jour : Samedi, le 2 août 2014