Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МПС2 Проектирование аппаратного и программного...doc
Скачиваний:
22
Добавлен:
02.09.2019
Размер:
1.67 Mб
Скачать

Обмен по прерыванию

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

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

Упрощенная структура стандартного интерфейса для реализации обмена по прерыванию приведена на рис. 1.10,а. В этом случае сигналы с выходов флаговых триггеров портов ввода/вывода поступают в качестве сигналов запроса прерываний на контроллер прерываний, который формирует общий запрос прерывания INTR, поступающий в процессор.

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

Сигнал запроса прерывания INTR поступает в процессор, требуя обслуживания возникшего прерывания. Однако процессор может прекратить выполнение своей программы не в любой момент времени, а лишь после завершения выполняемой команды. В связи с этим сигнал INTR анализируется процессором после выполнения каждой команды, и полный цикл интерпретации команды имеет вид, приведенный на рис. 1.10,б. Если запрос INTR = 0, то процессор продолжает выполнение основной программы, считывая ее очередную команду. Если INTR = 1, то процессор прекращает выполнение основной программы и переходит к выполнению соответствующей подпрограммы обработки прерывания.

Алгоритм процесса перехода к обслуживанию прерывания приведен на рис. 1.10,в.

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

Рис. 1.10. Обмен данными с внешними устройствами по прерыванию:

а) структура интерфейса;

б) цикл интерпретации команд с возможностью прерываний;

в) алгоритм перехода к обработке прерывания;

г) алгоритм подпрограммы обработки прерываний

Для перехода к выполнению этой подпрограммы ее начальный адрес должен быть загружен в программный счетчик РС процессора. Однако после ее завершения процессор должен продолжить выполнение основной программы с команды, адрес которой в данный момент находится в РС. Поэтому этот адрес называется адресом возврата, и он должен быть сохранен. При переходе к обработке прерывания адрес возврата автоматически сохраняется в стеке. После этого в программный счетчик РС загружается начальный адрес подпрограммы и начинается ее выполнение. Алгоритм подпрограммы обработки прерывания приведен на рис. 1.10,г.

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

В общем случае обработка прерывания приводит к изменению состояния регистров процессора. Поэтому для точного восстановления состояния процессора при переходе к обработке прерывания необходимо сохранять не только адрес возврата, но и содержимое изменяемых регистров, а при возврате в основную программу  восстанавливать их. Если адрес возврата сохраняется в стеке автоматически, то содержимое регистров должно сохраняться и восстанавливаться программным путем. Для сохранения регистров также чаще всего используется стек. При этом команды, записывающие содержимое регистров в стек, помещаются в самом начале, а команды, восстанавливающие их из стека  в самом конце подпрограммы обработки прерываний непосредственно перед командой возврата (см. рис. 1.10,г).

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

Если приоритет вновь поступившего запроса меньше, чем у обрабатываемого, то он игнорируется до завершения текущей обработки прерывания. О завершении текущей подпрограммы обработки прерывания процессор сообщает выдачей команды конца прерывания EOI (End of Interrupt) в контроллер прерывания. После поступления этой команды контроллер прерывания формирует запрос прерывания INTR по отложенному запросу с меньшим приоритетом. Это вызывает переход процессора к обработке данного прерывания и т. д.

Если же приоритет вновь поступившего запроса выше, чем у обрабатываемого запроса, то контроллер прерывания сразу генерирует сигнал INTR, что вызывает переход процессора к обработке нового прерывания до завершения обработки текущего прерывания.

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

В общем случае при выполнении некоторых участков программы прерывания недопустимы. Это требует управления состоянием системы прерываний. Для этой цели процессор всегда имеет программно-управляемый флаг разрешения прерываний. При единичном значении этого флага прерывания разрешены, а при нулевом  запрещены. В последнем случае все запросы на прерывание по линии INTR игнорируются.

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

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

Все вышерассмотренные методы обмена: синхронный, асинхронный и по прерыванию – являются программно-управляемыми. При их реализации обмен осуществляется под управлением процессора. Очевидно, что для пересылки одного элемента данных между памятью и портами ввода/вывода необходимо выполнить следующие операции: пересылку из источника данных в процессор, пересылку из процессора в приемник данных, модификацию адресов и проверку на конец обмена, – которые реализуются соответствующими командами. Отсюда затраты времени на пересылку одного элемента данных включают в себя время выборки и исполнения четырех команд. Это обуславливает низкую скорость обмена, которая становится недопустимой при обмене большими массивами данных.