Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Функции подсистемы прерываний и их реализация



Подсистема прерываний должна обеспечивать выполнение следующих функций:

1) обнаружение изменения состояния внешней среды (запрос на прерывание);

2) идентификация источника прерывания;

3) разрешение конфликтной ситуации в случае одновременного возникновения нескольких запросов (приоритет запросов);

4) определение возможности прерывания текущей программы (приоритет программ);

5) фиксация состояния прерываемой (текущей) программы;

6) переход к программе, соответствующей обслуживаемому прерыванию;

7) возврат к прерванной программе после окончания работы прерывающей программы.

Рассмотрим варианты реализации в МПС перечисленных выше функций.

 
 

(1) Фиксация изменения состояния внешней среды может осуществляться различными средствами: двоичными датчиками, компараторами, схемами формирования состояний и т.п. Будем полагать, что все эти средства формируют в конечном итоге логические сигналы запроса на прерывание z, причем для определенности будем считать, что активное состояние этого сигнала передается уровнем логической единицы (H - уровень).

Количество источников запросов в МПС может быть различно, в том числе и довольно велико. Дефицит внешних выводов МП исключает возможность передачи запросов от ВУ по " собственным" линиям интерфейса. Обычно на одну линию запроса подключается несколько источников прерываний (по функции ИЛИ), а иногда и все источники системы - на единственный вход (как в i8080).

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

 

Рис. 7.1. Организация векторного прерывания

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

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

Гораздо чаще в современных МПС используется т.н. " векторная" подсистема прерываний (Рис. 7.1). В такой системе микропроцессор, получив запрос на векторном входе INT, выдает на свою выходную линию сигнал подтверждения прерывания INTA, поступающий на все возможные источники прерывания. Источник, не выставивший запроса, никак не реагирует на сигнал INTA. Источник, выставивший запрос, получая сигнал INTA, выдает на системную шину данных " вектор прерывания" – свой номер или адрес обслуживающей программы или, чаще, адрес памяти, по которому расположен указатель на обслуживающую программу. Время реакции МПС на запрос векторного прерывания минимально (1..3 машинных цикла) и не зависит от числа источников.

(3) Для исключения конфликтов при одновременном возникновении нескольких запросов на векторном входе ответный сигнал INTA подается на источники запросов не параллельно, а последовательно – в порядке убывания приоритетов запросов. Источник, не выставлявший запроса, транслирует сигнал INTA со своего входа на выход, а источник, выставивший запрос, блокирует дальнейшее распространение сигнала INTA. Таким образом, только один источник, выставивший запрос, получит от процессора сигнал INTA и выдаст по нему свой вектор на шину данных.

Более гибко решается проблема организации приоритетов запросов при использовании в МПС специальных контроллеров прерываний (см. ниже).

Конфликты на радиальном входе исключаются самим порядком программного опроса источников.

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

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

(5..7) В разделе 4.1.3 упоминалась иерархия процессов в МП: машинный такт - машинный цикл - командный цикл. Рассмотрим возможность прерывания программы по окончанию различных процессов. Учитывая, что прерванная программа должна быть запущена по окончании работы прерывающей с того места, где она была прервана, подсистема прерываний МПС должна обеспечить фиксацию полного состояния прерываемой программы на момент прерывания.

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

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

Поэтому в большинстве МП прерывание может осуществляться после выполнения очередной команды. Состояние программы в этом случае характеризуется содержимым счетчика команд (адрес следующей команды), а так же содержимым РОН и регистра флагов. Процедура перехода к прерывающей программе и последующего возврата из нее может быть полностью идентична действиям, выполняемым по командам ВЫЗОВ и ВОЗВРАТ. Состояние программного счетчика (а иногда и регистра флагов или PSW) аппаратно фиксируется в стеке, а значение РОНов - при необходимости программно в самом тексте прерывающей программы. Учитывая, что большинство команд МП являются короткими, время реакции МПС на запрос прерывания при анализе запросов по завершению текущего командного цикла не бывает большим.

Контроллеры прерываний

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

