CONTROLEUR INTERRUPTION PC/AT


     *****************************************************
     *      CONTROLEUR D'INTERRUPTIONS 8259    PC/AT     *
     *****************************************************


1. Generalites

La gestion des interruptions est assuree par deux circuits controleur
d'interruptions 8259 (PIC = Programmable Interrupt Controler) montes en
cascades ; l'un est appele controleur maitre et l'autre esclave.
Le systeme dispose ainsi de 15 niveaux d'interruptions hierarchises,
chaque niveau pouvant etre valide ou masque individuellement.

Lorsqu'une demande d'interruption (IRQ) est detectee par le controleur
maitre, si l'interruption est validee, il genere un signal INT de demande
d'interruption vers le microprocesseur ; dans le cas du controleur
esclave, ce signal est applique sur l'entree IRQ2 du controleur maitre qui
genere lui-meme le signal INT vers le microprocesseur.

Si l'interruption est autorisee par le processeur, celui-ci execute deux
cycles INTA :
- le premier pour signaler que la demande est honoree,
- le second pour demander au controleur d'interruptions de deposer son
  vecteur d'interruption sur le bus de donnees ; ce vecteur (de 0 a 255),
  multiplie par quatre, pointe l'emplacement en memoire de l'adresse du
  programme de gestion de l'interruption ; le microprocesseur se branche
  automatiquement a cette adresse apres avoir effectue une sequence de
  sauvegarde des registres (Voir documentation du BIOS).
 Le controleur esclave genere lui-meme son vecteur d'interruption,
l'arbitrage etant assure par les signaux CAS0 a CAS2.

Le 8259 maitre (IRQ0 a IRQ7) occupe 2 adresses d'entrees-sorties :
- 0020H pour les registres : OCW2,OCW3(IRR,ISR),ICW1
- 0021H pour les registres : OCW1,ICW2,ICW3,ICW4

Le 8259 esclave (IRQ8 a IRQ15) occupe 2 adresses d'entrees-sorties :
- 00A0H pour les registres : OCW2,OCW3(IRR,ISR),ICW1
- 00A1H pour les registres : OCW1,ICW2,ICW3,ICW4

       |------------------|  IRQ0
       |              IRQ0|------------ Horloge temps reel 8254 (timer)
       |                  |
       |                  |  IRQ1
       |              IRQ1|------------ Clavier
       |                  |
       |                  |  IRQ2
       |  8259        IRQ2|-------|     Chainage 8259 esclave
       |  maitre          |       |
       |                  |  IRQ3 |
       |              IRQ3|-------|---- COM2
       |                  |       |     + Cartes extension
