Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5-Apparatnye_preryvanija_v_OMK.docx
Скачиваний:
4
Добавлен:
18.09.2019
Размер:
92.75 Кб
Скачать

Что делать, если существует много источников запроса

Для обслуживания нескольких источников запросов прерываний в вычислительной системе используется узел, называемый «контроллером прерываний» (далее КП). В функции КП входит следующее:

  1. Объединять несколько сигналов запросов и направлять объединенный сигнал на вход запроса прерывания процессора (предоставление радиальной схемы подключения запросов: «один запрос – один вход»).

  2. Разрешать или не разрешать (маскировать) прохождение отдельных сигналов запроса от разных источников (маскирование запросов).

  3. Если запросы присутствуют на нескольких входах контроллера прерываний, принимать решение о том, какой запрос следует обслуживать (Priority Resolving – разрешение приоритетов), и сообщать об этом решении процессору (векторизация).

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

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

Примечание: если схемотехника входа запроса КП такова, что активный фрагмент сигнала – это низкий уровень, то можно подключать к такому входу несколько выходов запроса. Подключаемые выходы должны допускать параллельное соединение (должны иметь схемотехнику «с открытым стоком»).

КП обычно содержит «регистр масок прерываний», доступный программисту как по записи, так и по чтению. Каждый из разрядов этого регистра соответствует одному входу запроса. Выходной сигнал триггера управляет прохождением сигнала запроса посредством конъюнктора, как показано на рисунке далее.

Структура прохождения запросов прерывания от нескольких источников событий

На рисунке жирными линиями выделены фрагменты, относящиеся к одному из входов контроллера прерываний (к этому входу в моем примере подключено «сложное периферийное устройство»). В нем могут возникать события нескольких типов, которые хочется различать.

Описываем справа налево.

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

Если количество векторов меньше количества входов КП, то в обработчике приходится считывать и опрашивать «регистр запросов» (чтение запросов программно). Это справедливо также и для «сложного периферийного устройства», в котором возможно несколько разных событий, но для них генерируется общий (единственный – по любому из событий). Такое устройство изображено на рисунке слева вверху.

Слева внизу изображено «простое периферийное устройство», в котором происходят только события одного типа. В нем даже может отсутствовать элемент памяти (триггер), который фиксирует запоминает факт возникновения события и выдает сигнал запроса. Пример такого устройства – контактный датчик.

КП транслирует запрос на вход прерывания процессора, если на входах КП присутствует хотя бы один запрос, которому соответствует разрешение в регистре масок.

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

В некоторых КП программист имеет возможность управлять приоритетами входов КП. В других КП приоритеты могут быть фиксированными, и изменить их невозможно.

Кроме того, обычно в КП являются программно доступными а) набор сигналов на входах запросов, и б) набор сигналов на выходах конъюнкторов (на входах объединяющего запросы элемента ИЛИ. Программист имеет возможность прочитать в переменную эти значения, и затем, анализируя отдельные биты в этих значениях, выяснить, какие из сигналов готовности активны на входах КП, а также – какие из разрешенных запросов готовы вызвать запрос прерывания. Это, в частности, иногда имеет смысл делать в обработчике прерывания (один из запросов вызвал этот обработчик, при входе были запрещены прерывания процессору), чтобы выяснить (если интересно), какие еще запросы активны.

В сложном периферийном устройстве возможно возникновение нескольких разных событий.

Разработчики системы могут направить эти события на разные входы контроллера прерывания, либо сформировать один общий сигнал запроса прерывания, объединив сигналы об этих событиях внутри периферийного устройства по логике «или». Одновременно с этим они делают возможность программного чтения из этого периферийного устройства «слова состояния», которое содержит отдельные биты (флаги), несущие информацию о том, какие именно события возникновении внутри этого ПУ.

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

Откуда процессор берет адрес перехода на обработчик (или выбирает один из нескольких адресов, если запросов и соответствующих им обработчиков несколько)?

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

О сбросе сигналов запроса.

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

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]