Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PosobieMPS_pechat.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
1.06 Mб
Скачать

2. Работа по прерываниям

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

Микропроцессор К1810 может распознать 256 различных прерываний. Программа прерывания вызывается выполнением команды INT type, входящей в систему команд МП К1810, где type – тип прерывания, принимающий значения от 0 до 255.

Все прерывания можно разделить на 3 группы: внешние, внутренние, программные.

Внешние прерывания. Внешние прерывания инициируются ВУ путем поступления от ВУ сигнала “Запрос на прерывание”. Информация о запросах на выполнение программы для внешнего прерывания поступает в МП по двум входам: INTR или NMI. В зависимости от этого сами прерывания делятся соответственно на маскируемые или немаскируемые внешние прерывания.

Внешние маскируемые прерывания маскируются в ЦП флагом IF. Если IF=0, то запрос от ВУ на прерывание ЦП игнорируется, т.е. прерывание не распознается. Если IF=1, то процессор воспринимает и реагирует на запрос прерывания. Установка флага IF производится командами CLI (запрет прерывания) и STI (разрешение прерывания). Для организации внешних маскируемых прерываний в МПС используется узел прерываний, на который поступают запросы от подключаемых к МПС ВУ. Вначале работы МПС узел прерываний программируется. Основными параметрами программирования являются:

  • присвоение каждому входу запроса от ВУ типа прерывания, т.е. параметра «type»;

  • б) присвоение каждому входу запроса приоритета обслуживания. Для определения очередности обслуживания нескольких запросов, поступивших одновременно, устанавливают систему приоритетов. Первым будет обслуживаться тот запрос, у которого выше приоритет. Запрос с более высоким приоритетом прерывает выполнение программы обслуживания ВУ с более низким приоритетом.

Структурная схема соединения МП с узлом прерываний показана на рис. 2.1. При возникновении ситуации, когда ВУ требует важной или срочной связи с МП, оно посылает запрос в узел прерываний. Узел прерываний сообщает МП по входу INTR о возникшей ситуации. Если прерывания не замаскированы флагом IF, микропроцессор приостанавливает выполнение текущей программы и передает в узел прерываний на вход сигнал о своей готовности перейти к выполнению программы прерывания. По этому сигналу узел прерываний выдает в МП по шине данных параметр “type” (тип прерывания), соответствующий программе обработки запроса от этого ВУ. Этот параметр называется вектором прерывания, по которому определяется начальный адрес программы прерывания обработки данного запроса.

МП

Узел

прерываний

Запросы

от ВУ

INTR

type

Рис. 2.1. Структурная схема соединения МП с узлом прерываний

Внешнее немаскируемое прерывание имеет фиксированный тип равный 2, который автоматически формируется внутри МП. Прерывание называется немаскируемым потому, что оно не зависит от значения флага IF, и его нельзя запретить. Запросы на немаскируемое прерывание поступают на вход NMI МП и используются при событиях, требующих немедленной реакции. Например, при аварийном пропадании питания, при обнаружении ошибок при чтении информации из памяти и т.д. В этих случаях выполняется программа прерывания по команде INT 2. Запросы на прерывание по входу NMI имеют более высокий приоритет, чем прерывания по входу INTR.

Внутренние прерывания. Внутренние прерывания инициируются самим МП. Распознаются и выполняются независимо от состояния флага IF и не маскируются. Характеризуются тем, что сигналы подтверждения прерывания не формируются. Внутренние прерывания имеют фиксированный тип и возникают в следующих случаях.

Прерывание по ошибке деления (тип 0) генерируется МП после выполнения команд деления DIV и IDIV, если формат частного превышает формат получателя или в случае деления на ноль. При переполнении разрядной сетки в результате выполнения математических операций флаг OF устанавливается в единицу (OF=1). При этом возникает прерывание по переполнению (тип 4), которое генерируется по однобайтовой команде INTO. Прерывание контрольной точки или точки останова (тип 3) вызывается однобайтовой командой INT3. Контрольные точки вводятся обычно при отладке программы с целью индикации содержимого регистров, ячеек памяти и портов внешних устройств в критических местах программы.

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

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

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

Процедура обслуживания прерываний

