Введение в микропроцессоры. Конспект лекций по курсу "Микропроцессорные устройства", страница 12

Наличие на каком-либо входе запроса на прерывание не означает вызова соответствующего прерывания (в отличие от сигнала HOLD, реакцию на который со стороны МП нельзя заблокировать). Этому может помешать нулевое (сброшенное) состояние триггера разрешения прерываний - IF. Этот триггер управляется командами EI (разрешение прерываний) и DI (запрещение прерываний, см. п. 2.8.12). Исключение составляет только сигнал TRAP, на который триггер IF не оказывает никакого влияния.

Некоторые запросы на прерывания можно также заблокировать с помощью специального регистра маски. Такие запросы называются маскируемыми (RST7.5, RST6.5, RST5.5, см. п. 2.7).

Все прерывания могут быть вызваны сигналами высокого уровня на соответствующем входе. Запрос RST7.5 может быть вызван и фронтом входного сигнала, поскольку этот вход связан с входом синхронизации триггера tRST7.5, который запоминает запрос.

Практически важно предъявить требования к длительности сигналов, воспринимаемых по высокому уровню. Для этого необходимо учесть, что входы запросов на прерывания МП проверяет в последнем такте последнего машинного цикла команды (прерывание возможно только после выполнения текущей команды). Поэтому для надежного распознавания высокий уровень сигнала запроса прерывания tint должен длиться не менее времени выполнения самой длительной команды.  Самая длительная команда выполняется за 18 тактов частоты CLK tclk, т.е.:

tint = 18 * tclk =  18 / fclk  = 36 / fbq .                                           (2.2)

2.5.2. Алгоритм аппаратной обработки прерываний

Алгоритм аппаратной обработки прерываний представлен на рис. 2.9.

НАЧАЛО

      ...

1. Такт Т1 первого машинного цикла команды

      ...

2.  Последний такт последнего машинного цикла команды

         ½                нет

3.  TRAP = 0? ———  4. (WZ):= 24h ——> 20

 да½      нет

5. IF = 1? ——> 1

 да½             нет                                     нет

6. RST7.5 = 0? ———  7. Mask7.5 = 1? ———  8. (WZ):= 3Сh ——> 19

 да                          да

     

                     нет                                     нет

9. RST6.5 = 0? ———  10. Mask6.5 = 1? ———  11. (WZ):= 34h ——> 19

 да                          да

     

                     нет                                     нет

12. RST5.5 = 0? ———  13. Mask5.5 = 1? ———  14. (WZ):= 2Сh ——> 19

 да                          да

     

                          нет

15. INTR = 1? ——> 1

 да ½

16. Выдать INTA# (Ввести байт)

         ½                        нет 

17. Байт <> RST  i? ——  18. (WZ):= 8 * i ——> 19

 да ½

18. Дважды выдать INTA# (Ввести адрес); (WZ):= адрес

19. IF:= 0

20. (PC) —> STACK; PC:= (WZ)

21.  Выполнение обработчика

22.  IF:= 0

½                                        нет

23. Обрабатывался RST7.5?

 да ½

24. Сбросить tRST7.5

25. (STACK) —> PC; ——> 1

Рис. 2.9. Алгоритм аппаратной обработки прерываний

Блоки 1, 2 этого алгоритма представляют выполнение очередной команды, аппаратная поддержка прерываний выполняется в блоках 3...25.

Блок 3 проверяет наличие активного (высокого) уровня сигнала TRAP. Если сигнал TRAP активен, то следует переход на блок 4, который загружает регистровую пару WZ (см. п. 2.3) константой 24h, после чего следует переход на блок 20 для сохранения содержимого счетчика команд в стеке и загрузки в счетчик команд содержимого регистровой пары WZ (фиксированного вектора прерывания). Поскольку TRAP среди всех запросов на прерывания проверяется первым, то он имеет наибольший приоритет (см. п. 2.5.1).

Если проверка выявит пассивный (низкий) уровень сигнала TRAP, то следует переход на блок 5, который проверяет состояние триггера разрешения прерываний IF. Если этот триггер сброшен, то следует переход на блок 1, т.е. проверка оставшихся запросов на прерывания не производится. Это означает, что на сигнал TRAP триггер разрешения прерываний  не влияет, а на оставшиеся запросы влияет.