Примечание к выполнению задания

Цель работы.

Изучить систему прерываний микропроцессора К1816ВЕ48, разработать подпрограмму обслуживания прерывания от внешнего источника запроса, исследовать механизм обслуживания прерывания от внешнего источника для однокристального микропроцессора К1816ВЕ48.

Введение.

Вот Вам пример из обыденной жизни – сидите Вы на кухне, чай пьете с малиновым вареньем и вкусняшками всенепременно, и ждете гостей. А как узнать, что кто-то пришел? Тут два варианта: либо мы каждые пять минут будем отвлекаться от варенья, в смысле, чая и бегать проверять, а не стоит ли кто за дверью, поскольку дверь у Вас под током – в них стучишь, они тебя бьют – шуму-грому на весь дом, кто же в такие стучать будет, либо купить дверной звонок и спокойненько ждать на нагретом месте, пока кто-нибудь в него не позвонит.

Так вот, когда гость звонит – это событие. Соответственно, мы прерываемся и кидаемся к двери. Естественно, возникает проблема приоритета. Это как мы все также сидим пьем чай, но звонят нам уже не только в дверь, но и по телефону... И ведь не разорвешься, что-то нужно сделать первым. Поэтому есть таблица векторов прерываний. Чем меньше номер прерывания, тем более оно приоритетно. Но есть несколько тонкостей...

Вот произошло событие – пошел запрос на прерывание, то есть выставляется так называемый «флаг запроса на прерывание». Если все хорошо, прерывание разрешено, то жизнь прекрасна и происходит его обработка.

А вот если прерывание запрещено – например, уже происходит обработка более приоритетного прерывания – тогда этот флаг запроса так и остается висеть до момента разрешения прерываний. После этого микропроцессор проверяет регистр запроса (если он есть в микропроцессоре) в порядке приоритета и, если флаг есть – обрабатывает его.

Однако… Получается, что даже если прерывание обрабатывается, не факт, что событие, которое его вызвало, ещё живо... Это как позвонили в дверь и по телефону одновременно, Вы ответили по телефону, а гости уже решили, что никого нет дома, и ушли. Вроде как событие – звонок в дверь – было, а за дверью никого нет.

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

Ещё одна особенность использования прерываний – да и не только прерываний: реентерабельность (или повторная входимость). Реентерабельная программа – та, которую могут вызвать несколько пользователей (или процессов), и при этом как минимум не возникнет ошибка, а как максимум– не будет потери вычислений – например, другому пользователю не придется выполнять код снова.

Иными словами, если на кухне, в то время, пока Вы встречаете гостей, никто не утащит себе вкусняшки, то значит все реентерабельно.

Вообще-то, серьёзная штука – если её не учитывать, можно долго мучится с вопросом: «А чего же она не работает?!». Нужно её учитывать, например, если обрабатываются несколько прерываний, и каждое изменяет какую-то глобальную переменную...

Обычно прерывания не реентерабельны. То есть, в момент работы прерывания нельзя повторно вызвать это же прерывание. Именно для защиты от повторного вхождения в обработчик прерывания автоматически запрещаются в момент его обработки (если вам захотелось разрешить прерывания в процедуре обработки прерываний, надо десять, двадцать раз подумать, прежде чем сделать такой опрометчивый шаг).

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

Итак, в системе определены два источника запросов: по входу INT (стартовый адрес подпрограммы обслуживания 003Н) и по переполнению таймера Т (стартовый адрес подпрограммы обслуживания 007Н). Каждый источник может быть замаскирован независимо от других специальными флажками ЕХ и ЕТ, управляемыми командами:

EN I     ; Разрешение внешнего прерывания INT

DIS I              ; 3апрет внешнего прерывания INT

EN TCNTI; Разрешение прерывания от переполнения таймера

DIS TCNTI; 3апрет прерывания от переполнения таймера

