Скачиваний:
27
Добавлен:
01.05.2014
Размер:
3 Мб
Скачать
☆

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

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

Рис.@.2 Блок-схема PTS цикла

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

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

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

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

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

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

1.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 байтов оперативной памяти в нижнем файловом регистре позволят делать это совершенно свободно.

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