
- •Лабораторная работа № 3
- •1.2. Краткий обзор режима 0
- •1.3. Асинхронные режимы
- •1.3.1. Краткий обзор Режима 1
- •1.3.2. Краткий обзор Режима 2
- •1.3.3. Краткий обзор Режима 3
- •1.4. Многопроцессорная связь
- •1.5. Программирование последовательного порта
- •1.5.1. Регистр скорости передачи
- •1.5.2. Регистр буфера приемника последовательного порта
- •1.5.3. Регистр буфера передатчика последовательного порта
- •1.5.4. Регистр управления последовательным портом.
- •1.5.5. Регистр статуса последовательного порта.
- •1.6. Прерывания последовательного порта
- •1.6.1 Описание работы контроллера прерывания
- •1.6.2. Приоритеты прерывания
- •1.6.3. Изменение приоритетов прерывания
- •1.6.4. Программы обработки прерывания
- •Фрагмент программы
- •2. Порядок выполнения работы
- •3. Содержание отчета
1.6.4. Программы обработки прерывания
Все программы обработки прерывания 8XC196KC/KD обрабатываются следующим способом:
1. После того, как аппаратные средства обнаружат и определят приоритет запроса прерывания, они генерируют и выполняют специальный вызов по прерыванию. Он помещает счетчик программ в стек и затем загружает его содержимым вектора, соответствующего самому высокому приоритету, задерживая остальные немаскированные прерывания. Аппаратные средства не будут позволять выполнить другой вызов по прерыванию, пока не выполнится первая команда программы обработки текущего прерывания.
Табл.3.4
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 байтов оперативной памяти в нижнем файловом регистре позволят делать это совершенно свободно.
Рис.3.4 Источники прерывания