Флажки сбрасываются при подаче сигнала RESET. В случае одновременной фиксации двух запросов приоритет отдается внешнему. Структура системы прерываний от внешнего источника показана на рисунке 1. Внешнее прерывание по входу INT воспринимается, когда на нем появляется напряжение низкого уровня. Линия INT контролируется во время сигнала ALE в последнем машинном цикле каждой команды. Результат тестирования запоминается во внутреннем триггере внешнего прерывания IX, установка которого инициирует формирование аппаратного эквивалента команды CALL 003Н. Обычно по адресу 003H находится команда безусловного перехода на подпрограмму обслуживания или команда вызова подпрограммы.

Рисунок 1 – Структурная схема системы прерываний

При выполнении аппаратного эквивалента команды CALL 003Н текущее содержимое регистра PC и флажки PSW запоминаются в стеке, обеспечивая возможность возврата в точку прерывания.

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

Если для хранения программы требуется объем памяти, превышающий 2 Кбайт, то при разработке программ обслуживания прерываний пользователю необходимо учитывать особенности управления памятью программ, присущие данному микропроцессору. Микропроцессор К1816ВЕ48 может прямо адресовать только 2048 байт памяти программ. Для расширения объема адресуемой памяти до 4096 байт предусмотрен механизм переключения банков памяти программ с использованием команд SEL MB0, SEL MB1: (0...2047) байт – банк 0, (2048...4096) байт – банк 1. Однако, его нельзя использовать при обработке прерываний, так как при выполнении перехода или вызова подпрограммы в одиннадцать младших разрядов счётчика команд PC производится загрузка адреса из команды, 12-й разряд загружается из триггера переключения банка памяти МB, указывающего номер банка памяти программ.

В микропроцессоре при обслуживании прерываний старший разряд PC, независимо от состояния триггера МB, аппаратно устанавливается в «0» всякий раз, когда происходит переход к подпрограмме обработки прерываний. Поэтому все программы обработки прерываний и все подпрограммы, вызываемые ими, должны располагаться в пределах нулевого банка памяти программ (ячейки 0...2047). До выхода из подпрограммы обслуживания прерываний (то есть до исполнения команды RETR) никакая команда не может установить в «1» старший разряд PC. Выполнение команд SEL МB0 и SEL MB1 во время обработки прерываний не рекомендуется, так как эти команды, изменяя состояние триггера МB, не изменяют значения старшего разряда PC до тех пор, пока происходит обработка текущего прерывания.

Задание.

Разработать программу для системы управления автоматизированного устройства, в состав которого входят восемь цилиндров. Воздух в цилиндры подается при помощи четырехлинейных двухпозиционных пневматических распределителей. При подаче напряжения высокого уровня на катушку распределителя происходит выдвижение штока цилиндра, при подаче напряжения низкого уровня – втягивание штока. Цилиндры должны срабатывать последовательно, после выдвижения штока первого цилиндра должен выдвинуться шток второго и т.д. После того, как сработает восьмой цилиндр, необходимо привести цилиндры в исходное состояние (втянуть штоки) в обратной последовательности (с 8 по 1 цилиндр). Время выдвижения и втягивания штока принять равным Т. В случае возникновения аварийной ситуации (появлении сигнала низкого уровня на входе INT) следует приостановить работу устройства. Работа должна быть возобновлена после нажатия кнопки «Продолжить», сигнал от которой поступает на вход Т0 микропроцессора. Убедитесь, что сигнал INT после устранения аварии снят.

Примечание к выполнению задания.

Время Т определяется по формуле:

Т = i + j + 1 (мс),

где i, j — последние цифры в номере зачетной книжки. В процессе выполнения подпрограммы обслуживания зафиксировать содержимое стека.

Содержание отчета.

1. Задание.

2. Текст программы на языке Ассемблер.

3. Содержимое стека микропроцессора.

4. Выводы по работе.

Контрольные вопросы.

1. Нарисуйте структурную схему системы прерываний микропроцессора К1816ВЕ48 и объясните принцип ее работы.

2. Что такое одноуровневая системы прерываний?

3. Какой из запросов на прерывание имеет высший приоритет?

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

5. Какие команды используются для маскирования прерываний?

6. Каким образом можно использовать вход INT микропроцессора?


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: