Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛЕКЦИИ ПО ТСАУ

.pdf
Скачиваний:
1
Добавлен:
21.12.2025
Размер:
6.14 Mб
Скачать

1. Режим вложенные прерывания.

Каждому из входов присваивается приоритет IR0, IR1, …IR7 в порядке убывания. ЗП с большим приоритетом могут прерывать обслуживание ЗП с меньшими приоритетами.

2. Режим круговых циклических приоритетов.

После появления ЗП на каком-либо входе и его обслуживания данному входу присваивается самый низкий приоритет, а приоритеты остальных запросов меняются в круговом циклическом порядке.

3.Режим адресуемых приоритетов.

Аналогично п. 2, но допускает программное указание входа, которому назначается самый низкий приоритет.

4.Режим опроса.

Вэтом режиме ЦП не реагирует на ЗП (прерывания запрещены). ВУ, требующее обслуживания, определяется чтением состояния ПКП (т.е. опрос состояния контроллера).

5.Специальный режим. В этом режиме незамаскированные запросы прерываний обслуживаются

впорядке их поступления.

6.5Схема включения программируемого контроллера прерываний к системной шине и внешним

устройствам

Рис. 6.3. Схема включения ПКП к системной шине и ВУ Назначение выводов БИС:

D7-D0 – выводы ШД, служат для приема управляющее информации от ЦП и передачи статусной информации в ЦП.

A0 – адресный вход, адресация внутренних регистров контроллера (2 адреса).

~CS (chip select) - выбор кристалла, разрешает или запрещает связь контроллера с системной шиной.

~CS = 0 – есть связь, ~CS = 1 – нет связи. Первый ПКП использует адреса – 20h, 21h. Второй ПКП использует адреса – A0h, A1h.

~RD, ~WR – ввод, вывод (сигналы ШУ), соединяются с линиями магистрали ~IOR и ~IOW.

INT (выход) – сигнал ЗП в ЦП.

~INTA (interrupt acknowledge) – сигнал РП от ЦП.

3

CAS2, CAS1, CAS0 – шина каскадирования. Для ведущего контроллера прерывания эти линии являются выходами, а для ведомого – входами.

~SP/~EN – указывает ведущий (1) или ведомый (0) ПКП.

IR0...IR7 – входы запросов прерывания от ВУ.

Аппаратные прерывания в порядке их приоритетов и назначения

Вход

Номер типа

Назначение входа

IR0

8

АВП = 0000.0020h Таймер

IR1

9

АВП =0000.0024h Клавиатура

IR2

Ah

Каскадирование

IR3

Bh

COM2

IR4

Ch

COM1

IR5

Dh

LPT2

IR6

Eh

НГМД (накопитель на гибких магнитных

 

 

дисках)

IR7

Fh

LPT1

6.6 Функциональный состав программируемого контроллера прерываний и его программная модель

IRR – Interrupt Request Register – регистр запросов прерываний,

IMR – Interrupt Mask Register – регистр масок прерываний, ISR

Interrupt Service Register регистр обслуживаемых запросов, PR

Priority Resolver – шифратор приоритетов.

Назначение регистров контроллера прерываний: IRR:

фиксирует ЗП на входах IR0-IR7 от ВУ. К каждому входу можно подключить одно ВУ. IRi=1, если на входе IRi появляется ЗП.

Входные цепи могут программироваться на восприятие уровня или фронта сигнала.

IMR:

Служит для маскирования или разрешения ЗП на отдельных входах.

Если IMi=1, то сигнал на входе IRi не обслуживается.

Маскирование входа IRi не запрещает прерывание на остальных входах.

ISR:

Хранит запросы, обслуживаемые ЦП.

На время обслуживания IRi ЦП, бит ISi устанавливается в 1.

Если ISi = 1, то прерывания от этого входа и входов с меньшими приоритетами запрещены.

Этот бит должна сбросить программа обслуживания прерывания по завершению работы или в процессе обслуживания ВУ.

PR:

Анализирует содержимое предыдущих трех регистров и определяет необходимость генерировать сигнал ЗП (INT) в ЦП, т.е. реализует схему учета

приоритетов и формирования АВП.

4

