Скачиваний:
25
Добавлен:
03.06.2014
Размер:
2.3 Mб
Скачать

1.6.1 Описание работы контроллера прерывания

Контроллер прерываний обслуживает прерывания посредством подпрограмм обработки прерываний. Когда аппаратные средства обнаруживают прерывание, он генерирует и выполняет специальный вызов по прерыванию. Он помещает содержимое программного счетчика в стек и затем загружает PC содержимом соответствующего вектора прерывания. Вектора прерываний находятся в памяти специального назначения. После завершения выполнения сервисной программы обработки прерывания , счетчик программ перезагружается из стека и выполнение программы продолжается.

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

Прерывания по невыполняемому коду операций и ловушкам (Trap) не различаются по приоритетам; они идут для обслуживания непосредственно в контроллер прерываний . Контроллер прерываний выбирает соответствующую ячейку вектора в памяти специального назначения. Вектор содержит начальный адрес программы обработки прерывания.

Приоритет поступившего прерывания относительно всех других отложенных запросов прерывания определяет приоритетный шифратор. В табл.3.4 приведены приоритеты прерываний по умолчанию ( 15 - самый высокий и 1- самый низкий ).

Немаскируемые прерывания (NMI) имеют самый высокий приоритет относительно всех располагаемых по приоритетам прерываний. Если NMI отложено, Приоритетный шифратор выбирает его как самый высокий приоритетный запрос, и контроллер прерываний выбирает соответствующую ячейку вектора в памяти специального назначения.

Любой запрос PTS прерывания имеет более высокий приоритет чем все маскируемые стандартные запросы прерывания. Если никакой запрос NMI не отложен, Приоритетный шифратор определяет, что самый высокий приоритет имеют PTS запросы и контроллер прерывания выбирает соответствующую ячейку вектора PTS в памяти специального назначения. Вектор содержит начальный адрес соответствующего управляющего блока PTS (PTSCB).

Если никакие NMI или PTS запросы не отложены, приоритетный шифратор определяет самый высокий приоритет стандартным запросам прерывания, и контроллер прерывания выбирает соответствующую ячейку вектора в памяти специального назначения. Вектор содержит начальный адрес соответствующей программы обработки прерывания.

1.6.3. Изменение приоритетов прерывания

Программное обеспечение может изменять приоритеты по умолчанию для маскируемых прерываний, управляя регистрами маски прерывания ( INT_MASK и INT_MASK1). Например, следующий фрагмент показывает один из способов запрета всех прерываний, за исключением прерывания EXTINT ( приоритет 7 ), из программы обработки RI прерывания ( приоритет 9 ).

SERIAL_RI_ISR:

PUSHA ;Сохранить PSW, INT_MASK, INT_MASK1 и WSR

DI ; Отключить все прерывания

LDB INT_MASK1, #00100000B ;разрешить только EXTINT ; прерывание

EI ; разрешить обслуживание прерываний

<.........> ; Обслуживание прерывания по приему(RI)

POPA ; Восстановить PSW, INT_MASK, INT_MASK1, & WSR

RET

Обратите внимание, что ячейка 2032H в таблице векторов прерываний должна загружаться значением метки SERIAL_RI_ISR раньше, чем придет запрос прерывания по приему - RI (Receive interrupt) и кроме того, для выполнения этой подпрограммы прерывание должно быть разрешено.

Соседние файлы в папке lab96