Программы обслуживания всех прерываний находятся в блоке внутренней памяти МПС. Связь между кодом, определяющим тип прерывания, и адресом ячейки памяти первой команды программы прерывания соответствующей этому типу устанавливается с помощью таблицы указателей векторов прерываний (рис. 2.2.) Полная таблица занимает 1 Кбайт памяти и содержит 256 элементов, расположенных по адресам (0-3FF)H. Каждый элемент таблицы содержит два слова (по 2 байта). Слово с большим адресом содержит базовый адрес сегмента, а слово с меньшим адресом – смещение программы прерывания от начала кодового сегмента. Процессор вычисляет адрес нужного элемента таблицы путем умножения типа прерывания на 4. При переходе на программу прерывания смещение загружается в регистр IP, а адрес сегмента - в регистр CS.

При переходе на программу обслуживания прерывания после сохранения в стеке содержимого регистров CS, IF, и F флаги IF и TF сбрасываются. Тем самым автоматически запрещаются внешние прерывания по входу INT, что необходимо для защиты начального участка программы, на котором в стеке сохраняется содержимое внутренних регистров МП. Затем программа может разрешить внешние прерывания командой STI. Кроме того, она может быть прервана запросом на входе NMI и внутренними прерываниями.

Адрес

Тип 0

Ошибка деления

IP

мл. байт

ст. байт

мл. байт

ст. байт

00000

CS

Тип 1

Пошаговый режим

IP

00004

CS

Тип 2

Прерывания по NMI

IP

00008

CS

………………………

Тип 255

Пользовательский

IP

003FC

CS

Рис. 2.2. Таблица указателей векторов прерываний

В конце программы восстанавливается содержимое регистров, которые ранее были ею сохранены. Этот участок следует также защитить от прерываний по входу INTR сбросом флага IF (командой CLI). Программа должна заканчиваться командой возврата из прерывания IRET, которой предшествует команда STI. Перед выполнением команды IRET стек должен быть в том состоянии, в котором он оказался сразу после вызова программы. Команда IRET извлекает три верхних слова из стека и помещает их в регистры IP,CS и F. Тем самым обеспечивается возврат к очередной команде основной программы, перед выполнением которой возникло прерывание.

Контроллер прерываний К1810ВН59А

В МПС, базирующихся на МП К1810, обработку запросов на прерывание от ВУ выполняет БИС К1810ВН59А – программируемый контроллер прерываний (ПКП). БИС ПКП обеспечивает управление 8-ю приоритетными внешними прерываниями, т.к. имеет 8 выводов для запросов на прерывание. Имеет возможность организации каскадирования путем подключения нескольких БИС ПКП, один из которых является ведущим, а остальные ведомыми. При этом число линий запросов на прерывание от ВУ может быть увеличено до 64-х. Допускается программное маскирование любого запроса на прерывание.

Структурная схема БИС ПКП приведена на рис. 2.3. Ниже приведены назначения выводов контроллера:

  • D7-D0 – выводы данных. Для взаимодействия регистров БИС с ЦП по шине данных МПС.

  • – чтение. Сигнал на этом выводе позволяет считывать из контроллера содержимое адресуемого внутреннего регистра на ШД (IRR, ISR, IMR или наличие приоритетного запроса).

  • – запись. Сигнал на этом выводе позволяет загрузить с ШД информацию в адресуемый регистр контроллера.

  • - выбор БИС. Сигнал на этом выводе разрешает связь контролера с ШД, т.е. идентифицирует обращение ЦП к контроллеру.

  • А0 – адресный вывод. Поступающий на этот вывод сигнал определяет адресацию внутренних регистров контроллера. Используется при загрузке приказов инициализации и рабочих приказов и считывании параметров состояния контроллера. Подключается к младшему разряду А0 шины адреса МПС. Для каждого контроллера необходимо зарезервировать два адреса (четный с А0=0 и нечетный с А0=1).

Сброс запросов

Приказы инициализации Рабочие приказы

ШПр

I C W 1

I C W 2

I C W 3

I C W 4

O C W 2

O C W 3

#SP/#EN АS2 CАS2

ISR

IRR IRR

САS1

D7-D0

САS0

# CS

O C W 1

Регистр масок

А0

IR0

INT IR1

IR2

# INTА

IR3

IR4

IR5

IR6

# WR

IR7

# RD

Рис.2.3. Структура программируемого контроллера прерываний

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