6.7 Алгоритмы работы программируемого контроллера прерываний

Начальная инициализация подразумевает установку всех параметров:

1.Количество ПКП в системе: один или несколько.

2.АВП (номера типов прерываний).

3.Режим обслуживания ВУ.

Инициализация выполняется специальными командами записи приказов инициализации в регистр ПКП и не должна прерываться. В ЭВМ семейства IBM PC инициализация выполняется BIOS (basic input/output system - базовая система ввода-вывода), которая устанавливает режим вложенных прерываний, АВП, ПКП1 объявляет ведущим, ПКП2 – ведомым.

При появлении сигнала ЗП от какого-либо устройства, контроллер выполняет следующие действия:

1.Запрос на входе IRi фиксируется в регистре IRR.

2.Установленный в 1 бит IRi сравнивается с соответствующим битом IMi. Если

a)IMi = 1 → запрос IRi не обслуживается.

b)IMi = 0 → запрос IRi передается в PR.

3.PR сравнивает приоритет IRi с приоритетами ЗП, обслуживаемыми в данный момент времени ЦП.

a)Если биты регистра ISR с большим приоритетом = 1, то дальнейшее обслуживание запроса не выполняется.

b)Если биты регистра ISR с большими приоритетами сброшены в 0, то ПКП формирует ЗП (INT) в ЦП.

4.ЦП проверяет бит IF (Interrupt Flag) в регистре флагов (Flags):

a)Если IF = 0, запрос не обслуживается, пока IF не будет установлен в единицу.

b)Если IF = 1, то по завершению текущей команды ЦП сбрасывает IF=0 и возвращает сигнал в ПКП по линии INTA в виде двух последовательных импульсов.

5.ПКП при первом импульсе INTA запрещает сигналы на входах IRR до второго импульса INTA. Сбрасывает бит IRi = 0 и устанавливает бит ISi = 1.

6.ПКП при втором импульсе INTA ЦП разрешает сигналы на входах регистра IRR и на ШД устанавливает номер типа прерывания.

7.ЦП считывает с ШД код номера типа прерывания и приступает к обслуживанию устройства. Если поступает сигнал с большим приоритетом, ЦП не реагирует на сигнал INT при сброшенном IF. Поэтому любая оперативная программа должна устанавливать IF=1, как только это становится возможным, чтобы восстановить режим вложенных прерываний.

Чтобы повторить процедуру прерывания, то входа IRi необходимо сигнал на входе IRi перевести в неактивное состояние.

Если какой-то вход IRк замаскирован соответствующим битом IMк, то запрос не обрабатывается ПКП. Если программа сбрасывает IMк=0, ПКП распознает активный запрос и начинает его обслуживать.

6.8 Каскадирование контроллеров прерываний

Каскадирование позволяет объединить несколько контроллеров для расширения числа ЗП. При этом один ПКП работает как ведущий, а до 8 ПКП могут работать ведомыми.

Сигнал INT ведомого ПКП подается на один из входов ведущего (IRi). Если IMR и ISR не блокируют сигнал, то он поступает на вход ЦП по линии INT ведущего.

Когда ЦП возвращает INTA, ведущий ПКП проверяет, возникло ли его собственное прерывание или от ведомого. Если прерывание от ведомого, то на шину ведущий на шину каскадирования выдает код, соответствующий входу, к которому подключен ведомый.

5

 

 

 

Рис. 6.4 Схема каскадирования контроллеров прерываний

 

 

 

В нашем случае ведущий выдает код 010, который соответствует линии IR2.

 

 

 

CAS2

 

CAS1

 

CAS0

 

 

 

 

 

 

 

 

22 (4)

 

21 (2)

 

20 (1)

 

 

 

 

 

 

 

 

 

 

0

 

1

 

0

 

 

 

 

 

 

 

 

 

За исключением реакции на сигнал INTA действия всех контроллеров в системе одинаковы.

 

IR0 имеет самый высокий приоритет, номер типа прерывания – 8.

 

 

 

 

 

IR0

IR1

IR8

IR9

IR10

IR11

IR12

IR13

IR14

IR15

IR3

IR4

IR5

IR6

IR7

8

9

70h

71h

72h

73h

74h

75h

76h

77h

Bh

Ch

Dh

Eh

Fh

Рис 6.5. Номера типов прерываний первого и второго контроллеров ПДП

6

Лекция 7. Программирование контроллеров прерываний

7.1 Инициализация контроллеров прерываний

После включения питания БИОС выполняет инициализацию ПКП. При инициализации:

Устанавливается режим работы ПКП.

Номера типов прерываний.

Определяется ПКП1-ведущий, ПКП2-ведомый.

7.2Программирование контроллера прерываний в процессе обслуживания внешнего устройства и работы системы По окончании инициализации IMR обнуляется, следовательно, разрешаются ЗП на всех входах. Для программирования ПКП в работе системы используется 3 слова рабочих приказов: - Operation Command Word (OCW).

1.OCW1 – разрешение или запрет отдельных входов ЗП. OCW1 использует

нечетный адрес. Регистр масок всегда доступен ЦП для чтения и для записи.

7

6

5

4

3

2

1

0

IM7

IM6 IM5 IM4

IM3

IM2

IM1

IM0

LPT1

HГMD

LPT2

COM1

COM2

Каскадирование

Клавиатура

Таймер

0

0

1

1

1

0

0

0

Слова рабочих приказов OCW2 и OCW3 используются для управления текущим режимом работы ПКП. Оба слова передаются по четному адресу.

Для отличия OCW2 от OCW3 и ICW1(Initialization Command Word) используются два бита с номерами 4 и 3:

D4

D3

1

X – ICW1

0

0 – OCW2

0

1 – OCW3

2. OCW2 используется при завершении процедуры обработки прерывания или смены текущего режима работы ПКП.

Формат OCW2:

7 6 5

4

3

2

1

0

OCW2 подается по четному адресу,

MODE

0

0

L2

L1

L0

для первого контроллера = 20h.

 

OCW2

 

 

 

 

1

Если MODE=00100000 = 20h, устанавливается режим вложенных прерываний и сбрасывается бит в регистре ISR, соответствующий последнему обслуживаемому запросу.

Пример: поступил ЗП на вход IR5. ЦП начал обслуживание, бит IS5=1, затем пришел ЗП на вход IR4, устанавливается IS4=1. Режим вложенных прерываний сохраняется. Пришел ЗП на IR3, устанавливается IS3=1.

Если поступает команда Port[$20]:=$20;, бит IS3 сбросится в 0, если еще раз поступает эта же команда, то сбросится бит IS4=0, следующая аналогичная команда сбросит бит IS5=0.

Если установить режим MODE=10100000 = A0h, устанавливается режим циклических приоритетов, сбрасывается бит с максимальным приоритетом, входу присваивается самый низкий приоритет. Если установить MODE = 11000L2L1L0 режим адресуемых приоритетов, номеру входа, определяемого полем L2L1L0, присваивается низший приоритет.

3. OCW3 используется для установки дополнительных режимов работы или опроса состояния ПКП. Формат OCW3:

7

6

5

4

3

0

SMM

0

1

Признак OSW3

действуют).

2

1 0 OCW2 подается по четному адресу,

p

RRC для первого контроллера = 20h.

 