7.3.1. На Рис. 7.2 приведена структурная схема простого контроллера прерываний К589ИК14, применяемого совместно с МП К580ВМ80 (на схеме показаны лишь основные блоки и выводы контроллера).

 
 

 

Рис. 7.2. Контроллер К589ИК14

Контроллер включает в себя следующие блоки:

Ø РгЗП - регистр запросов, на который поступают запросы на прерывание z0..z7 от внешних источников;

Ø ПШ - приоритетный шифратор, формирующий на выходе трехразрядный код номера возбужденного входа (соответствующего разряда РгЗП), причем, если на входе ПШ присутствуют несколько единиц, то на выходе будет сформирован код большего номера;

Ø Буф. - буферная схема, подключающая выход ПШ к линиям системной шины данных при подаче на управляющий вход сигнала подтверждения прерывания INTA;

Ø РгТП - регистр текущего приоритета, программно-доступный в пространстве ввода/вывода и хранящий трехразрядный код приоритета текущей программы;

Ø СС - схема сравнения, формирующая запрос на прерывание INT процессору при условии, что код наибольшего из поступивших запросов больше кода текущего приоритета.

МП проверяет состояние входа INT в конце каждого командного цикла при условии установки в " 1" триггера разрешения прерывания TI. Если INT = 1, то МП вместо машинного цикла M1 следующего командного цикла выполняет цикл обслуживания прерывания, который отличается от M1 только тем, что вместо сигнала RDM\ вырабатывается сигнал INTA\ и программный счетчик PC не инкрементируется. Поэтому не происходит чтение команды из памяти (хотя ее адрес и выставлен на AB[15: 0]), а по сигналу INTA\ контроллер выставляет на DB[5: 3] трехразрядный номер запроса. На остальных линиях DB сохраняются лог. " 1" (высокоимпедансное состояние). В такте T3 цикла обслуживания прерывания код с DB[7: 0] записывается в регистр команд МП.

Код 11nnn111 представляет собой код одной из восьми команд RST 0.. RST 7, которые выполняются аналогично командам CALL, но с фиксированными адресами вызываемых подпрограмм:

RST 0 = CALL 0000h

RST 1 = CALL 0008h

RST 2 = CALL 0010h

......

RST 7 = CALL 0038h

Таким образом, каждому запросу соответствует фиксированный адрес обслуживаемой его подпрограммы.

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

Использование..ИК14 накладывает ограничение на расположение обслуживающих прерывания подпрограмм или указателей на них в адресном пространстве памяти. Команды RST вызывают подпрограммы из начальной области адресов памяти (0000..0038), что не всегда удобно при организации МПС.

7.3.2. Программируемый контроллер прерываний К580ВН59 позволяет организовать более гибкую и эффективную подсистему прерываний в МПС.

Отличительной особенностью контроллера..ВН59 является то, что он генерирует код команды CALL, поэтому область векторов прерываний (по-прежнему компактная) может располагаться по произвольным адресам памяти. Структурная схема контроллера прерываний представлена на Рис. 7.3.

 
 

Рис. 7.3. Структура контроллера прерываний К580ВН59

Программируемый контроллер прерываний включает в себя блоки связи с системной шиной, управления и запросов. Блок запросов содержит три 8-разрядных регистра - регистр запросов РгЗ, в котором фиксируются запросы от источников прерываний, регистр маски РгМ, определяющий подмножество источников, которым разрешены прерывания и регистр состояний РгС, в котором фиксируются запросы, принятые на обслуживание.

Состав управляющих линий контроллера включает стандартные линии подключения к системной шине: D[7: 0], A0, WR\, RD\, CS\; линии, передающие запрос на прерывания процессору и ответ МП INT и INTA\ соответственно.

Линии запросов z7..z0 соединяют контроллер с источниками прерываний. Контроллер может обслуживать до 8 источников прерываний. При большем числе источников возможно каскадное включение..ВН59, причем один из контроллеров будет ведущим, а остальные (не более 8) - ведомыми. Для назначения роли контроллера в системе предназначен вход SP
(H - уровень соответствует ведущему контроллеру). Для организации взаимодействия каскадированных контроллеров прерываний предназначены линии CAS[2: 0].

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

 

