Vous êtes sur la page 1sur 25

Chapitre 3

Interruptions

Sommaire

3.1 Notion d'interruption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43


3.2 Système d'interruptions hiérarchisées . . . . . . . . . . . . . . . . . . . . 45
3.3 Causes d'interruption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.4 Mécanisme d'interruption . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.5 Le PIC 8259 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.6 Gestion des Entrées-Sorties par interruption . . . . . . . . . . . . . . . . 54
3.7 Interruptions Logicielles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.8 La programmation des interruptions . . . . . . . . . . . . . . . . . . . . . 56

3.1 Notion d'interruption

Dénition 3.1 (Interruption). Une interruption est un signal déclenché par un événement in-
terne à la machine ou externe (envoyé au microprocesseur par un périphérique ou un programme)
pour l'avertir d'un évènement à traiter. Le microprocesseur suspend alors l'éxécution en cours à la
n de l' opération courante pour réagir à cet évènement et le traiter (le plus souvent, éxécution d'une
routine ). Une fois la tâche eectuée, il reprend le cours normal de ses opérations à l' endroit où il
avait été interrompu. ■
La plupart des fonctionnalités incluses dans un PC sont physiquement supportées par des compo-
sants autres que le microprocesseur. Par exemple, la communication série est assurée par un UART
16550 (situé dans un ASIC sur la carte mère), ou bien le clavier est controlé par un microcontrolleur
de type 8042. Puisque chaque périphérique (ici interne) travaille individuellement, il est nécessaire
de synchroniser toutes leurs opérations, notamment leurs échanges avec le microprocesseur. Une so-
lution pour ce dernier, consiste à interroger relativement fréquemment l'état de chaque composant.
Il s'agit de la scrutation ou polling.

43
CM_InfoIndus:version du mardi 25 octobre 2005 à 3 h 15
Chapitre 3. Interruptions

gure 3.1: Scrutation