INTR --|INT               |  IRQ4 |
       |              IRQ4|-------|---- COM1
       |                  |       |     + Cartes extension
       |                  |  IRQ5 |
       |              IRQ5|-------|---- Cartes extension
       |                  |       |
       |                  |  IRQ6 |
       |              IRQ6|-------|---- Interface disquettes
       |                  |       |     + Cartes extension
       |                  |  IRQ7 |
       |              IRQ7|-------|---- Interf. imp. (non utilisee,
       |------------------|       |     + Cartes extension
    |-----------------------------|
    |  |------------------|  IRQ8
    |  |              IRQ0|------------ Horloge dateur programmable
    |  |                  |              146818
    |  |                  |  IRQ9
    |  |              IRQ1|------------ Cartes extension
    |  |                  |
    |  |                  |  IRQ10
    |  |  8259        IRQ2|------------ Cartes extension
    |  |  esclave         |
    |  |                  |  IRQ11
    |  |              IRQ3|------------ Cartes extension
    |  |                  |
    |--|INT               |  IRQ12
       |              IRQ4|------------ Cartes extension
       |                  |
       |                  |  IRQ13
       |              IRQ5|------------ 80287
       |                  |
       |                  |  IRQ14
       |              IRQ6|------------ Cartes ext. (carte disque)
       |                  |
       |                  |  IRQ15
       |              IRQ7|------------ Cartes extension
       |------------------|

Fig.1. - Schema d'affectation des interruptions




2. Affectation des interruptions

IRQ0 : Horloge temps reel (18,2Hz), sortie voie 0 du 8254.

IRQ1 : Interface clavier, controleur 8042.

IRQ2 : Reserve mise en serie controleur d'interruption No2

      -IRQ8 : Horloge dateur programmable 146818.

      -IRQ9 : Cartes extension

      -IRQ10 : Cartes extension.

      -IRQ11 : Cartes extension.

      -IRQ12 : Cartes extension.

      -IRQ13 : 80287 en option.

      -IRQ14 : Cartes extension (carte disque).

      -IRQ15 : Cartes extension.

IRQ3 : Interface serie COM2 + Cartes extension.

IRQ4 : Voie serie COM1 + Cartes extension.

IRQ5 : Cartes extension.

IRQ6 : Controleur disquettes et Cartes extension.

IRQ7 : Interface parallele imprimante et cartes extension.




3. Registres et programmation du 8259

La programmation de ce circuit comprend deux types de commandes :
- Les commandes d'initialisation effectuees par une sequence dans l'ordre
  ICW1,ICW2,ICW3,ICW4
- Les commandes d'operations generees a tout moment apres les commandes
  d'initialisation : OCW1,OCW2,OCW3.

Apres un reset, le controleur est dans l'etat suivant :
- la detection des interruptions est remise a zero,
- le masque d'interruption est efface,
- la priorite la plus basse est IRQ7,
- l'adresse du mode esclave est mise a 7,
- le mode de masque special est efface.



ICW1 : registre mode de fonctionnement

|---------------------------------------|
|                  ICW1                 |
|----|----|----|----|----|----|----|----|
| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
|----|----|----|----|----|----|----|----|
|  X |  X |  X |  1 |LTIM|  1 |SNGL|  1 |
|----|----|----|----|----|----|----|----|
                    |  1 |    |  0 |
                    |----|    |----|
b4 : a 1 indique que c'est le registre ICW1 qui est adresse.

LITM : (Level Input Triggered Mode)detection des interruptions sur :
- 0 : un front montant.
- 1 : un niveau

SNGL : (SiNGLe)
- 1 : un seul 8259 ; pas de programmation de ICW3 a l'initialisation.
- 0 : plusieurs 8259 en cascade ; dans ce cas, l'initialisation prevoit de
  preciser le mode de mise en cascade avec le mot ICW3.

ICW2 : registre vecteur d'interruption

|---------------------------------------|
|                  ICW2                 |
|----|----|----|----|----|----|----|----|
| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
|----|----|----|----|----|----|----|----|
| T7 | T6 | T5 | T4 | T3 |  X |  X |  X |
|----|----|----|----|----|----|----|----|
|  0 |  0 |  0 |  0 |  1 |  X |  X |  X |maitre
|----|----|----|----|----|----|----|----|
|  0 |  1 |  1 |  1 |  0 |  X |  X |  X |esclave
|----|----|----|----|----|----|----|----|

T7 a T3 : constituent la partie haute du vecteur d'interruption tandis que
les trois bits de poids faibles (T2 a T0) sont ajoutes automatiquement
suivant le numero d'ordre de l'interruption qui a provoque l'interruption.

Pour le maitre, les vecteurs d'interruption vont de INT08H a INT0FH
(pointent les adresses de 000020H a 00003FH).

Pour l'esclave, les vecteurs d'interruption vont de INT70H a INT77H
(pointent les adresses de 0001C0H a 0001DFH).



ICW3 : registre configuration en cascade

|---------------------------------------|
|                  ICW3                 |
|----|----|----|----|----|----|----|----|
| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
|----|----|----|----|----|----|----|----|-
| S7 | S6 | S5 | S4 | S3 | S2 | S1 | S0 | |
|----|----|----|----|----|----|----|----|  --  maitre
|  0 |  0 |  0 |  0 |  0 |  1 |  0 |  0 | |
|----|----|----|----|----|----|----|----|-
|  0 |  0 |  0 |  0 |  0 | ID2| ID1| ID0| |
|----|----|----|----|----|----|----|----|  -- esclave
|  0 |  0 |  0 |  0 |  0 |  0 |  1 |  0 | |
|----|----|----|----|----|----|----|----|-

Ce mot est interprete  par le 8259 de deux facons differentes suivant
qu'il s'agit d'un maitre ou d'un esclave. Cette reconnaissance se fait par
la broche SP/EN du boitier qui est a l'etat haut pour le maitre et a
l'etat bas pour l'esclave (ici le mode sans buffer est utilise, voir bit
BUF de ICW4).

S7 a S0 : a 1, chaque bit indique qu'un 8259 est branche sur la broche IRQ
correspondante.

ID2 a ID0 : numero de l'interruption cascadee = numero identificateur de
l'esclave. L'esclave sera active lorsqu'il reconnaitra ce numero sur les
trois lignes de mise en cascade CAS0 a CAS2 ; il placera alors le vecteur
d'interruption sur le bus de donnees.


ICW4 : registre fin d'interruption

|---------------------------------------|
|                  ICW4                 |
|----|----|----|----|----|----|----|----|
| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
|----|----|----|----|----|----|----|----|
|  0 |  0 |  0 |SFNM| BUF| M/S|AEOI|  1 |
|----|----|----|----|----|----|----|----|
               |  1 |  0 |  X |  1 |
               |----|----|----|----|

SFNM : (Special Fully Nested Mode)
- 0 : mode normal d'imbrication des interruptions. Le bit correspondant du
  registre des interruptions en service ISR est mis a 1 et reste dans cet
  etat jusqu'a ce qu'une fin d'interruption survienne ou, si la fin
  d'interruption automatique est programmee, jusqu'au dernier front
  montant du signal INTA.
- 1 : ce bit autorise le mode special d'imbrication des interruptions ;
  dans ce mode, un esclave qui a deja une interruption en service pourra
  en faire prendre en compte d'autres par le maitre, si elles sont de plus
  forte priorite (dans le mode normal, le maitre les ignore jusqu'a la
  commande EOI).

BUF : (BUFfer)
- 0 : sans buffer
- 1 : avec buffer ; dans ce cas la broche SP/EN est utilisee en sortie
  pour commander un buffer bidirectionnel externe.

M/S : (Master/Slave) en mode buffer, ce bit indique:
- 0 : le circuit esclave
- 1 : le circuit maitre.

AEOI : (Automatique End Of Interrupt)
- 1 : mode automatique de fin d'interruption, le bit concerne d'ISR est
  remis a 0 des la fin du deuxieme INTA.
- 0 : un mot de commande specifique doit etre envoye avant le retour de la
  procedure d'interruption.

OCW1 : registre masque des interruptions  (lecture/ecriture)

Il contient le masque individuel des interruptions.
|---------------------------------------|
|                  OCW1                 |
|----|----|----|----|----|----|----|----|
| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
|----|----|----|----|----|----|----|----|
| M7 | M6 | M5 | M4 | M3 | M2 | M1 | M0 |
|----|----|----|----|----|----|----|----|
Un bit a 1 correspond a inhiber l'interruption portant le meme numero
d'ordre ; un 0 correspond a l'autoriser.


OCW2 : registre priorite des interruptions

Il determine le niveau de priorite des interruptions presentes dans le
registre IRR.
|---------------------------------------|
|                  OCW2                 |
|----|----|----|----|----|----|----|----|
| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
|----|----|----|----|----|----|----|----|
|  R | SL | EOI|  0 |  0 | L2 | L1 | L0 |
|----|----|----|----|----|----|----|----|
|    |    |    |----|----|------|-------|
|    |    |    |  OCW2      No de l'interruption
|    |    |    |            concernee (0 a 7)
|    |    |    |                |
|    |    |    |                |----------------------|
|    |    |    |                                       |
|----|----|----|                                       |
|  0 |  1 |  1 |Fin d'interruption No            |     |
|----|----|----|                                 |     |
|  1 |  1 |  1 |Rotation a chaque int.No         |-----|
|----|----|----|                                 |
|  1 |  1 |  0 |La priorite la plus elevee est No|
|----|----|----|
|  0 |  0 |  1 |Fin d'interruption
|----|----|----|
|  1 |  0 |  1 |Rotation des priorites a chaque EOI non specifique
|----|----|----|
|  1 |  0 |  0 |Rotation des priorites a chaque EOI
|----|----|----|
|  0 |  0 |  0 |Arret de rotation automatique
|----|----|----|
|  0 |  1 |  0 |Pas d'operation
|----|----|----|

OCW3 : registre gestion des interruptions

|---------------------------------------|
|                  OCW3                 |
|----|----|----|----|----|----|----|----|
| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
|----|----|----|----|----|----|----|----|
|  0 |ESMM| SMM|  0 |  1 |  P | RR | RIS|
|----|----|----|----|----|----|----|----|
ESMM : (Enable Special Mask Mode) a 1, ce bit autorise SMM, sinon le bit
SMM est ignore.

SMM : (Special Mask Mode)
- 1 : mode special selectionne,
- 0 : mode special arrete.
Le mode special de masquage permet de resoudre des problemes d'occupation
abusive du CPU par une routine d'interruption ; en effet, lorsque l'une
d'elle demande un temps d'execution important, elle bloque toutes celles
qui ont une priorite plus faible.
Il n'est pas toujours possible de placer ces routines longues en faible
priorite car il peut etre necessaire d'executer une tache importante au
debut de la procedure d'interruption.
Par contre, une fois cette tache accomplie, il est possible d'accepter les
priorites plus faibles avant la fin de la procedure.
Pour cela, il faut executer la sequence d'operation suivante :
- masquer uniquement le bit correspondant a la routine en cours.
- mettre le 8259 en mode special de masquage a l'aide de OCW3.
- autoriser les interruptions : toutes les interruptions sont alors
  autorisees sans tenir compte de leur priorite plus faible.
Avant de sortir de la routine, il faut executer une sequence inverse :
 - bloquer le mode special de masquage.
 - retablir un masquage normal.

RR : (Read Register = lecture registre) autorise la lecture des registres
IRR ou ISR si ce bit est a 1. Le choix de ce registre est determine par
RIS. Lorsque, ensuite, le microprocesseur fait une lecture (A0=0), celui-
ci lira le contenu de ISR ou IRR sur le bus de donnees.

RIS : (Read In Service = lecture en service)
- 1 : registre ISR
- 0 : registre IRR

P : (Poll command = commande de scrutation)
- 0 : mode normal
- 1 : le signal INT est inhibe ; chaque lecture du microprocesseur est
  consideree comme une reconnaissance d'interruption ; durant cette
  lecture le 8259 met sur le bus le mot suivant :
|--|--|--|--|--|--|--|--|
|b7|b6|b5|b4|b3|b2|b1|b0|
|--|--|--|--|--|--|--|--|
| I| X| X| X| X|W2|W1|W0|
|--|--|--|--|--|--|--|--|
W2 a W0 : est le numero de la demande d'interruption de plus haute
priorite.
I : est a 1 lorsqu'une interruption a ete demandee.



IRR : (Interrupt Request Register = registre demande d'interruption)

Ce registre 8 bits memorise les demandes suivant leur numero
d'interruption IRQ ; chaque bit est actif (demande d'interruption) a
l'etat 1.



ISR : (In Service Register = registre interruption en service)

Registre de 8 bits. Le bit d'IRR de plus haute priorite est inscrit dans
ISR tandis qu'il est remis a 0 dans IRR.
Dans le mode automatique, le bit de ISR est remis a zero des que le
vecteur d'interruption a ete lu (voir bit AEOI de ICW4) : la demande
d'interruption est consideree comme servie ; dans le cas contraire, un mot
de commande est necessaire pour effacer le bit concerne.





4. Signaux d'entrees-sorties du 8259

               |-----| |------|
            CS*|1    |-|    28|VCC
            WR*|2   8259    27|A0
            RD*|3           26|INTA*
             D7|4           25|IRQ7
             D6|5           24|IRQ6
             D5|6           23|IRQ5
             D4|7           22|IRQ4
             D3|8           21|IRQ3
             D2|9           20|IRQ2
             D1|10          19|IRQ1
             D0|11          18|IRQ0
           CAS0|12          17|INT
           CAS1|13          16|SP*/EN*
            GND|14          15|CAS2
               |--------------|

          Fig.2. - Brochage du 8259

D0 a D7 : Bus de donnees bidirectionnel 8 bits.

RD* : Entree commande de lecture.

WR* : Entree commande d'ecriture.

A0 : Entree selection adresse interne.

CS* : Entree selection du circuit (decodage d'adresse).

CAS0 a CAS2 : Lignes de mise en cascade des 8259 pour arbitrage.

SP*/EN* : (Slave Program/Enable) entree activation de l'esclave ou sortie
de controle du buffer bus de donnees.

IRQ0 a IRQ7 : Entrees des signaux de demande d'interruption.

INT : Sortie du signal de demande d'interruption vers le microprocesseur
ou un 8259 maitre.

INTA* : Entree du signal d'acquittement genere par le microprocesseur.