Команда A0  
КИ1   А7 А6 А5 F S
КИ2   A15 A14 A13 A12 A11 A10 A9 A8
КИ3-1   z7 z6 z5 z4 z3 z2 z1 z0
КИ3-2   x x x x x n n n

Рис. 7.4. Форматы команд инициализации контроллера..ВН59

В команде КИ1 разряд S определяет количество контроллеров прерываний в системе: " 1" - один контроллер, " 0" - более одного (имеет место каскадирование). Разряд F задает шаг между соседними адресами подпрограмм, обслуживающих прерывания: " 1" - 4 байта, " 0" - 8 байт.

Разряды A7, A6, A5 вместе со всеми разрядами КИ2 образуют старшие 11 бит адреса подпрограммы. При значении F = 1 вектор прерывания (адресная часть команды CALL) формируется следующим образом:

A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 n n n 0 0,

где nnn - номер обслуживаемого запроса на прерывание (номер входа z). Если задан шаг между адресами 8 байт (F = 0), то разряд A5 игнорируется и вектор генерируется след. образом:

A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 n n n 0 0 0.

Третья команда инициализации подается (и принимается контроллером) только при наличии нескольких контроллеров в системе (S = 0), причем формат этой команды различен для ведущего и ведомых контроллеров.

Ведущему контроллеру командой КИ3-1 указывается, к каким его входам z подключены ведомые контроллеры (в соответствующем разряде КИ3-1 установлена " 1" ). " 0" в разряде КИ3-1 означает, что на соответствующий вход z подключен обычный источник прерываний.

Каждому ведомому контроллеру в трех младших разрядах КИ3-2 указывается номер входа ведущего контроллера, к которому подключен данный ведомый. Состояние разрядов КИ3-1[7: 3] безразлично.

Помимо команд инициализации, выполняемых один раз в начале работы МПС, контроллер в любое время может выполнить команды управления, позволяющие установить маску запросов (КУ1), задать режим приоритета запросов (КУ2) или определить будущую операцию. Форматы команд управления приведены на рис. 7.5.

Команда КУ1 устанавливает новое значение в регистр маски, причем если разряд РгМ установлен в " 1", то соответствующий вход z считается замаскированным и прерывание от этого источника запрещено.

Команда A0  
КУ1   m7 m6 m5 m4 m3 m2 m1 m0
КУ2   ЦП К СВ k2 k1 k0
КУ3   x СМ1 СМ0 СП Р1 Р0
                       

Рис. 7.5. Форматы команд управления контроллера..ВН59

КУ2 задает тип приоритета запросов (ЦП = 0 - фиксированный приоритет, z0 -высший, z7 -низший; ЦП = 1 - циклический приоритет). При циклическом приоритете этой же командой задается номер входа (в разрядах k[2: 0]), которому присвоен низший приоритет. После обслуживания любого запроса приоритеты входов циклически меняются на одну позицию. Разряд СВ КУ2 позволяет сбросить бит регистра РгС, номер которого задан битами k[2: 0] КУ2. Разряд К определяет, используется ли в команде поле k[2: 0].

Команда КУ3 позволяет установить или сбросить режим спецмаскирования, при котором на обслуживание принимаются запросы с приоритетом, ниже текущего. КУ3[6: 5] = 11 - установить режим спецмаскирования, КУ3[6: 5] = 10 - снять режим спецмаскирования, КУ3[6: 5] = 0x - не воздействует.

Эта же команда подготавливает в следующем такте один из допустимых к чтению объектов: регистр запросов при КУ3[1: 0] = 10; регистр состояний при КУ3[1: 0] = 11; номер запроса с наивысшим приоритетом по формату Рис. 7.6 при КУ3[2: 0] = 10x. Считывание осуществляется командой IN при A0 = 0, WR = 0. Признак INT отмечает наличие запроса, а код w[2: 0] определяет номер незамаскированного запроса с наивысшим приоритетом. Результатом чтения информации по формату Рис. 7.6 можно воспользоваться при организации программной идентификации источника прерывания.

 

