Микропроцессорный комплект Z80. Книга 1 1990 г.

Микропроцессор Z80 - система прерываний. Обработка немаскируемых прерываний.


6. Система прерывании

Прерывания служат для приостановки прямого выполнения программы, с тем, чтобы
процессор смог отреагировать на определенный запрос, сформированный периферийный
устройством в зависимости от какого-либо обстоятельства. Реакция ЦП на запрос выражается в
переходе к выполнению некоторой программы, которая называется программой обработки
прерывания (Interrupt- Service Routine - ISR). После её окончания продолжается выполнение
прерванной программы2. Путём присвоения приоритетов запросам можно добиться, чтобы ЦП
реагировал, прежде всего, на наиболее важное событие, игнорируя запросы либо прерывая ISR
менее важных.

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

Различные варианты применения прерываний являются эффективным средством
повышения производительности микропроцессорной системы.

6.1. Разрешение и запре^^ение
прер^/ваний

Для приёма запросов на прерывания микропроцессор Z80 имеет два входа: INT и NMI.
Различие между ними - в приоритете и маскируемоести.

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

Состояние "запретить прерывания" либо "разрешить прерывания" запоминается
программно-доступный триггером IFF 1 (Interrupt Flip Flop) внутри ЦП. Посредством команды
разрешения прерываний EI (Enable Interrupt) либо запрещения прерываний DI (Disable Interrupt)
этот триггер соответственно устанавливается либо сбрасывается. В некоторых случаях для
сохранения его текущего состояния требуется промежуточная память, в качестве которой
предусмотрен триггер IFF2.

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

Применение EI внутри IBR дает следующие две возможности:

Важное обстоятельство: при выполнении команды EI поступивший в это время запрос на
прерывание будет блокирован до тех пор, пока не выполнится следующая за EI команда. Цель
такой задержки состоит в том, чтобы гарантировать (после команды EI) возможность выполнения
команды возврата из ISR (RET или RETI).

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

В отличие от INT. когда состояния IFF1 и IFF2 совпадают, при подтверждении
немаскируемого прерывания IFF1 сбрасывается, а IFF2 остается без изменений. Это делается для
того, чтобы на время обработки NMI сохранить состояние IFF1. которое имелось до приема /NMI.
После окончания NMI-SR по команде возврата RETN состояние IFF1 восстанавливается из IFF2.

Команды LD A,I и LD A,R предоставляют возможность тестирования IFF2: они пересылают
содержимое IFF2 в P/V-флаг. Т. о значение IFF2 может использоваться для ветвления программы.

В таблице 6.1 в компактном виде представлены все действия, влияющие на состояние
триггеров разрешения прерываний.

Таблица 6.1. Состояние триггеров разрешения прерываний

Операция

IFF1

IFF2

Примечание

Сброс ЦП сигналом /RESET

0

0

Запрещение INT при пуске системы

Команда EI

1

1

Разрешение INT (задерживается на

одну команду)

Команда DI

0

0

Запрещение INT

Прием INT

0

0

Прием INT и обработка прерывания

Команда RETI

Выход из ISR

Прием NMI

0

Прием NMI и обработка прерывания

Команда RETN

IFF1^IFF2

Выход из NMI-SR

Команда LD A,I

P/V ^ IFF2

Команда LD A,R

P/V ^ IFF2

■ состояние триггера не изменяется

6.2. Приём запросов в ЦП

Реакция микропроцессора на поступивший запрос прерывания зависит от точного времени
поступления этого запроса, а также запросов с более высокими приоритетами.

Кроме двух входов прерывания у микропроцессора Z80 есть ещё вход запроса шины для
ПДП (/BUSRQ), который имеет более высокий приоритет и, следовательно, тоже влияет на
разрешение/запрещение прерывания.

На рис.6.1 в упрощенном виде показаны основные аппаратные средства микропроцессора,
предназначенные для приёма запросов /BUSRQ, /NMI, /INT. Каждая линия запроса снабжена
соответствующим триггером приёма (РНр-Flop): BUSRQ-FF, NMI-FF, INT-FF, в которые по
нарастающему фронту последнего такта (TL) машинного цикла вводится информация о запросах.
Установка какого-либо из этих триггеров означает приём соответствующего запроса в ЦП. Далее
принятые запросы обрабатываются устройством управления, где в соответствии с указанными
приоритетами подтверждается в первую очередь тот или иной запрос, и вырабатываются
соответствующие внутренние и внешние сигналы управления.

Линии приема запросов имеют существенные различия.

Триггером BUSRQ-FF анализируется уровень сигнала /BUSRQ по нарастающему фронту
последнего такта (TL) каждого машинного цикла3.

