Скачиваний:
28
Добавлен:
01.05.2014
Размер:
7.32 Mб
Скачать

4.5. Изменение Приоритетов Прерывания

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

Следующий код показывает один из способов запрета всех прерываний, за исключением прерывания 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) и кроме того, для выполнения этой подпрограммы прерывание должно быть разрешено.

4.6. Программы Обработки прерывания

Все программы обработки прерывания 8XC196KC/KD обрабатываются следующимспособом:

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

немаскированные прерывания. Аппаратные средства не будут позволять выполнить другой вызов по прерыванию пока не выполнится первая команда программы обработки текущего прерывания.

2. Команда PUSHA сохраняет содержимое PSW(СЛОВА СОСТОЯНИЯ ПРОГРАММЫ),INT_MASK, INT_MASK1, и Регистра Выбора Окна (WSR) в стеке и затем очищает PSW, INT_MASK, и INT_MASK1.

Кроме арифметических флажков, PSW содержит бит глобального разрешения прерываний(I), и бит разрешения PTS (PSE). Очищая PSW, INT_MASK, и INT_MASK1 регистр, команда PUSHA маскирует все маскируемые прерывания, отключает стандартное обслуживание прерываний, и отключает PTS.

Команда PUSHA также запрещает вызовы по прерыванию пока не выполнится следующая команда .

3. Команда LDB INT_MASK1 допускает те прерывания, которые могут прервать текущую программу обработки пррываний. В примере,приведенном выше, только EXTINT может прервать программу обработки прерывания по Приему.

Разрешая или запрещая обслуживание прерываний, программное обеспечение устанавливает собственное обслуживание приоритетов прерываний.

4. Команда EI повторно разрешает обработку прерывания и запрещает вызовы по прерыванию пока не выполнится следующая команда .

5. Фактически, программа обработки прерывания выполняется внутри приоритетной структуры, установленной программным обеспечением.

6. В конце обслуживающей подпрограммы, команда POPA восстанавливает первоначальное содержание PSW, INT_MASK, INT_MASK1, и WSR регистров.

Любые изменения, сделанные в этих регистры в течение программы обработки прерывания не сохраняются. Так как вызовы по прерыванию не могут происходить сразу после команды POPA, последняя команда (RET) выполнится раньше, чем

придет другой вызов по прерыванию. После своего выполнения, команда POPA будет повторно допускать отложенное прерывание. Если Контроллер Прерывания обслуживал отложенное прерывание перед выпонением команды RET, то адрес возврата к коду, который выполнялся когда произошло первоначальное прерывание, будет сохранен в стеке. Это не

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

Обратите Внимание что "преамбула" и код завершения для подпрограммы не сохраняют и не восстанавливают регистров оперативной памяти. Программа обработки прерывания должна сама определить собственный частный набор регистров из Нижнего Регистрового Файла. Доступность 232 байтов оперативной памяти в Нижнем Регистровом Файле позволят делать это совершенно свободно.Кроме того, доступна оперативная память в Верхнем Регистровом Файле через вертикальную работу с окнами.

Соседние файлы в папке Лабораторные работы по МПС