page42
Важное обстоятельство: при выполнении команды 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
■ состояние триггера не изменяется