Активный уровень сигнала /NMI сразу фиксируется входным триггером независимо от
времени его поступления. Его Состояние (а не уровень /NMI) анализируется триггером NMI-FF по
нарастающему фронту TL последнего цикла команды.

Уровень сигнала /INT до приёма в INT-FF анализируется схемой логики маскирования, где
он может быть блокирован поступающими сюда же сигналами:

•S от триггера разрешения/запрещения IFF 1,

•S от входного триггера NMI,

•S от устройства управления, который сигнализирует об обработке запросов с высшими

приоритетами. Уровень результирующего сигнала анализируется триггером INT-FF по
нарастающему фронту TL последнего цикла команды.

Приоритет /BUSRQ по отношению к /NMI и /INT состоит в следующем. При
одновременном поступлении запроса шины и одного из запросов прерывания подтверждается
запрос /BUSRQ, и шина предоставляется для ПДП. Запрос шины может прервать обработку NMI-
SR или ISR на любой цикле. Во время ПДП прерывания от входов /NMI и /INT не обслуживаются.

Приоритет /NMI по отношению к /INT состоит в том, что если оба запроса поступили до
нараставшего фронта такта TL последнего цикла команды, то /INT не воспринимается внутренним
триггером INT-F/F и, следовательно, игнорируется до конца NMI-SR. Если же в течение одной
команды запрос INT поступил до нарастающего фронта TL, а NMI - после, то выполняется первая
команда программы обработки INT, и только потом - переход к программе обработки NMI.

При подтверждении одного из запросов прерывания (NMI либо INT) процессор
вырабатывает соответствующий цикл подтверждения (см. в конце таблице 5.3).

Все реакция ЦП на сигналы управления /BUSRQ, /NMI и /INT с учётом граничных условий
представлены в таблице 6.2, а также в виде алгоритма на рисунке 6.2.

Таблица 6.2. Реакция ЦП на запросы /BUSRQ, /NMI, /INT

Сигнал

Поступление
сигнала

Приём сигнала

Действие

Примечание

/BUSRQ

До

нарастающего
фронта такта TL

При нарастающем
фронте такта TL
любого

машинного цикла

Подтверждение
(/BUSAK) в
следующем
машинном цикле

/BUSRQ имеет более
высокий приоритет,
чем /NMI и /INT

/NMI

Внутри цикла до
нарастающего
фронта такта TL

Сразу

фиксируется во
входном триггере
NMI (мин.
ширина импульса
80 мс)

Непосредственно
после обработки этой
команды - переход к
программе обработки
NMI (так же
непосредственно
после EI)

Для повторного
выполнения
программы обработки
NMI сигнала /NMI
должен быть выключен
на короткое время

-/-

Внутри цикла
после

нарастающего
фронта TL

--//--

После обработки этой
команды выполняется
следующая, потом
переход к программе
обработки NMI

--//--

/INT

До

нарастающего
фронта такта TL

Только при

нарастающем

фронте

последнего такта
команды (TL)

После обработки
команды, если
прерывания были
разрешены, переход к
ISR. Если прерывания
запрещены - /INT
игнорируется

При выполнении
команды EI /INT не
прерывается,
независимо от
состояния IFF1 и IFF2.
Он может быть принят
при выполнении
следующей за EI
команды (если будет
активен до

нарастающего фронта
TL этой команды)

-/-

После

нарастающего
фронта такта TL

Блокируется
независимо от
состояния IFF 1 и IFF2

Может быть принят
при выполнении
следующей команды,
если будет активен до
нарастающего фронта
её последнего такта TL

6.3. Обработка прерывании

6.3.1. Обработка немаскируемого
прерывания

Если принят запрос NMI, то по завершении текущей команды состояние счётчика команд
PC автоматически сохраняется в стеке, и в PC заносится адрес 0066H. Т. о. происходит перезапуск
процессора с адреса 66H. С этого места в памяти должна начинаться подпрограмма обработки
NMI; завершаться она должна командой возврата RETN. Алгоритм обработки NMI изображен на
рисунке 6.3, временные диаграммы вызова подпрограммы и возврата из неё - на рисунке 6.4 и
рисунке 6.5 соответственно.

Алгоритм обработки изображен на рис.6.7. Если в подпрограмме присутствует команда EI,
то после выполнения следующей за ней команды происходит установка IFF1, IFF2. Эти блоки
отмечены пунктиром.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Художественная литература - Фредерик Браун: "Ещё не конец"
Вступление - Вот и вышел уже четвертый номер нашей газеты.
Софт - описание нового ассемблера - Storm.
Gamedev - WORM-255F. Код игры Питон размером в 255 байт с комментариями.
Эротическое письмо - Мурка.

В этот день...   25 апреля