Archi2 Chap4 PIC8259A
Archi2 Chap4 PIC8259A
Archi2 Chap4 PIC8259A
1
PLAN Global
2
CHAPITRE III
Le contrôleur programmable
d’interruption (PIC ou 8259)
Le contrôleur programmable d’interruption
6
Le contrôleur programmable d’interruption
• 2) Registres internes
IRR (Interrupt Request Register) : Mémorise les demandes d’IT
8
Organisation interne du 8259
INTA INT
Data
D0-D7 Buffer
Control logic
RD IR0
WR Read/Write
logic IR1
A0 In Interrupt IR2
Service Request IR3
Priority Register
CS Register IR4
Resolver
IR5
ISR IRR IR6
CAS0 IR7
Cascading
CAS1
logic
CAS2
3) Architecture
3) Architecture
12
Le contrôleur d’interruptions programmable
4) Programmation du PIC
13
La séquence d’initialisation
14
La séquence d’initialisation
1/ ICW1
Permet d’indiquer le mode de fonctionnement du PIC, le
mode de détection d’IT et la nécessité ou non de ICW4
16
La séquence d’initialisation
2/ ICW2
Attribue à chaque broche IRQi un numéro d’interruption.
Ce mot précise le numéro de l’IRQ, le 8259 assigne des
numéros consécutifs pour les sept autres broches.
18
La séquence d’initialisation : ICW2
28h / 4 = 0Ah
0Ah - 2 (from IRQ2) = 08h
ICW2 = 08h
19
La séquence d’initialisation
3/ ICW3
Permet l’identification des PICs esclaves. Il est interprété par le
8259 de deux façons différentes suivant qu'il s'agit d'un maitre
ou d'un esclave.
ICW3 pour le maître
Normale
21
La séquence d’initialisation
• Mode Emboitable Partiel
PIC SLAVE
ISR IRR
PIC MASTER IRQ0
0 0
ISR IRR
0 0
0 0
0 0
0 0
0 0
0 0 IRQ4
0 1
0 0
0 0
0 0
INTR 0 0
0 0
0 0 IRQ7
0 0
0 0
INTA
22
La séquence d’initialisation
• Mode Emboitable Partiel
PIC SLAVE
ISR IRR
PIC MASTER IRQ0
0 0
ISR IRR
0 0
0 0
0 0
0 0
0 0
0 1 IRQ4
0 1
0 0
0 0
0 0
INTR 0 0
0 0
0 0 IRQ7
0 0
0 0
INTA
23
La séquence d’initialisation
• Mode Emboitable Partiel
PIC SLAVE
ISR IRR
PIC MASTER IRQ0
0 0
ISR IRR
0 0
0 0
0 0
0 0
0 0
0 1 IRQ4
0 1
0 0
0 0
0 0
INTR 0 0
0 0
0 0 IRQ7
0 0
0 0
INTA
24
La séquence d’initialisation
• Mode Emboitable Partiel
PIC SLAVE
ISR IRR
PIC MASTER IRQ0
0 0
ISR IRR
0 0
0 0
0 0
0 0
0 0
1 0 IRQ4
1 0
0 0
0 0
0 0
INTR 0 0
0 0
0 0 IRQ7
0 0
0 0
INTA
26
La séquence d’initialisation
• Mode Emboitable Partiel
PIC SLAVE
ISR IRR
PIC MASTER IRQ0
0 0
ISR IRR
0 0
Demande prioritaire
0 0 IRQ2
0 1
0 0
0 0
1 1 IRQ4
Pas d’envoi 1 0
de demande
0 0
0 0
0 0
INTR 0 0
0 0
0 0 IRQ7
0 0
0 0
INTA
27
La séquence d’initialisation
• Mode Emboitable Complet
PIC SLAVE
ISR IRR
PIC MASTER IRQ0
0 0
ISR IRR
0 0
Demande prioritaire
0 0 IRQ2
0 1
0 0
0 0
1 1 IRQ4
1 0
0 0
0 0
0 0
INTR 0 0
0 0
0 0 IRQ7
0 0
0 0
INTA
28
La séquence d’initialisation
• Mode Emboitable Complet
PIC SLAVE
ISR IRR
PIC MASTER IRQ0
0 0
ISR IRR
0 0
0 0 IRQ2
1 0
0 0
0 0
1 0 IRQ4
1 0
0 0
0 0
0 0
INTR 0 0
0 0
0 0 IRQ7
0 0
0 0 La gestion des priorités Plusiseurs int du PIC
est laissée au PIC Slave Slave en cours
INTA d’exécution
29
La séquence d’initialisation : ICW4
• Q5 : Specify the value of ICW4 such that the 8259A is
configured for use in an 8086 system, with normal
EOI, buffered-mode master, and special fully nested-
mode enabled.
30
Exercice
• Write a program that initializes an 8259A with the
initialization command words derived from questions
1, 3 and 5. Assume that the ICW1 register of 8259A
resides at address 20H in the I/O space.
CLI ;Disable interrupts
MOV DX, 20H
MOV AL, 13H ;ICW1 loaded Address of ICW1: 20H
ICW1 <-- 13h
OUT DX, AL Address of ICW2-4: 21H
MOV DX, 21H ICW2 <-- 70H
ICW4 <-- 1DH
MOV AL, 70H ;ICW2 loaded
OUT DX, AL
MOV AL, 1DH ;ICW4 loaded
OUT DX, AL ;Initialization completes
STI ;Enable interrupts
31
Initialisation du 8259 : résumé
32
Initialisation ICW1
34
Initialisation ICW3
35
Initialisation ICW3
Dans tous les cas, les demandes sont inscrites dans l’IRR.
37
Les mots d’opération : OCW1
Q6: What is the OCW1 code if interrupt inputs IRQ0 to
IRQ3 are to be disabled and IRQ4 to IRQ7 enabled?
OCW1 = 00001111
Pour résumer:
39
Les mots d’opération : OCW2
• Par défaut le 8259 gère les priorités dans le mode
"fully nested" avec IRQ0 le plus prioritaire et IRQ7 le
moins prioritaire.
• Le BIOS du PC ne modifie pas ce mode qui est le
mode par défaut.
• Le 8259 offre la possibilité de modifier l'ordre des
priorités.
• Le 8259 offre également la possibilité de travailler
avec des priorités tournantes. Cela signifie que
lorsqu'une demande d‘INT vient d'être servie elle se
retrouve automatiquement avec la priorité la plus
faible.
40
Les mots d’opération : OCW2
41
Le Priority Resolver
On suppose que l'on utilise le mode par défaut (IRQ0 le plus prioritaire).
Supposons que l'entrée IRQ2 est activée (IRR bit
ISR PRIORITY RESOLVER
IRR 2 mis à 1).
5 0 0 5
6 0 0 6
7 0 0 7
Tant que le bit 2 de ISR est à 1
INTR
le Priority Resolver ne s'intéressera qu'aux
demandes d'interruption de priorité strictement
INTA supérieure.
42
Le Priority Resolver (suite)
On suppose que l'on utilise le mode par défaut (IRQ0 le plus prioritaire).
PRIORITY
ISR RESOLVER IRR
0 0 0 0
Supposons maintenant que l'entrée IRQ5 est
1 0 0 1 activée (IRR bit 5 mis à 1).
2 1 0 2
3 0 0 3
4 0 0 4 Tant que le bit 2 du registre ISR sera à 1 le Priority
Resolver n'interrompera le μp que pour des
5 0 10 5 demandes d'interruption de priorité strictement
supérieure (IRR0 et IRR1).
6 0 0 6
7 0 0 7
43
Le Priority Resolver (suite et fin)
On suppose que l'on utilise le mode par défaut (IRQ0 le plus prioritaire).
1 0 0 1
Si cette entrée est démasquée le μp envoi les 2
INTA.
2 1 0 2 Le 8259 sait que maintenant le μp exécute le
3 0 0 3 programme d‘INT 0 : le Priority Resolver met à 1
le bit 0 du registre ISR.
4 0 0 4
5 0 1 5
6 0 0 6
7 0 0 7
Tant que ce bit 0 du registre ISR sera à 1 le 8259 ne
INTR pourra plus interrompre le μp.
INTA
44
EOI (End Of Interrupt)
• Chaque fois que le μp accepte une demande
d'interruption le 8259 met à 1 le bit correspondant
dans le registre ISR.
• Tant qu'un, ou plusieurs bits du registre ISR sont à 1,
le 8259 ne peut interrompre le μp que pour des
demandes d'interruption de priorité strictement
supérieure.
• Question : comment remettre à 0 un bit du registre
ISR ?
ISR Supposons que le 8259 travaille dans le mode par défaut : IRQ0 le plus
prioritaire et IRQ7 le moins prioritaire.
0 0
1 0
2 01 Lorsque le 8259 reçoit un EOI non spécifique il remet à 0 le bit 2 du registre ISR.
3 0
4 1 mov al, 20h
5 0 out 20h, al
6 1 Ceci fonctionne parfaitement tant que l'on ne modifie pas l'ordre des priorités …
7 0 Sinon, il faut utiliser un EOI spécifique.
46
Effet d'un EOI spécifique
Supposons que le registre ISR a la valeur ci-contre.
ISR
0 0
1 0
2 1 Lorsque le 8259 reçoit un EOI spécifique
47
Les mots d’opération : OCW2
48
Modification de l'ordre des priorités
49
Gestion des priorités tournantes
• Il est possible d'envoyer un "Rotate on EOI".
50
Les mots d’opération
1/ OCW3 :
permet la lecture des registre IRR et ISR, et permet
aussi l’établissement du mode polling et du mode
spécial de masquage.
RIS (Read In Service): Ce bit est utilisé pour choisir le registre ISR ou IRR.
51
Les mots d’opération : OCW3
• Read the in-service register in PIC #1 (at I/O address
20h) ?
mov al, 0bh ; 00001011b
out 20h, al
in al, 20h
• Read the interrupt request register in PIC #1 (at I/O
address 20h) ?
52
Les mots d’opération : OCW3
54
Les mots d’opération : OCW3
ESMM (Enable Special Mask Mode): Autorise s’il est à
1 l’effet du bit SMM.
55
Les mots d’opération
56
Ports d’E/S du 8259 sur un PC
• Le 8259 maitre (IRQ0 à IRQ7) occupe deux adresses d'entrées-sorties :
• 0020H pour les registres : OCW2, OCW3 (IRR,ISR), ICW1
• 0021H pour les registres : OCW1, ICW2, ICW3, ICW4
58