Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_rab_kontr_preryvany.doc
Скачиваний:
12
Добавлен:
24.11.2019
Размер:
474.62 Кб
Скачать

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]