SMM может принять только 2 значения (остальные не

SMM = 01101000 = 68h – незамаскированные запросы обслуживаются в порядке их поступления. SMM = 01001000 = 48h – восстанавливается приоритетное упорядочение запросов.

RRC = 00001010 = Ah – разрешение чтения регистра IRR. RRC = 00001011 = Bh – разрешение чтения регистра ISR.

После выполнения команды разрешения чтения регистра, чтение указанных регистров можно выполнять произвольное число раз до момента изменения OCW3. Чтение выполняется из того же адреса.

P=1→00001100 = Ch – разрешение чтения незамаскированного запроса с максимальным приоритетом.

Следующая операция чтения из регистра с четным адресом приводит к установке бита ISk с максимальным приоритетом, как будто получен сигнал INTA и передача ЦП в байта следующего формата I0000W2W1W0, где I показывает наличие ЗП (I=1, есть ЗП), а W2W1W0 показывают номер входа с наивысшим приоритетом.

Пример №1.

 

Port[$21]: = Port[$21] or 2;

OCW1, адрес нечетный. IMi=1 – запрет

 

клавиатуры.

Port[$21]: = Port[$21] and not 2;

IMi =0 – разрешение работы клавиатуры.

Пример №2.

 

Port[$20]:

= Сброс бита с самым высоким приоритетом ISi. Завершение обслуживания

Port[$20] ;

прерывания, соответствующего последнему запросу.

2

Пример №3.

 

Port[$20]:=$A;

Разрешение чтения регистра IRR.

Writeln( ‗содержимое регистра IRR=‘),

Чтение регистра IRR

port[$20];

 

7.3 Методика программирования обмена данными с прерыванием программы

Содержит две части:

Подготовка к обмену с прерываниями выполняется в фоновой программе.

Обслуживание ВУ в режиме прерывания фоновой программы. Подготовка к обмену с прерываниями включает:

1.Резервирование памяти для совместного использования фоновой и оперативной программ:

Память для хранения данных. Оперативная программа использует еѐ для ввода данных в ВУ или вывода данных из ВУ. Фоновая программа – для подготовки данных для ВУ или обработки полученных данных.

Переменная программный счетчик. Содержит текущее количество слов, переданное между фоновой и оперативной программами в том или ином направлении. Оперативная программа модифицирует программный счетчик в каждом цикле обмена. Фоновая программа использует программный счетчик для проверки завершения обмена.

Переменная указатель длины массива данных. Фоновая программа в этой переменной указывает общее количество слов, предназначенных для передачи. Оперативная программа должна запретить прерывание при передаче установленного объема данных.

2.Установка ВП на оперативную программу обслуживания устройства.

3.Разрешение прерывания ВУ. Определяет момент начала совместной работы фоновой и оперативной программ.

Обслуживание ВУ в режиме прерываний (вторая часть) выполняется оперативной программой, которая в каждом цикле обмена данными должна выполнять следующие действия:

1.Сохранение регистров процессора, которые будут модифицированы во время еѐ выполнения.

2.Инкремент (декремент) программного счетчика.

3.Обмен данными с памятью.

4.Сброс ЗП в интерфейсе ВУ, если он не сбрасывается аппаратными средствами.

5.Восстановление регистров ЦП, восстановление СК, РСП.

6.При передаче установленного фоновой программой обмена данных оперативная программа должна запретить прерывание ВУ. Для ЭВМ семейства IBM PC:

В регистре флагов IF=1, чтобы восстановить режим вложенных прерываний и разрешить прерывание от устройств с большими приоритетами. Оперативная программа должна сбрасывать бит ISi=0, чтобы разрешить прерывание от данного устройства и устройств с меньшими приоритетами.

7.4 Реализация методики обмена данными с прерыванием программы в автоматизированных системах на основе ЭВМ семейства IBM в среде Borland Pascal

3

Установка ВП

 

 

 

 

 

 

 

стандартной процедуры

Borland Pascal из

 

DOS.*

.

могут быть различными в

зависимости от модели памяти).

 

 

 

Procedure SetIntVec(IntNo:byte;

 

 

типа прерывания, IntProcAddr

вектор прерывания.

 

 

 

Как только установили новый

 

 

и последующего

восстановления

 

 

 

 

 

 

 

Procedure

GetIntVec(IntNo:byte; var

 

 

 

Процедура обслуживания

 

 

 

Procedure IntADC

;

 

 

 

 

 

 

Здесь ключевое слово ; interrupt;

 

 

обеспечивающих

сохранение в

всех

 

 

их при еѐ завершении.

Заканчивается процедура

 

 

не командой RET—возврат из

подпрограммы) которая

 

 

Flags.

7.5 Техническая

 

данными с прерыванием программы

 

 

T

 

 

 

 

 

 

 

из ВУ

 

 

IRi=IR3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

30Fh

 

 

 

 

 

 

 

ФРП

 

 

 

 

. 7.1 Схема

 

 

программы

За время T (Рис.

оперативная

 

 

. Программа, обслуживающая

ЗП может закончиться раньше,

 

 

фронтом.

Пример: Ввод в ОЗУ 100

 

 

через 32 канал мультиплексора с

прерыванием от таймера в

 

 

с общей землей.

Program Demo_interrupt;

 

 

 

Uses Dos, timer

 

 

 

 

 

 

 

 

Const BA=$300; {базовый адрес}

 

 

 

{длина массива} count:

 

 

 

счетчик} var U: array [0..Nmas] of

 

 

 

{массив данных}

 

 

 

 

 

 

 

 

T: word; {период таймера}

 

 

прерывания}

