Un controleur peut ainsi realiser des fonctions plus complexes que la simple transmission d'interruptions. Il est possible de masquer des interruptions, de definir des priorites, etc. Ce fonctionnement est librement parametrable. La partie suivante explique comment il est possible de parametrer un controleur.
Les encadres ci-dessous presentent les differents registres avec leur signification.
ICW1 (port 0x20 and 0xA0)
|0|0|0|1|x|0|x|x| | | +--- avec ICW4 (1) ou sans (0) | +----- un seul 8259 (1), ou cascades (0) +--------- declenchement par niveau (1) ou par front (0) |
ICW2 (port 0x21 et 0xA1)
|x|x|x|x|x|0|0|0| | | | | | +----------------- bits A7-A3 du vecteur d'interruption Comme il n'y a que 8 interruptions possible par PIC, seuls les 3 bits de poids faible comptent dans le vecteur pour determiner l'interruption. Les 5 autres bits, de poids fort, servent a calculer l'adresse du vecteur. |
ICW3 (port 0x21 et 0xA1)
|x|x|x|x|x|x|x|x| pour le maitre | | | | | | | | +------------------ controleur esclave rattache (1), ou non (0) |x|x|x|x|x|x|x|x| pour l'esclave | | | | | | | | +------------------ controleur maitre rattache (1), ou non (0) |
ICW4 (port 0x21 et 0xA1)
|0|0|0|0|0|0|0|1| |
OCW1 (ports 0x21 et 0xA1)
|x|x|x|x|x|x|x|x| | | | | | | | | +------------------ masque d'interruption etabli (1) ou non (0) chaque bit correspond a une IRQ |
OCW2 (ports 0x20 et 0xA0)
|x|x|x|0|0|x|x|x| | | | +-------- niveau d'interruption | | | | | | +--------------- End Of Interrupt (EOI) EOI : 001 EOI non specifique 010 NOP 011 EOI specifique 100 Rotation sur EOI automatique 101 Rotation sur EOI non specifique 110 Etablissement de code prioritaire 111 Rotation sur EOI specifique |
OCW3 (ports 0x20 et 0xA0)
|0|x|x|0|1|x|x|x| | | | +---- lecture IRR (10) ou lecture ISR (11) a la | | | prochaine lecture. | | +------ acquisition d'interruptions par polling (1) +-------------- NOP (0x), reset (10), set (11) |
; Maitre mov al,0x11 ; Initialisation de ICW1 out 0x20,al jmp $+2 ; temps d'attente mov al,0x08 ; Initialisation de ICW2 out 0x21,al jmp $+2 mov al,0x04 ; Initialisation de ICW3 out 0x21,al jmp $+2 mov al,0x01 ; Initialisation de ICW4 out 0x21,al jmp $+2 mov al,0xFF ; masquage des interruptions out 0x21,al ; Esclave mov al,0x11 ; Initialisation de ICW1 out 0xA0,al jmp $+2 ; temps d'attente mov al,0x70 ; Initialisation de ICW2 out 0xA1,al jmp $+2 mov al,0x02 ; Initialisation de ICW3 out 0xA1,al jmp $+2 mov al,0x01 ; Initialisation de ICW4 out 0xA1,al jmp $+2 mov al,0xFF ; masquage des interruptions out 0xA1,al |