Одновекторные системы прерываний. Восьмивекторные системы пре­рываний, страница 3

 (команда RST n поступает в МП по системной шине данных через приемопередатчик систем­ного контроллера 8238). В МП -системах с восьмивекторным обслуживанием внешних уст­ройств по прерыванию не нужно программным способом определять внешнее устройство, за­просившее обслуживание, а значит, уменьшается размер ППОП и увеличивается производи­тельность системы.

Пример 3 (подпрограммы обслуживания прерываний, соответствующие рис. 2.14):

0000     JMP   Main                   ; Точка входа по запросу прерывания RST 0 и по аппаратному                                                      сбросу
                                                   ;        RESET = 1 (при включении питания или нажатии кнопки                                                          сброса)

0008     PUSH            PSW        ; Начало подпрограммы обработки прерывания RST 1

             PUSH             H             ; Сохранение в стеке состояния прерванной (основной)                                                                        программы

             PUSH             D             ;       (абсолютные адреса 0000. 0008. 0010 и 0018 добавлены только

             PUSH             В             ;       для удобства анализа программы — в транслируемой                                                                    программе

             JMP               IO_1        ;        они должны отсутствовать)
             NOP

0010     PUSH             PSW        ; Начало полпрограммы обработки прерывания RST 2

PUSH           H

PUSH           D

OUT             Reset_2   ; Сброс запроса прерывания от 1/О-2

JMP              IO_2

001S      PUSH           PSW        ; Начало подпрограммы обработки прерывания RST 3

    

  JMP              IO_3

  ; и т. д. (для внешних устройств I/O—4 ... I/O - 7)

IO_1:                                      ; Продолжение подпрограммы обработки прерывания RST 1

OUT             Reset_1   ; Сброс запроса прерывания от I/O - 1

POP              В             ; Восстановление состояния прерванной программы

POP              D

POP              Н

POP              PSW

EI                                  ; Разрешение прерываний (INTE  1)

RET                               ; Возврат в прерванную программу

I0_2:      PUSH           В              ; Продолжение подпрограммы обработки прерывания RST 2

                                                 ;

POP              В              ; Восстановление состояния прерванной программы

POP              D

POP              Н

POP              PSW

EI                                  ; Разрешение прерываний (INTE  1)

RET                               ; Возврат в прерванную программу

IO_3:                                        ; Продолжение подпрограммы обработки прерывания RST 3

RET

                                  ; и т. д. (для внешних устройств I/O - 4 ... I/O - 7)

Main:                                       ; Начало основной программы: тестирование и инициализация

                                  ;      устройств МП - системы

Команды сброса запросов прерывания от внешних устройств OUT Reset_m могут распола­гаться в любом месте подпрограмм, но не после команды EI, а команда разрешения прерыва­ний EI — только в конце ППОП. В противном случае выполнение ППОП с большим приорите­том будут прерывать запросы прерываний, имеющие меньший приоритет. Катастрофически же опасен в этом случае повторный запрос прерывания обслуживаемого внешнего устройства до выполнения команды RET ППОП, вызванной предыдущим запросом — будет нарушена работа стека.  Если есть гарантия, что во время выполнения ППОП не будет повторных запросов (час­тота запросов невелика), то прерывания можно разрешать и до завершения ППОП. Если ко­манда EI расположена в конце ППОП, то приоритетность внешних устройств срабатывает только лишь при выборе их для обслуживания. Все это справедливо и для МП 8085, имеющего пять входов запросов прерываний с пятью уровнями приоритетов.

Рассмотренные выше системы прерываний являются одноуровневыми — выполнение те­кущей ППОП не могут прервать другие внешние устройства. В многоуровневых системах пре­рывании любое внешнее устройство, имеющее больший приоритет, может прервать выполне­ние ППОП внешнего устройства, имеющего меньший приоритет, а после выполнения новой ППОП будет автоматически продолжено выполнение прерванной подпрограммы. Понятно, что в этом случае команда EI в допускающей прерывание подпрограмме должна находиться не в самом ее конце. Если система прерываний имеет m уровней прерываний, то одновременно в обслуживании могут находиться до m ППОП в разной степени завершенности. Последовательность выполнения ППОП аналогична последовательности выполнения обычных команд CALL addrвызывающих подпрограммы, имеющие т уровней вложенности. Для построения многоуровневой системы прерываний требуются дополнительные аппаратные затраты.