Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы_по_Семисалову[1].DOC
Скачиваний:
32
Добавлен:
25.09.2019
Размер:
7.69 Mб
Скачать
  1. Векторное и радиальное прерывание.

Блок предназначен для концентрации запросов на прерывание от различных устройств и блоков УЧПУ. Вообще в УЧПУ, как в устройстве, построенном на основе микроЭВМ, существует три вида прерываний: векторное, радиальное и комбинированное. Рассмотрим их подробнее.

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

М агистраль

МП У1 У2 У3

INT INT INT INT

EIO EII EIO EII EIO EII EIO

Рис.2.11. Схема векторного прерывания:

МП - микропроцессор, У1...У3 - внешние устройства.

В тот момент, когда какое либо устройство требует его обслужить (передать или принять информацию), оно выставляет на магистраль сигнал запроса прерывания - INT. Запросы прерываний от всех устройств подаются на одну и туже линию связи магистрали, поэтому устройства должны иметь выходы этого сигнала, позволяющие объединение по ИЛИ. Процессор, получив сигнал INT, заканчивает выполнение текущей операции, записывает в стек свои параметры (состояние счетчика адресов и собственный регистр состояния), и выдает на магистраль два сигнала: EIO и MSR. Сигнал EIO (на входе устройств он уже называется сигналом EII) проходит последовательно через все устройства, могущие работать в режиме обслуживания прерываний. Если устройство, на которое пришел сигнал EII не требовало прерывания, то оно передает этот сигнал далее по цепи уже как сигнал EIO (в нашем случае, например, устройство У1) . Если же устройство затребовало прерывание (в нашем случае - У2), то оно прерывает распространение сигнала E I I на последующие устройства и выдает на шину данных свой идентификационный код - вектор прерывания, об этом устройство сообщает процессору сигналом ASW. Процессор читает на шине код вектора прерывания, идентифицирует его как адрес, к которому ему нужно обратиться для перехода к подпрограмме обслуживания данного устройства. Цикл предоставления прерывания на этом заканчивается и дальнейшая работа процессора осуществляется по программе. По окончании работы подпрограммы (она обязательно должна заканчиваться командой RTI - выход из прерывания) процессор восстанавливает из стека свои параметры и продолжает работу по прерванной основной программе. Если в процессе обслуживания устройства (работа по подпрограмме) затребует прерывание устройство У1, т.е. на магистрали снова появится сигнал INT, процессор прервет свою работу по подпрограмме, снова выдаст в магистраль сигналы EIO и MSR и получит в ответ код вектора прерывания устройства У1. Таким образом процессор начнет обслуживание устройства У1 не закончив обслуживания устройства У2. Обслуживание устройства У2 будет продолжено по окончании обслуживания устройства У1. Если же в момент обслуживания устройства У2 и тем более устройства У1 затребует прерывание устройство У3, то его запрос будет игнорирован, поскольку сигнал предоставления прерывания от процессора (EIO) будет блокирован предыдущими устройствами. Таким образом, чисто геометрическое расположение устройств по отношению к процессору автоматически устанавливает их приоритет в обслуживании прерываний: чем ближе устройство к процессору, тем выше его приоритет. Если устройство, имеющее более низкий приоритет, не допускает прекращения его обслуживания, то в подпрограмме его работы (в самом начале) необходимо ввести команду маскирования прерываний в процессоре (установить Т-разряд регистра состояния), в этом случае устройство будет обслужено до конца. Надо только не забыть в конце подпрограммы, перед выходом из прерывания, ввести команду размаскирования.