Procedure

;

 

 

 

 

 

end; {IF=1}

Inc(count);

 

 

 

 

 

 

 

 

Port[BA+4]:=$FF

 

АЦП

 

 

 

Asm nop end;

 

 

 

 

 

 

 

 

While (port[BA+2]

8) <> do;

 

 

 

Port[$20]:=$20; {OCW2, сброс

 

 

этого входа и входов с высшим

приоритетом}

 

 

 

 

 

 

 

 

If count=Nmas

[$21]:=

 

 

 

 

 

End;

 

 

 

 

 

 

 

 

4

Begin (Основная программа) Port[BA+$F]:=0; {ФРП=0}

Port[$21]:=Port[$21] or 8; {запрет прерывания ПКП} Port[BA+2]:=$FF; {режим}

Wait ({задержка ≈4мкс});

GetIntVec($B, OldIntVec); SetIntVec($B, IntADC);

Writeln(‗Укажите интервал дискретизации сигнала‘); readln(T);

Set_Time(T);

Port[BA+$F]:=1; {ФРП=1} Port[$21]:=Port[$21] and NOT 8; {IM3=0} {Фоновая программа}

Port[BA+$F]:=0; {}

SetIntVec ($B, OldIntVec);{ Вывод данных и обработка данных }

End.

7.6 Категории прерываний ЭВМ семейства IBM

Все прерывания процессора делятся на 3 категории:

1.Внешние или аппаратные прерывания.

2.Прерывания по особой ситуации или внутренние прерывания.

3.Программные прерывания.

1.Внешние или аппаратные прерывания генерируются ВУ в ответ на некоторые события, требующие внимания ЦП.

2.Внутренние прерывания возникают, когда ЦП наталкивается на абсолютно бессмысленные команды.

Пример: IntNo=0 – прерывание при делении на 0.

IntNo=1 – прерывание при установленном флаге TF=1 в регистре флагов. IntNo=2

NMI NoneMaskedInterrupt, немаскируемое прерывание.

Программные прерывания не возникают неожиданно они возникают, если какая-то программа вызывает это прерывание и служит для вызова других программ, которые находятся в: ПЗУ – BIOS, ОЗУ – DOS.

Основные черты программных прерываний

Программные прерывания функционируют так же, как и аппаратные прерывания. Программные прерывания не разделены по приоритетам и могут вызываться друг из друга. Аппаратное прерывание тоже может получить управление при выполнении программного прерывания.

Для вызова программных прерываний имеется ассемблерная команда INT <номер типа прерывания>. Реакции ЦП на эту команду:

1.Сохраняет свое состояние.

2.Определяет адрес ВП.

3.Загружает в СК содержимое ВП.

4.Приступает к выполнению соответствующей процедуры.

Вязыках высокого уровня также можно использовать программные прерывания. Они становятся доступны при объявлении в программе модуля DOS.* (или WinDOS.*).

5

Procedure Intr(IntNo:byte; var Regs: registers); (в Windows: var Regs:TRegisters). Тип Registers имеет тип:

Type Registers=record case integer of

0:(AX, BX, CX, DX,BP, SI, DI, DS, ES, Flags: word);

1:(AL, AH, BL, BH, CL, CH, DL, DH: byte) end;

Для Windows: Type TRegisters вместо Type Registers.

Один и тот же номер типа может содержать несколько функций. В регистре AH можно указать номер функции, в регистре AL – номер подфункции.

Краткий обзор функций BIOS

№ Типа прерывания

Функция или группа функций

5

Печать графической копии экрана

11h

Оборудование RAM

12h

Объем памяти

13h

Управление НТМД

14h

Управление последним портом

16h

Управление клавиатурой

19h

Перезапуск системы

33h

Управление мышкой

6