- •Лабораторная работа №2 Контроллер прерываний вн59а
- •1.1. Обработка прерываний.
- •1.2. Система прерываний вм86.
- •1.3. Контроллер прерываний к1810вн59а (i8259а).
- •1.4. Настройка контроллера.
- •1.5. Управление контроллером
- •1.6. Описание эмулятора контроллера прерываний вн59а.
- •1.7. Порядок выполнения лабораторной работы
- •1.8. Варианты заданий к лабораторной работе.
- •1.9. Контрольные вопросы.
- •Литература
1.4. Настройка контроллера.
Перед началом работы все контроллеры должны быть настроены. Для этого на каждый ВН59 надо последовательно подать три или четыре команды инициализации (ICW1 – ICW4). Три команды подаются, если в системе один контроллер прерываний, четыре – если несколько. Если в системе несколько контроллеров, вначале настраивается MASTER, а затем SLAVE. Рассмотрим далее форматы настроечных команд.
ICW1 передается при А0=0 и имеет формат, приведенный на рис. 6.
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
0 |
0 |
0 |
1 |
LTIM |
0 |
SNGL |
IC4 |
Рис. 6. Формат ICW1.
При LTIM = 1 запросы на IR7-0 воспринимаются по уровню сигнала, при LTIM = 0 – по фронту сигнала.
Если SINGL = 0 – в системе несколько контроллеров и, следовательно, будет команда инициализации ICW3. При SINGL = 1 – в системе один контроллер и ICW3 передаваться не будет.
При IC4 = 1 будет команда ICW4, при IC4 = 0 ICW4 не будет.
Например, в системе один контроллер прерываний. Тогда типичная последовательность команд, задающая контроллеру ICW1, выглядит так:
mov al, 00010011b
out 20h, al
ICW2 передается при А0=1 и имеет формат, приведенный на рис.7. Здесь Т7-Т3 – старшие пять разрядов типа прерывания, а звездочки означают безразличное состояние бита.
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
T7 |
T6 |
T5 |
T4 |
T3 |
* |
* |
* |
Рис. 7. Формат ICW2.
По сути дела, передавая контроллеру ICW2, мы задаем тип ножке IR0, причем этот тип всегда кратен восьми (0 или 8 или 16 …). Типы всех остальных ножек контроллер формирует автоматически, прибавляя к типу IR0 по единице. То есть, если у IR0 тип 8, то у IR1 тип 9, у IR2 тип 10 и так далее.
Например, хотим задать IR0 тип 16 (00010000 = 00010***):
mov al, 16
out 21, al
ICW3 передается при А0 = 1. Формат ICW3 различается для ведущего и ведомых контроллеров. Для ведущего: если в i-ом разряде ICW3 стоит единица, значит к линии IRi подключен ведомый контроллер. Для ведомого ICW3 имеет формат, приведенный на рис 8.
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
0 |
0 |
0 |
0 |
0 |
ID2 |
ID1 |
ID0 |
Рис. 8. Формат ICW3 для SLAVE.
ID2-0 задают номер ножки ведущего, к которой подключен данный ведомый контроллер.
Например, в системе три контроллера: Master, Slave1 и Slave2. Slave1 подключен к ножке IR4, а Slave2 – IR1 Masters. Тогда:
; ICW3 для Master
mov al, 00010010b
out 21h, al
; ICW3 для Slave1
mov al, 00000100b
out 0a1h, al
; ICW3 для Slave2
mov al, 00000001b
out address_slave2, al
ICW4 передается при А0=1 и обычно имеет формат (несколько упрощенный), приведенный на рис. 9.
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
0 |
0 |
0 |
SFNM |
0 |
0 |
AEOI |
1 |
Рис. 9. Формат ICW4.
AEOI = 1 – автоматическое окончание прерываний (не нужна команда EOI). AEOI = 0 – обычное окончание прерываний (нужна команда EOI).
SFNM = 0 – обычный полновложенный режим. SFNM = 1 - специальный полновложенный режим.
Например, типичная передача ICW4:
mov al, 00000001b
out 21h, al
При необходимости внести изменения в настройки контроллера необходимо выдать на него заново всю последовательность команд инициализации,, начиная с ICW1 и заканчивая ICW4.
В заключение этого раздела приедем программу, которую выполняет BIOS при инициализации контроллеров прерываний IBM PC:
;для Master
mov al, 11h
out 20h, al
mov al, 8
out 21h, al
mov al, 4
out 21h, al
mov al, 1
out 21h, al
;для Slave
mov al, 11h
out 0a0h, al
mov al, 70h
out 0a1h, al
mov al, 2
out 0a1h, al
mov al, 1
out 0a1h, al