Cette méthode est (évidemment) coûteuse en temps et possède pour inconvénient majeur de
monopoliser le microprocesseur (qui n'a plus de temps à consacrer à ses autres activités). De plus,
lorsque le ot des données est élevé, le microprocesseur peut perdre certaines données.

3.1.1 Interruption matérielle et logicielle


L'attitude préférable consiste à donner la responsabilité à chaque composant d'avertir (on dit
notier ) le microprocesseur en attirant son attention sur la tâche à eectuer en priorité. Il s'agit du
mécanisme (asynchrone) d'interruption. Le périphérique envoie un signal électrique via une patte
spécique du PIC (Program Interrupt Controller : 8259) qui agit ici comme un intermédiaire entre
le périphérique et le microprocesseur. Dans le cas où le PIC alerte le microprocesseur, ce dernier
stoppe son activité courante et saute (on dit qu'il sedéroute ) vers une fonction spécique à executer
(Interrupt Handler : traitant d'interruption) qui a été associée au préalable au périphérique (plus
précisément, associée au vecteur d'interruption du périphérique). Ce type d'interruption est appelée
Interruption Matérielle.

gure 3.2: Interruption

Une alternative consiste à utiliser des interruptions appelées logicielles. Elle possèdent la par-
ticularité d'être synchrones. En eet, elles sont générées par le microprocesseur lorsqu'il rencontre
une instruction de type INT. Ce type d'interruption est plutôt utilisé par le système d'exploita-
tion. Certaines interruptions logicielles sont appelées exceptions (fault, trap and abort). Elles sont
générées par le microprocesseur en présence d'une erreur critique interne.
En résumé, on distingue :
 les interruptions (hardware) internes dites processeur : protection du système et des proces-
sus, appelées par une instruction à l'intérieur d'un programme (overow, erreur d'adressage,
code opération inexistant, problème de parité . . . ) ;
 les interruptions (software) dites logicielles : permet à un processus utilisateur de faire un
appel au système. Elles sont produites par l'instruction INT n où "n" est le type de l'inter-
ruption.
 les interruptions (hardware) externes dites matérielles déclenchées par une unité électronique
(lecteur, clavier, canal, contrôleur de périphérique, panne de courant, . . . ) ou par l'horloge.
Elles sont produites par l'activation des lignes INTR et NMI du microprocesseur.

44
CM_InfoIndus:version du mardi 25 octobre 2005 à 3 h 15
3.2. Système d'interruptions hiérarchisées

3.2 Système d'interruptions hiérarchisées


A chaque interruption, est associée une priorité (système d'interruptions hiérarchisées) qui per-
met de regrouper les interruptions en classes. Chaque classe est caractérisée par un degré d'urgence
d'exécution de son programme d'interruption.
Règle : Une interruption de priorité j est plus prioritaire qu'une interruption de niveau i si j >
i. L'intérêt de ce système est la solution de problèmes tels que :
 arrivée de plusieurs signaux d'interruption pendant l'exécution d'une instruction,
 arrivée d'un signal d'interruption pendant l'exécution du signal de traitement d'une interrup-
tion précédente. On peut utiliser un contrôleur d'interruptions pour regrouper les ls d'inter-
ruptions, gérer les priorités entre les interruptions et donner les éléments de calcul d'adresse
au processeur.
Remarque 3.1 (NMI). Certaines interruptions présentent tellement d'importance qu'il ne doit
pas être possible d'interrompre leur traitement. On masquera alors les autres interruptions pour
empêcher leur prise en compte. Certaines interruptions sont nonmasquables (Non Maskable IRQ) :
on les prend obligatoirement en compte. Une interruption masquée n'est pas ignorée : elle est prise
en compte dès qu'elle est démasquée. Au contraire, une interruption peutêtre désarmée : elle sera
ignorée. Par défaut, les interruptions sont évidemment armées. ■
c'est dans les applications temps réel (conduite de processus industriels ou d'acquisition de
données) que l'on trouve les systèmes d'interruptions les plus élaborés. Dans certains cas chaque
niveau est découpé en sous-niveaux de priorités diérentes. Un bon système doit permettre au
programmeur de pouvoir :
 activer/invalider le système d'interruption dans son ensemble ;
 armer/désarmer chacune des interruptions individuellement : une interruption désarmée est
ignorée ;
 masquer/démasquer individuellement chaque interruption : une interruption masquée n'est
pas ignorée, elle est mémorisée, mais elle n'est prise en compte que lorsqu'elle est démasquée ;
 établir une hiérarchie entre les sources d'interruption avec plusieurs niveaux de priorité, si
possible de façon dynamique ;
 associer un programme spécique à chaque interruption.

Exemple : Priorités et NMI


Imaginons que vous soyez en train d'étudier votre cours. Un camarade arrive pour vous de-
mander un renseignement. Vous terminez la lecture de la phrase en cours, vous mémorisez
mentalement où reprendre votre lecture, puis vous vous interrompez pour lui répondre. Vous
auriez pu continuer en faisant semblant de n'avoir rien entendu : vous auriezmasqué l'interrup-
tion. Pendant votre discussion avec votre camarade, un troisième personnage vient vous poser
une autre question. S'il s'agit d'un autre camarade vous le laisserez patienter quelques minutes
le temps de terminer avec la première demande de renseignement. S'il s'agit de votre professeur
vous allez vous interrompre immédiatement pour pouvoir lui répondre. La demande d'inter-
ruption du professeur a un niveau de priorité supérieur, elle peut interrompre l'interruption
précédente.

3.3 Causes d'interruption


Il y a deux grandes catégories d'interruptions : les interruptions externes et les interruptions
internes.

45
CM_InfoIndus:version du mardi 25 octobre 2005 à 3 h 15
Chapitre 3. Interruptions

Les interruptions externes matérielles sont dues aux périphériques (imprimante, terminal, hor-
loge externe, etc.) ou à des dispositifs extérieurs au système informatique (capteurs, système d'alarme,
etc.). Par exemple un périphérique va générer une interruption pour signaler au système qu'il a ter-
miné de traiter la requête précédente et qu'il est prêt pour recevoir une nouvelle commande. Dans
le contexte de contrôle de processus, des phénomènes physiques doivent être signalés au système,
par exemple le passage d'un objet devant un détecteur. Dans ce cas c'est le dispositif externe au
système qui émet un signal qui est reçu par le système comme une interruption. Le programme cou-
rant lui-même peut déclencher une interruption à l'aide d'une instruction spéciale. Cela permet, par
exemple, d'activer certains services du système qui nécessitent de bénécier de privilèges réservés
au système. C'est une interruption externe et logicielle.
Les interruptions internes produites par le processeur, sur des erreurs par exemple (division par
zéro, dépassement de capacité, erreur d'adressage, accès à une zone de mémoire protégée, etc.). Ces
interruptions sont généralement appelées exceptions. Les interruptions induites par l'horloge per-
mettent la gestion du temps par le système d'exploitation. Par exemple, le système peut programmer
l'horloge pour que celle-ci génère une interruption toutes les 10 ms. A chacune de ces interruptions
le système peut reprendre la main et exécuter un algorithme de choix de tâches (ordonnanceur) de
manière à éviter qu'un programme monopolise le CPU. Ces interruptions peuvent également servir
à la gestion du temps dans les programmes et pour la comptabilité.

3.4 Mécanisme d'interruption


3.4.1 Identication de la source
L'unité centrale dispose d'une entrée spéciale, généralement appelée IRQ (Interrupt ReQuest),
associée à un bit dit bit d'interruption. Avant de passer à l'instruction suivante, le CPU teste l'état
de ce bit. S'il est à 1 le CPU est informé d'une demande d'interruption. Pour pouvoir la traiter il
doit en déterminer l'origine.
Il existe deux méthodes principales pour identier la source d'une interruption : la scrutation
(polling) et l'identication directe. Le choix entre ces deux méthodes est généralement le résultat
d'un compromis coût/performance selon en particulier le nombre potentiel de périphériques qui
peuvent être connectés.
Etudions quelques mécanismes d'identication de la source d'une interruption. De très nom-
breuses architectures sont possibles :
 Un exemple, basé sur le principe de la scrutation, montre que toutes les lignes d'interruption
sont réunies par une porte OU et chacune des lignes correspond à un périphérique. Lorsque
le bit d'interruption est trouvé à 1 par le CPU, une routine de service est activée. Celle-ci
va tester l'état de la ligne de chacun des périphériques pour identier le demandeur, puis
exécuter la tâche correspondante. A la réception d'un signal sur l'entrée IRQ le processeur
émet un signal d'acquittement IACK qui charge l'état des lignes de demande dans un registre.
Le processeur lit ensuite ce registre pour identier l'origine de la demande.
 Il peut aussi n'exister qu'une seule ligne d'interruption que chaque périphérique demandeur
maintient dans un état haut. L'unité centrale (le microprocesseur) est alors obligée d'interroger
chacun des périphériques présents sur le bus pour lui demander s'il requiert un service. La
priorité est ici dénie par l'ordre dans lequel les lignes sont testées. En général dans ce mode
de fonctionnement une interruption n'est elle-même pas interruptible car le mécanisme de
scrutation est assez long.
 Une autre méthode (IRQ : Interrupt ReQuest) consiste en un code envoyé par le périphérique.
Ce code est utilisé pour exécuter une routine de service spécique au périphérique. Ce code

46
CM_InfoIndus:version du mardi 25 octobre 2005 à 3 h 15
3.4. Mécanisme d'interruption

peut être par exemple un pointeur dans une table contenant le vecteur d'interruption de chaque
routine de service. Un vecteur d'interruption contient l'adresse de début de la procédure
de traitement de l'interruption et le registre d'état du processeur nécessaire au début du
traitement. Celui-ci, qui peut contenir certains niveaux de privilèges nécessaires au traitement
de la requête, remplace le registre d'état courant, après que ce dernier ait été sauvegardé dans
la pile avec le reste du contexte du programme interrompu. Le traitement de l'interruption,
qui débute à la première instruction spécique à l'interruption, est donc plus rapide. Dans
ce schéma une routine de service peut elle-même être interrompue. La technique précédente
nécessite un mécanisme pour empêcher deux périphériques d'écrire leur code simultanément
sur le bus. Il est également possible de chaîner les périphériques. La priorité est alors dénie
par la position du périphérique sur la ligne d'interruption : câblage en daisy-chain.

3.4.2 Vecteur d'interruption


Lorsqu'une interruption survient,le microprocesseur a besoin de connaître l'adresse du sous-
programme de service de cette interruption. Pour cela, la source d'interruption place sur le bus de
données un code numérique indiquant la nature de l'interruption. Le microprocesseur utilise ce code
pour rechercher dans une table en mémoire centrale l'adresse du sous-programme d'interruption à
exécuter. Chaque élément de cette table s'appelle un vecteur d'interruption. Lorsque les adresses
des sous-programmes d'interruptions sont gérés de cette manière, on dit que les interruptions sont
vectorisées. Avantage de la vectorisation des interruptions : l'emplacement d'une routine (ISR) peut
être n'importe où dans la mémoire, il sut de spécier le vecteur d'interruption correspondant.
Les interruptions de la famille X86 sont vectorisées. La table des vecteurs d'interruptions (IVT :
Interrupt Vector Table) doit obligatoirement commencer à l'adresse physique 0x00000 dans la
mémoire centrale. Chaque vecteur d'interruption est constitué de 4 octets représentant une adresse
logique du type CS : IP :

gure 3.3: Table des vecteurs d'interruptions

47
CM_InfoIndus:version du mardi 25 octobre 2005 à 3 h 15
Chapitre 3. Interruptions

Lors d'une interruption, le processeur se sert de la table des vecteurs (IVT) décrites à la gure 3.3.
Cette table démarre à l'adresse 0 de la mémoire. Elle contient les adresses des routines d'interruptions
(ISR) sur 4 octets (16 bits pour le segment,16 bits pour le déplacement) et les valeurs de ces quatres
octets sont chargés dans les registres CS :IP. Chaque élément contient l'adresse de début d'un
programme d'interruption sur 4 octets (oset 2 octets, segment 2 octets). La taille de la table est
donc de 4 x 256 = 1 Ko. Elle occupe les adresses 0h à 3FFh en mémoire centrale. Le tableau 3.1
donne le détails des interruptions.

INT (numéro) Nature de l'IT Utilisation usuelle


00 - 01 Exception
02 NMI Erreur de parité en mémoire
03 - 07 Exception
08 IRQ 0 Horloge interne (System Timer)
09 IRQ 1 Gestion Clavier
0A IRQ 2 Redirection PIC 2
0B IRQ 3 Port série COM2 / COM4
0C IRQ 4 Port série COM1 / COM3
0D IRQ 5 Carte Son
0E IRQ 6 Lecteur Disquettes
0F IRQ 7 Port Parallèle
10 - 6F IT Logicielles
70 IRQ 8 Horloge Temps Réel (CMOS)
71 IRQ 9 Redirection IRQ2
72 IRQ 10 Disponible
73 IRQ 11 Disponible
74 IRQ 12 Souris PS/2
75 IRQ 13 Co-processeur Arithmétique
76 IRQ 14 IDE 1
77 IRQ 15 IDE 2
78 - FF IT Logicielles

tableau 3.1: Table des Vecteurs d'Interruptions de la famille Intel X86

3.4.3 Actions à entreprendre


Lorsqu'une interruption est détectée il faut que le système réagisse le plus rapidement possible.
Pour cela le matériel déclenche un branchement automatique vers une routine système préparée
à l'avance (Interrupt Service Routine). Cette routine se trouve à une adresse xe qui peut être
câblée. L'état de la machine doit être sauvegardé. Le contexte (en particulier, la table des pages,
horloge, etc.) du programme interrompu est sauvé, en général dans une pile. Cette sauvegarde du
contexte peut être réalisée par la routine de service elle-même ou prise en charge automatiquement
par l'unité centrale de traitement. En fonction du code identiant le périphérique responsable de
l'interruption, l'adresse de la routine de service associée est chargée dans le compteur ordinal, ce
qui provoque un branchement automatique. Le registre d'état peut également être modié pour
éventuellement bénécier de certains privilèges particuliers. Les interruptions de niveau inférieur ou
égal doivent être masquées. Ce mécanisme est rapide car c'est le matériel (hardware) qui se charge
du branchement vers la routine d'interruption, de la sauvegarde du contexte et la modication du
compteur ordinal. Il ore une grande souplesse car il est possible d'écrire une grande variété de
routines de service. Il peut cependant être pénalisant pour un processeur avec pipe-line et un grand

48
CM_InfoIndus:version du mardi 25 octobre 2005 à 3 h 15
3.5. Le PIC 8259

nombre de registres. Dans certaines architectures, en particulier celles orientées vers les applications
temps réel, un processeur supplémentaire peut être associé au processeur principal avec pour tâche
de gérer les opérations d'entrées/sorties et de ltrer les interruptions.

3.4.4 Reprise du programme interrompu


Le programme en cours est suspendu pendant le temps de traitement de l'interruption. Le
contexte doit ensuite être restauré avant la reprise de son exécution. Au retour de la routine de service
il faut également démasquer les niveaux masqués à son appel. L'interruption est ainsi totalement
transparente. La remise à jour du compteur ordinal provoque le retour au programme à l'instruction
suspendue.

3.4.5 Le partage des interruptions


Comme le montre l'IVT, les IRQ sont en nombre limitées. Ceci a longtemps été la cause de
conits matériels. Ce problème est désormais résolu par le partage des interruptions.
Tout composant dit legacy  ne peut en aucun cas accepter le partage des interruptions. La raison
est très simple. Ces composants sont physiquement connectés aux entrées du contrôleur, alors que
pour pouvoir partager une interruption, il faut bien sûr pouvoir gérer une connexion de plusieurs
lignes d'interruption intermédiaires avant d'en brancher physiquement une sur le contrôleur.
Avec l'avènement du bus PCI, il est possible pour deux cartes d'extension PCI d'utiliser la même
interruption si elles acceptent le partage d'IRQ. Seule la exibilité qu'ore le bus PCI le permet.
De fait, dans le tableau des IRQ, seules les IRQ 9, 10 et 11 peuvent encore être considérées comme
partageables.
En eet, toutes les autres IRQ sont utilisées par des composants legacy, et ce en considérant
que le PC est équipé d'une carte son connectée sur le bus ISA du PC.
Les BIOS des PCs modernes autorisent maintenant aussi le partage d'interruption sur les IRQs
de 3 à 7, à partir du moment où aucun composant legacy n'est connecté dessus. Par exemple, si
vous n'utilisez aucun de vos ports série, vous pouvez alors, depuis le SETUP de certains BIOS, les
déclarer comme inactifs. Ceci correspondra à une réelle déconnexion physique des ports qui seront
alors rendus invisibles et le bénéce direct sera la libération des IRQ 3 et 4 dans cet exemple précis.

Les périphériques PCI peuvent partager les mêmes IRQ parce qu'au démarrage du PC, le BIOS
construit une table appelée PCI IRQ routing table. Cette table contient les entrées de chaque
périphérique PCI qui se verra attribuer un numéro d'IRQ ISA (les numéros de 0 à 15). Ces as-
signations d'IRQ ISA sont aussi liées, par construction matérielle cette fois, aux lignes physiques
d'interruptions PCI associées aux diérents connecteurs PCI d'un PC donné.
L'ensemble des 2 se combine en ce qui s'appelle un Link Value. Ce dernier est utilisé à chaque
fois qu'une communication s'établit avec un périphérique, et bien que des périphériques puissent
partager une même IRQ, ils auront tous un unique Link Value : il n'y a donc pas d'erreur possible !

3.5 Le PIC 8259


Le circuit 8259 est un circuit programmable. Il dispose de plusieurs registres d'E/S. Ce composant
intercepte toutes les demandes d'interruption des périphériques et les communique au microproces-
seur selon leurs priorités.

49
CM_InfoIndus:version du mardi 25 octobre 2005 à 3 h 15
Chapitre 3. Interruptions

gure 3.4: Exemple de partage d'IRQ

3.5.1 Architecture du PIC 8259

gure 3.5: Architecture d'un PIC

A partir de PC avec un 80286, la machine dispose de deux 8259 mis en cascade :

50
CM_InfoIndus:version du mardi 25 octobre 2005 à 3 h 15
3.5. Le PIC 8259

gure 3.6: Liaison entre les 2 PIC et le microprocesseur

Le premier est implanté aux adresses d'E/S 0x20 à 0x2F tandis que le second est implanté aux
adresses d'E/S OxA0 à 0xAF.
Chaque circuit permet la gestion de 8 interruptions et gère :
 la vectorisation avec les processeurs 80x86 ;
 le déclenchement d'IT sur niveaux ou fronts ;
 les priorités des interruptions ;
 les masques d'interruptions.
Le microprocesseur (8086) dispose de trois lignes d'interruptions (matérielles) :
 L'interruption NON MASQUABLE (NMI) : cette interruption ne peut pas être masquée, elle
n'est pas prise en charge par le bit "I" du registre de Flags ;
 Les interruptions MASQUABLES (INTR : INTerrupt Request) : ces interruptions peuvent
être invalidées par le bit "I" du registre de Flags. On trouve aussi INTA (INTerrupt Acknowledgement)
qui signie que le microprocesseur a bien reçu par le bus de données le numéro d'IT envoyé
par le contrôleur ;
 La broche RESET, provoque une réinitialisation du processeur (un reboot de la machine).

gure 3.7: Liaisons matérielles d'un PIC

Lors d'une interruption :


 S'il s'agit d'une interruption matérielle, le processeur nit le traitement de l'instruction en

51
CM_InfoIndus:version du mardi 25 octobre 2005 à 3 h 15
Chapitre 3. Interruptions

cours et passe en mode non interruptible (Flag I) ;


 Le processeur empile le contenu des registres CS et IP (adresse de la prochaine instruction a
exécuter) ;
 Le processeur lit le numéro d'interruption sur le bus de données envoyée par le 8259 si l'inter-
ruption est matérielle ;
 Il le multiplie par 4 pour obtenir l'adresse du vecteur d'interruption ;
 Il charge CS et IP avec les contenus de cette adresse ;
 Il exécute la routine d'interruption jusqu'à l'instruction IRET ;
 Il dépile alors CS et IP ;
 Il reprend le programme en cours d'exécution.
Donc, la routine d'interruption doit acquitter l'interruption pour le 8259 et ré-autoriser le cas
échéant les interruptions (Flag I).
Pour programmer un traitement d'interruption matériel, il faut :
 Autoriser l'interruption par son démasquage (8259) ;
 Ecrire la routine de traitement d'interruptions ;
 Ecrire l'adresse de cette routine dans la table des vecteurs au bon emplacement.
La routine doit contenir les éléments suivants :
 Lecture des E/S liés au périphérique ayant généré l'interruption ;
 Traitement a eectuer ;
 Acquitter l'interruption pour le 8259 (outp 0x20, 0x20) ;
Pour l'installation du traitement d'interruption, il faut masquer toutes les interruptions au niveau
du processeur.

3.5.2 Programmer le PIC 8259

Chaque circuit 8259 dispose :


 d'1 registre de masquage des IT (IMR : Interrupt Mask Register)
 d'1 registre de signalisation des IT (IRR : Interrupt Request Register)
 d'1 registre de traitement des IT (ISR : In Service Register)
 de 4 registres d'initialisation (ICW : Initialization Control Word). Ces registres sont initialisés
au démarrage par le BIOS.
 de 3 registres de contrôle (OCW : Operation Command Word) utilisés pour activer, acquitter
les IT :
 OCW1 permet de positionner les bits dans IMR. Si bit = 1 → interruption masquée, si bit
= 0 → interruption autorisée ;
 OCW2 permet d'acquitter les interruptions suivant 3 modes :

1. Non spécique : annule le bit de l'ISR de plus forte priorité,


2. Spécique : annule un bit de l'ISR, ce bit devra être spécique,
3. Automatique : annule le bit de l'ISR après que le microprocesseur ait accusé réception
de l'interruption.

La première chose a faire est de programmer le registre OCW1 de chaque PIC (PIC1 : adresse
0x21 et PIC2 : adresse 0xA1) pour signier quelles vont être les IRQ masquables ou non en utilisant
les tableaux ?? et ??.

52
CM_InfoIndus:version du mardi 25 octobre 2005 à 3 h 15
3.5. Le PIC 8259

Bit Disable IRQ Fonction Bit Disable IRQ Fonction


0 IRQ 0 Horloge interne 0 IRQ 8 Horloge Temps Réel (CMOS)
1 IRQ 1 Gestion Clavier 1 IRQ 9 Redirection IRQ2
2 IRQ 2 PIC 2 2 IRQ 10 Disponible
3 IRQ 3 Port série COM2 3 IRQ 11 disponible
4 IRQ 4 Port série COM1 4 IRQ 12 Souris PS/2
5 IRQ 5 Carte Son 5 IRQ 13 Co-processeur Arithmétique
6 IRQ 6 Lecteur Disquettes 6 IRQ 14 IDE 1
7 IRQ 7 Port Parallèle 7 IRQ 15 IDE 2

tableau 3.2: Registre OCW1 du PIC 1 (0x21) et du PIC 2 (0xA1)

Remarque 3.2. Si on masque l'IRQ2 du PIC 1, on masque automatiquement les IRQ 8 à 15 du


PIC 2 (du fait de la redirection). ■
Pour masquer une IRQ, il faut la mettre à la valeur 1. Exemple : écrire 0xF7 dans OCW1 autorise
l'IRQ 3 et masque toutes les autres. En pratique, il faut préalablement lire le contenu du registre
de masquage, puis forcer le bit associé au périphérique à contrôler sans modier les autres bits.
Ceci est réalisé par la fonction outp(0x21,(inp(0x21) & 0xF7) ; . Une fois la routine terminée il faut
rétablir l'état préalable des IRQ. Ceci est assuré par la fonction outp(0x21,(inp(0x21) | 0x08) ; . A
la n de la routine (ISR), il ne faut pas oublier l'instruction EOI (End Of Interrupt) par le biais
de la fonction outp(0x20,0x20) ; pour le PIC 1 ou outp(0xA0,0x20) ; pour le PIC 2.

Pour initialiser complètement les PIC, on pourra s'inspirer du code suivant :

void initPIC (void)


{
/* MASTER PIC */
outp(0x20,0x11) ; /* Init ICW1 */
outp(0x21,0x20) ; /* Init ICW2 */
outp(0x21,0x04) ; /* Init ICW3 */
outp(0x21,0x01) ; /* Init ICW4 */
outp(0x20,0xFF) ; /* Masquage des IT */
/* SLAVE PIC */
outp(0xA0,0x11) ; /* Init ICW1 */
outp(0xA1,0x70) ; /* Init ICW2 */
outp(0xA1,0x02) ; /* Init ICW3 */
outp(0xA1,0x01) ; /* Init ICW4 */
outp(0xA1,0xFF) ; /* Masquage des IT */
/* Démasquage des IRQ */
outp(0x21,0x0) ;
outp(0xA1,0x0) ;
}

53
CM_InfoIndus:version du mardi 25 octobre 2005 à 3 h 15
Chapitre 3. Interruptions

3.6 Gestion des Entrées-Sorties par interruption


Chaque dispositif d'entrée sortie comprend en général deux parties : un appareil et un contrôleur
de périphérique. Ce dernier sert d'interface entre l'appareil et le microprocesseur. Il reçoit les requêtes
du microprocesseur et les transforme en commandes spéciques au périphérique, et réciproquement.
Ce mécanisme permet une grande souplesse et ne nécessite pas d'instructions spécialisées à chaque
type possible de périphérique. L'unité centrale de traitement communique avec un périphérique
uniquement en mode lecture ou écriture comme pour la mémoire. Les données proprement dites
sont accompagnées de commandes (actions à réaliser) et d'informations (état du périphérique). Le
contrôleur de périphérique est chargé d'interpréter les requêtes ainsi transmises par le processeur et
il met également en forme les informations à renvoyer au processeur. Un contrôleur peut être équipé
d'un processeur, de registres et d'une mémoire tampon. C'est lui qui déclenche l'envoi d'un signal
d'interruption. Par rapport au dialogue on classe souvent les périphériques en deux catégories (par
caractères : communication par l'intermédiaire de registres et par blocs : information accessible par
blocs disposant chacun d'une adresse). Selon les architectures les adresses des registres ou des blocs
peuvent faire partie de la mémoire principale ou correspondre à des zones distinctes à cette mémoire
centrale. Ces adresses peuvent être attribuées lors de la mise en place du matériel ou congurées
dynamiquement.
Lorsque les quantités de données à échanger sont importantes, il est pénalisant de charger le
processeur de gérer ces échanges. Il est alors préférable de permettre une communication directe
entre le périphérique et la mémoire, ou même entre deux périphériques (DMA). La gestion des
échanges sur le bus de données est alors déléguée à un contrôleur DMA.
Sur le plan logiciel on trouve une couche supplémentaire sous le système d'exploitation pour
lequel, nous avons dit, le contrôle-commande d'un périphérique peut se limiter à des accès mémoire.
Cette couche, appelée pilote ou driver, traduit les commandes générales d'échanges par caractères
ou par blocs en commandes spéciques au périphérique, avec par exemple la gestion des signaux
de contrôle de la liaison, des contraintes de temps à respecter, etc. Ces pilotes sont fournis avec le
matériel.

3.7 Interruptions Logicielles


3.7.1 Interruptions BIOS
Citons les principales interruptions du ROM BIOS :
 IT 0x08 : tic horloge (timer) appelé toutes les 55 ms ( 8,2 fois/s). Elle sert par exemple à
arrêter le moteur de l'unité de disquette lorsque aucun accès à la disquette n'est exécuté. Cette
interruption (après avoir lancé le programme correspondant), appele l'interruption 0x1C. Cette
dernière ne contient qu'un retour IRET an de permettre aux programmeurs d'implanter leurs
propres programmes d'interruption (objectifs : programmation concurrente, multitâche,. . . )
 IT 0x10 à 0x12 : variable selon le matériel connecté. Souvent, IT 10 désigne l'IT vidéo, IT 11
fournit la liste du matériel disponible et IT 12 le calcul de l'espace mémoire disponible
 IT 0x13 : gestion des disques durs
 IT 0x14 : gestion du port série
 IT 0x15 : gestion d'un lecteur de cassettes
 IT 0x16 : gestion du clavier
 IT 0x17 : imprimante
 IT 0x18 : activation du ROM BIOS
 IT 0x19 : reset du système

54
CM_InfoIndus:version du mardi 25 octobre 2005 à 3 h 15
3.7. Interruptions Logicielles

 IT 0x1A : gestion de la date et de l'heure


Les IT de 0 à 7 sont appelées directement par l'U.C. du microprocesseur. Il s'agit de :
 IT 0x0 : division par 0
 IT 0x1 : pas à pas
 IT 0x2 : circuit RAM défectueux
 IT 0x3 : point d'arrêt
 IT 0x4 : débordement
 IT 0x5 : copie d'écran
 IT 0x6 et 0x7 : inutilisées
L'appel d'une interruption logicielle au niveau BIOS se fait par l'intermédiaire de la fonction
int86 et en indiquant le numéro de l'interruption concernée.
Par exemple, la gestion des ports série COM1 et COM2 du PC peut s'eectuer en appelant
l'interruption numéro 0x14. On peut ainsi utiliser les fonctions de base résidentes correspondantes
du BIOS.
On utilise alors la fonction int int86 (int nb, union REGS *inregs, union REGS *outregs) ; où
int86 exécute l'interruption 80x86 logicielle dont le numéro est spécié par "nb". Au retour de
l'interruption, cette fonction recopie les valeurs courantes des registres du 80x86 dans outregs.
inregs peut pointer sur la même structure que outregs.
Cette fonction fait appel à des types particuliers de variables (relatifs au fonctionnement propre
du microprocesseur). On utilise union REGS qui est déclarée de la manière suivante :
union REGS {
struct WORDREGS x ;
struct BYTEREGS h ;
};
La structure union REGS, dénie dans dos.h sert à échanger des informations avec la fonction
int86 en utilisant 2 structures dénies ainsi :
struct BYTEREGS {
unsigned char al, ah, bl, bh ;
unsigned char cl, ch, dl, dh ;
};

struct WORDREGS {
unsigned int ax, bx, cx, dx ;
unsigned int si, di, cag, ags ;
};

3.7.2 Interruptions DOS


Les routines associées au DOS travaillent à un niveau supérieur. Elles peuvent parfois faire appel
à des routines du ROM BIOS. Les principales interruptions associées au DOS sont :
 IT 0x20 : n normale d'un programme ;
 IT 0x21 : appel de sous-routines système ;
 IT 0x22 : gestion de l'adresse de saut après l'exécution d'un programme. Elle ne peut être
activée directement. Elle précise la routine qui reprend le contrôle après la n du programme ;
 IT 0x23 : gestion de l'adresse de saut après un control-break. Idem à ci-dessus ;
 IT 0x24 : gestion de l'adresse de saut en cas d'erreur ;

55
CM_InfoIndus:version du mardi 25 octobre 2005 à 3 h 15
Chapitre 3. Interruptions

 IT 0x25 : lecture directe sur disque ;


 IT 0x26 : écriture directe sur disque ;
 IT 0x27 : programme résident (terminer un programme en le laissant résident).

Un programme est dit résident si, une fois son exécution terminée, il rend le contrôle à l'en-
vironnement appelant mais reste chargé en mémoire. Il pourra alors être réactivé à tout moment,
notamment à l'aide d'une interruption. Lorsqu'il se termine, l'espace mémoire qu'il occupait n'est
pas libéré par le système d'exploitation. Un programme résidant s'écrit comme un autre programme,
il sut que la dernière instruction exécutée soit un appel à la fonction 0x31 (fonction dite TSR :
Terminate and Stay Resident) de l'interruption DOS 0x21.

Remarque 3.3. MS-DOS n'a pas été conçu pour exécuter plusieurs choses à la fois et en particulier
plusieurs appels au système (il n'est pas multi-tâches). Donc, si le programme qui s'exécute en avant-
plan utilise un service de MS-DOS, il ne faut pas que le programme de traitement de l'IT appelle
le même service, sinon c'est généralement le plantage. ■

3.8 La programmation des interruptions

Rappelons brièvement le mécanisme d'interruptions :


 Au moment de l'interruption, le processeur reçoit sur une patte un signal électrique, il passe
automatiquement en mode non interruptible.
 A la réception de ce signal, il termine l'instruction en cours d'exécution puis il sauvegarde les
informations nécessaires à la reprise du programme en cours d'exécution.
 Il lit ensuite l'identité de l'interruption par un dialogue sommaire avec le composant contrôlant
le mécanisme d'interruption.
 Il calcule l'adresse du vecteur d'interruption lié à cette identité d'interruption.
 Il charge depuis cette adresse une adresse pointant sur une routine appelée routine d'inter-
ruption (ISR).
 Il eectue un saut à cette adresse pour exécuter cette routine, souvent la première instruction
de cette routine est de réautoriser les interruptions.
 Il exécute ce code jusqu'à la n de la routine où il trouve une instruction spéciale de n
d'interruption.
 Il restaure l'état précédent l'interruption.
 Il reprend le cours du programme qui était en cours d'exécution.
Ceci est encore illustré par la gure 3.8 :

56
CM_InfoIndus:version du mardi 25 octobre 2005 à 3 h 15
3.8. La programmation des interruptions

gure 3.8: Sous programme d'interruption

Pour faciliter la programmation, on peut utiliser un certain nombre de fonction du langage C


qui sont particulièrement destiné à cet usage.

3.8.1 Fonctions liées aux interruptions


La fonction void keep (int retour, in taille) , prototypée dans dos.h, suspend le programme en
cours d'exécution, le rend résident. taille désigne sa taille et code désigne le code retourné à
l'environnement par ce programme.
La fonction geninterrupt(int num) : déclenche l'IT num sans eectuer de copie de registres,
mais en initialisant les registres à l'aide de pseudo-variables dénies dans dos.h : ah,al,ch,etc. . .
La fonction intdos(union REGS * rin, union REGS * rout) et la fonction
intdosx(union REGS * rin, union REGS * rout, union REGS rseg) permettent d'appeler directe-
ment une routine de traitement de l'IT 0x21.
La fonction biosequip détermine la liste des équipements disponibles (IT 0x11).
La fonction biosmemory calcule l'espace mémoire disponible (IT 0x12).
La fonction biosdisk(int cmd, int face, int piste, int secteur, int nsecteur, void * buer) appele
la fonction cmd de l'IT 0x13.
La fonction bioscom(int cmd, char octet, int port) appele la routine cmd de l'IT 0x14. octet
représente l'octet à écrire si cmd = 1, port désigne le numéro du port.
La fonction bioskey(int cmd) appele la routine cmd de l'IT 0x16.

La fonction biosprint(int cmd, char octet, int port) appele la routine cmd de l'IT 0x18. octet
représente l'octet à écrire si cmd = 0, port donne le numéro du port parallèle.
La fonction biostime(int cmd, long newtime) appele la fonction cmd de l'IT 0x1A. newtime
contient la nouvelle heure en nombre de battements si cmd = 1.
Il existe en C le type interrupt. Lorsqu'une fonction est déclarée de ce type, C va générer du
code pour sauver les registres en début d'exécution et pour terminer la routine avec l'instruction

57
CM_InfoIndus:version du mardi 25 octobre 2005 à 3 h 15
Chapitre 3. Interruptions

IRET signalant le retour d'une interruption. La routine de service doit éviter un appel aux routines
système car le DOS n'est pas réentrant.
Pour réaliser un traitant d'interruption (handler), on dispose de 2 fonctions utiles comme
setvect( ) qui modie le contenu d'un vecteur et getvect( ) qui lit la valeur d'un vecteur. On
dispose aussi de 2 macros disable( ) qui met en attente de traitement tous les signaux d'interruption
et enable( ) qui autorise à nouveau le traitement des interruptions.
La fonction setvect(int num, void interrupt (*f) ( )) insère la fonction f en tant que routine de
service de l'IT num. Pour éviter cette opération, il faut éviter d'être interrompu. Il faut donc faire
précéder l'appel à setvect d'un appel à disable( ) qui masquera toutes les IT. Ensuite, un appel à
enable( ) rendra à nouveau possible l'interruption du programme.

58
Chapitre 4

Port Parallèle

Sommaire
4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.2 Modes de fonctionnement . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
4.3 Programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

4.1 Introduction
Un port parallèle comprend 8 canaux permettant d'envoyer simultanément les huit bits qui
constituent un octet par l'intermédiaire des 8 ls. C'est une interface relativement rapide (par
rapport au port série) qui est traditionnellement utilisée pour les imprimantes. Le seul problème
posé par le port parallèle est qu'il ne peut guère être utilisé avec des câbles longs sans amplier le
signal, au risque de provoquer des erreurs de données. En eet, la longueur ocielle est limitée à
trois mètres sans perte de données. En fait, il est possible de dépasser cette longueur en veillant à
certains points (le câble doit posséder un bon blindage, la présence de transformateur ou autre source
électromagnétique à proximité du câble peuvent générer toutes sortes de dysfonctionnements). Le
Port parallèle a subi plusieurs évolutions :
Port parallèle standard (SPP) : les premiers PC n'étaient pas équipés de diérents types de
ports parallèles. Le seul port parallèle disponible était celui qui servait à envoyer des infor-
mations de l'ordinateur à un périphérique tel qu'une imprimante. Le caractèreunidirectionnel
du port parallèle du PC original était justié par son rôle premier, qui était d'envoyer des
informations à l'imprimante. Il travaillait en mode nibble (envoi de 4 bits à la fois). Par un
procédé astucieux, ce port était cependant capable d'eectuer des connexions de sortie de 8
bits et des connexions d'entrée de 4 bits. Les ports parallèles standard sont capables d'eec-
tuer des connexions à un taux de transfert eectif d'environ 150 Ko/s en sortie et 50 Ko/s en
entrée.
Port parallèle bidirectionnel (BPP) : en 1987, IBM lança le port parallèle complètement 8
bits (en sortie comme en entrée) donc un taux de transfert d'environ 150 Ko/s en entrée et
en sortie.
Port parallèle amélioré (EPP) : le port EPP (Enhanced Parallel Port) correspond à une nou-
velle spécication et est parfois appelé port parallèle mode rapide. Paru en 1991, ce type de
port fonctionne quasiment à la vitesse d'un bus ISA. Ce port permet d'atteindre un débit de
2Mo/s.

59
CM_InfoIndus:version du mardi 25 octobre 2005 à 3 h 15
Chapitre 4. Port Parallèle

Port parallèle à capacité améliorées (ECP) : le port ECP (Enhanced Capabilities Port) a
été sorti en 1992. Tout comme le port EPP, ce port constitue une version améliorée du port
parallèle standard et requiert un circuit logique spécial. Le port ECP très performant requiert
cependant un canal DMA ce qui peut provoquer des conits avec d'autres périphériques qui
utiliserait un canal DMA. Les nouveaux ordinateurs sont généralement fournis avec des ports
ECP permettant d'eectuer des communications à haut débit. La plupart du temps, les ports
ECP peuvent être convertis en port EPP ou en port parallèle standards par l'intermédiaire du
BIOS (au setup). Il est seulement préférable de placer ce port en mode EPP pour bénécier
d'un débit maximal.

4.1.1 Principales Caractéristiques


En résumé

SPP EPP ECP


unidirectionnel bidirectionnel bidirectionnel
simplex half-duplex half-duplex
No control Software control Hardware control
très lent lent rapide
pas de protocole protocole (hanshake) simple protocole (handshake) compliqué

tableau 4.1: Diérentes caractéristiques des ports parallèles

La diérence principale entre EPP et ECP se situe dans le fait que EPP génère et contrôle tous
les transferts vers et depuis le périphérique tandis que ECP nécessite que le périphérique négocie le
mode reverse et contrôle le protocole (utilisation d'un controlleur dédié à l'utilisation du port ECP).

4.1.2 Norme IEEE 1284


Le standard IEEE de signaux d'interface bidirectionnelle de périphériques de port parallèle
pour PC, adopté dans sa version nale en mars 1994, dénit les caractéristiques physiques du port
parallèle, ses modes de transfert de données et ses caractéristiques physiques et électriques.
Ainsi dénit-il le comportement des signaux électriques externes au PC applicable à un port
parallèle multi-mode fonctionnant en mode 4 bits, 8 bits, EPP et ECP. Tous les types de modes ne
sont pas requis dans le cadre du standard 1284, qui prévoit la possibilité d'en ajouter d'autres.
Le standard IEEE 1284 vise à dénir le comportement des signaux entre un PC et un périphé-
rique connecté, et plus particulièrement une imprimante, mais il intéresse également particulière-
ment les fabricants de périphériques utilisant le port parallèle (disques durs, adaptateurs de réseaux
locaux, etc.).
C'est un standard de niveau matériel exclusivement et il ne précise donc pas comment le logiciel
doit communiquer avec le port, mais il a donné lieu à un standard supplémentaire destiné à dénir
une interface de niveau logiciel. Ainsi la commission IEEE 1284.3 a-t-elle été formée pour élaborer un
standard d'interface de niveau logiciel à utiliser avec le matériel conforme au standard IEEE 1284.
Ce standard, qui vise à éliminer les disparités existant entre les puces de port parallèle des diérents
fabricants, comporte une spécication destinée à faire contrôler le fonctionnement du mode EPP
par le BIOS du PC.

60
CM_InfoIndus:version du mardi 25 octobre 2005 à 3 h 15
4.1. Introduction

4.1.3 Signaux

gure 4.1: Connecteur DB25 pour SPP

SPP EPP ECP


1 STRB R/W Host CLK
2-9 D0-D7 D0-D7 D0-d7
10 ACK INT Periph CLK
11 BUSY WAIT Periph ACK
12 PAPER OUT Reverse ACK
13 SELECT X FLAG
14 AUTO FEED DATA STRB Host ACK
15 ERROR Periph Request
16 INIT/RESET RESET Reverse Request
17 SEL IN ADR STRB 1284 Active
18-25 GND GND GND

tableau 4.2: Signaux des ports parallèles SPP, EPP et ECP

 STROBE : cette ligne active à l'état bas indique à l'imprimante que des données sont présentes
sur les lignes D0 à D7 et qu'il faut les prendre en compte.
 ACK : l'imprimante met à 0 cette ligne pour indiquer à l'ordinateur qu'elle a bien reçu le
caractère transmis et que ce dernier peut continuer la transmission.
 BUSY : cette ligne est mise à 0 par l'imprimante lorsque son buer de réception est plein.
L'ordinateur est ainsi averti que celle-ci ne peut plus recevoir de données. Il doit attendre que
cette ligne revienne à 1 pour recommencer à émettre.
 PAPER OUT : l'imprimante indique par cette ligne à l'ordinateur que l'alimentation en papier
a été interrompue.
 SELECT : cette ligne indique à l'ordinateur si l'imprimante est on line ou o line.
 AUTOLINEFEED : lorsque ce signal est à 1, l'imprimante doit eectuer un saut de ligne à
chaque caractère return reçu. En eet, certaines imprimantes se contentent d'eectuer un
simple retour du chariot en présence de ce caractère.
 ERROR : indique à l'ordinateur que l'imprimante a détecté une erreur. INIT-RESET : l'or-
dinateur peut eectuer une initialisation de l'imprimante par l'intermédiaire de cette ligne.
 SELECT IN : l'ordinateur peut mettre l'imprimante hors ligne par l'intermédiaire de ce signal.
 GND : c'est la masse du PC.

61
CM_InfoIndus:version du mardi 25 octobre 2005 à 3 h 15
Chapitre 4. Port Parallèle

4.1.4 Protocole
Voici un exemple de dialogue entre un PC et une imprimante :

gure 4.2: Dialogue avec une imprimante

gure 4.3: Handshake : timing

4.2 Modes de fonctionnement


4.2.1 Mode standard SPP
Initialement, le port parallèle standard (SPP) se décompose en 3 registres :
 registre de données : le port conserve l'octet à écrire sur les sorties de données (D0 à D7). Dans
les ports bidirectionnels, lorsque le port est conguré comme entrée, le registre de données
conserve l'octet à lire sur les contacts de données du connecteur.
 registre d'état : il maintient les états logiques de cinq entrées (S3 àS7). Il fonctionne en lecture
seule, sauf pour le signal S0 qui est un repère de n de séquence ( timeout ag) pour les ports
acceptant des transferts en mode EPP et qui peut être annulé par logiciel.

62
CM_InfoIndus:version du mardi 25 octobre 2005 à 3 h 15
4.2. Modes de fonctionnement

 registre de commande : il garde l'état de quatre bits (C0 à C3) qui sont habituellement utilisés
comme sorties.
L'adresse de base pour le port LPT1 est habituellement 0x378 (0x278 pour LPT2)

Oset Reg. R/W bit fonc. Oset Reg. R/W bit fonc. Oset Reg. R/W bit fonc.
Base+0 Données W 7 D7 Base+1 Etat R 7 busy Base+2 Commande R/W 7 inutilisé
6 D6 6 ack 6 inutilisé
5 D5 5 paper out 5 bidirectionnel
4 D4 4 select in 4 IRQ via Ack
3 D3 3 error 3 selec printer
2 D2 2 IRQ 2 reset printer
1 D1 1 reservé 1 auto linefeed
0 D0 0 reservé 0 strobe

tableau 4.3: Registres du 8255

Son protocole simplié est décrit par la gure 4.4 suivante :

gure 4.4: Protocole Centronics

 les données sont appliquées sur le port (D0-D7) ;


 imprimante occupée ? (busy ?)
 le programme manipule la ligne nStrobe, attend 1 µs puis re-manipule la ligne ;
 les données sont lues sur front montant de nStrobe ;
 l'imprimante indique son état par la ligne Busy ;
 Une fois les données acceptées par l'imprimante, elle envoie un ACK (impulsion négative de
5 µs sur nAck).

4.2.2 Mode étendu EPP

Pour gagner du temps au niveau du protocole, on a ignoré l'accusé de réception ACK. De plus,
dans ce mode, c'est le hardware qui eectue la totalité du Handshaking a votre place. La seule
chose qui incombe au programmeur est d'écrire l'octet de données sur le port. Ce mode permet
des transferts rapides d'octets dans les deux directions. Les signaux de protocole d'accord font la
distinction entre transfert de données et d'adresse. Il possède des registres supplémentaires (voir
tableau ??).

63
CM_InfoIndus:version du mardi 25 octobre 2005 à 3 h 15
Chapitre 4. Port Parallèle

gure 4.5: Signaux et DB25 en mode étendu (EPP)

Le mode EPP permet des transferts à haute vitesse dans les deux sens. Comme il peut com-
muter rapidement le sens de transfert, le port EPP est utile pour des dispositifs qui échangent des
petits blocs de données avec de fréquents changements de direction, tels que lecteurs de disques
externes ou interfaces de réseaux. Un port EPP fait la distinction entre deux types d'informations,
habituellement dénis comme données et adresses. Le mode EPP permet quatre opérations : écri-
ture d'adresse (gure ??), écriture de données (gure ??), lecture d'adresses (gure ??), lecture de
données (gure ??), chacune ayant un protocole d'accord diérent. Les transferts EPP dièrent du
mode SPP par le fait que les circuits du port génèrent automatiquement des signaux de contrôle et
détectent les réponses venant de l'autre extrémité. Il n'est donc pas nécessaire d'instructions par un
logiciel pour charger l'état du signal de sortie Strobe ou pour lire une entrée occupée. Les opérations
de donnée et d'adresse en mode EPP utilisent diérents signaux de contrôle pour verrouiller les oc-
tets dans le dispositif de réception. Écritures et lectures d'adresse utilisent nAStrobe (C3), lectures
et écritures de données utilisent nDStrobe (C1) : ceci est un moyen simple pour que le récepteur
fasse la distinction entre les deux types d'information. Un port EPP utilise 8 registres (tableau 5),
cinq de plus que le port original SPP.

gure 4.6: Lecture et écriture d'une donnée en mode EPP

64
CM_InfoIndus:version du mardi 25 octobre 2005 à 3 h 15
4.2. Modes de fonctionnement

gure 4.7: Lecture et écriture d'une adresse en mode EPP

4.2.3 Mode étendu ECP


Ce port possède aussi des registres supplémentaires (voir tableau ??).

gure 4.8: Signaux et DB25 en mode étendu (ECP)

Le mode ECP permet également le transfert rapide de données dans les deux sens. Il comporte
un tampon FIFO de 16 octets pour garder les données à envoyer et les données reçues. Pour les
transferts les plus rapides, le port ECP peut compresser les données pour conditionner l'information
en moins d'octets. L'accès direct à la mémoire (DMA) permet à l'unité centrale de faire d'autres
actions pendant que les données sont transmises entre le tampon et la mémoire. En plus d'être
rapide, les transferts en mode ECP sont exibles : ils peuvent s'accommoder à des périphériques
plus lents, parce que le protocole d'accord n'a pas de timeout automatique. Les signaux de protocole
d'accord font la distinction entre données et signaux de contrôle. Un octet de contrôle peut contenir
une adresse ou une information de compression de données. Du côté de l'hôte, le port ECP contient
un tampon FIFO de 16 octets qui stocke les données à envoyer et les données reçues. L'unité centrale
(CPU) peut écrire une série d'octets dans le tampon et les circuits du port veillent à les écrire dans la
même séquence sur les sorties Données du port. Dans le sens opposé, les tampons stockent une série
d'octets reçus et la CPU lit chaque octet avant que le suivant n'arrive. Si le PC envoie des données
vers un périphérique lent, le PC peut écrire jusqu'à 16 octets dans le tampon FIFO et faire d'autres
choses ensuite. Le port ECP transférera les données automatiquement lorsque le périphérique sera
prêt. De même, si un périphérique rapide veut envoyer des données vers un PC, le tampon FIFO
du PC en stocke jusqu'à 16 octets de données reçus, que le PC pourra lire à son gré.

65
CM_InfoIndus:version du mardi 25 octobre 2005 à 3 h 15
Chapitre 4. Port Parallèle

gure 4.9: Commande et Data forward

gure 4.10: Commande et Data reverse

4.3 Programmation

4.3.1 Interruption logicielle

Le paramétrage des ports parallèles est beaucoup plus simple que celui des ports sériels. En
standard, le PC est équipé d'un seul port parallèle, mais il serait tout à fait possible d'en rajouter
un second. Dans la plupart des BIOS, une interruption est d'ailleurs réservée d'oce à cet eet,
que le port soit présent ou non. Dans de nombreux cas, le second port est désactivé et l'IRQ 5 est
réutilisée pour un autre composant.

66
CM_InfoIndus:version du mardi 25 octobre 2005 à 3 h 15
4.3. Programmation

4.3.2 Tableau des registres pour tous les modes


Adresse Type de Port Fonction
base SPP (W), EPP (W), ECP (mode 0 et 1) données
ECP (mode 3) Adresse FIFO
base+1 SPP, EPP, ECP état
base+2 SPP, EPP, ECP commande
base+3 EPP adresse
base+4 EPP (R/W) données
base+5 EPP autre fonction
base+6 EPP autre fonction
base+7 EPP autre fonction
base+0x400 ECP (mode2 et 3) données FIFO
ECP (mode 6) test FIFO
ECP (mode 7) Cong reg. A
base+0x401 ECP (mode 7) Cong reg. B
base+0x402 ECP (tous modes) ECR (Extended Control Register)

67