INT x x x x w2 w1 w0

Рис. 7.6. Формат слова номера запроса с наивысшим приоритетом

Считывание содержимого регистра маски может осуществляться командой IN при
A0 = 1 без предварительной загрузки команды КУ3.

При организации векторных прерываний контроллер, получив запросы на входах z0..z7, фиксирует их в соответствующих разрядах РгЗ. При наличии незамаскированных запросов контроллер формирует для МП сигнал INT, а, получив ответ INTA\, принимает на обслуживание наиболее приоритетный из незамаскированных запросов, для чего

(1) устанавливает в " 1" соответствующий разряд РгС;

(2) выдает на шину данных DB код команды CALL (константу CDh);

(3) по второму и третьему сигналу INTA\ выдает на DB адрес подпрограммы обслуживающей выбранное прерывание, сгенерированный по правилам, описанным выше.

Если необходимо обслуживать в МПС более 8 источников прерываний, то можно использовать несколько контроллеров..ВН59, причем один из них будет ведущим (для него SP = 1), а остальные (до 8) - ведомые (SP = 0). Все контроллеры связываются линиями каскадирования CAS[2: 0] по принципу общей шины, причем линии CAS ведущего контроллера являются выходами, а ведомых – входами (Рис. 7.7).

Все контроллеры подключаются к системной шине одинаковым образом, только выходной сигнал INT используется по не одинаково: INT ведущего контроллера подается по системной магистрали на вход INT МП, а INT ведомых подключаются на входы запросов z ведущего контроллера. Некоторые входы z ведущего контроллера и все входы ведомых могут использоваться для приема запросов на прерывание. Максимальное число контроллеров в системе - 9, т.к. к входам ведомых нельзя подключать третий " слой" контроллеров. Максимальное число обслуживаемых запросов - 64.

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

Ведущий контроллер обрабатывает все поступившие на его входы запросы согласно заданным приоритетам и формирует сигнал INT для МП. Если запрос, принятый ведущим на обслуживание, поступил от ведомого контроллера (ведущий " знает" об этом из информации, содержащейся в КИ3-1), то ведущий в ответ на первый сигнал INTA\ выдает на DB константу CDh (код команды CALL) и на линии каскадирования CAS[2: 0] - номер обслуживаемого входа. Все ведомые контроллеры сравнивают состояние линий CAS со своим номером, заданным командой КИ3-2. Ведомый контроллер, опознавший свой номер на линиях CAS, в ответ на второй и третий сигналы INTA\ выдает соответственно младший и старший байт команды CALL - адрес подпрограммы, обслуживающей выбранное прерывание.

 


 
 

 

 

Рис. 7.7. Каскадирование контроллеров прерывания


Поделиться:



Популярное:

  1. III. Основные функции и полномочия Управления
  2. PR – отношения с общественностью. Цели, задачи, функции, методы
  3. Абсолютные и относительные ссылки. Стандартные формулы и функции. Логические функции
  4. Алгоритм нахождения производной сложной функции
  5. Арифметические операции и стандартные функции
  6. Базовые функции выборки данных
  7. Банковская система и предложение денег. Центральный банк, его функции. Коммерческие банки. Создание денег банковской системой. Банковский мультипликатор. Денежная база.
  8. БАРЬЕРНЫЕ ФУНКЦИИ ТКАНЕЙ И ФАКТОРЫ ЕСТЕСТВЕННОЙ ЗАЩИТЫ ОРГАНИЗМА
  9. Белки-каналы, их строение и функции
  10. В четвёртых, творческая реализация человека необходима окружающим людям, всему человечеству.
  11. Вегетативные органы. Корень. Функции корня. Виды корней. Типы корневых систем.
  12. Ветеринарный надзор и его функции при транспортировке животных.


Последнее изменение этой страницы: 2016-07-13; Просмотров: 575; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.047 с.)
Главная | Случайная страница | Обратная связь