December 17 2017 17:45:11
Навигация
Авторизация
Логин

Пароль



Вы не зарегистрированы?
Нажмите здесь для регистрации .

Забыли пароль?
Запросите новый здесь.
пример структуры прикладной программы с двумя подпрограммами прерывания по запросам
МИКРОКОНТРОЛЛЕРЫ СЕМЕЙСТВА НС08

Ниже приведен пример структуры прикладной программы с двумя подпрограммами прерывания по запросам на входе ØIRQ и от процессора событий TIM1. Абсолютные адреса сегмента векторов прерывания соответствуют карте памяти МК HC908GP32/20.

vectorirq:      equ  $FFFA

vectortim1:    equ  $FFF2

vectorreset:    equ  $FFFE

;Основная программа

START: ldhx #$1РР ;Инициализация  указателя   стека  с  целью переместить

              txs               ;область стековой памяти из нулевой в первую страницу

                                  ;ОЗУ МК.

;Тело подпрограммы инициализации

               cli               ;разрешить прерывания: установить в 0 глобальную

                                  ;маску прерываний.

;Тело основной программы управления

;Подпрограмма обработки прерывания по внешнему запросу.

INT_IRQ:     pshh    ;Сохранить в стеке старший байт индексного регистра

                                ;Н:Х. Сохранение остальных регистров центрального

                                ;процессора (регистра признаков CCR, аккумулятора АСС

                                ;и младшего байта индексного регистра X) произошло

                                ;автоматически при переходе к выполнению

                                ;подпрограммы прерывания.

;Тело подпрограммы обработки прерывания

                    pulh    ;Восстановить из стека старший байт индексного регистра

                               ;Н:Х.

                    rti       ;Возврат из прерывания. Эта команда восстанавливает из

                               ;стека регистры X, АСС ;и CCR автоматически без

                               ;использования специальных команд.

;Подпрограмма обработки прерывания по переполнению счетчика

;временной базы процессора событий TIM1

INT_TIMA1: pshh   ;Сохранить в стеке старший байт индексного регистра Н.

;Тело подпрограммы обработки прерывания

                      pulh    ;Завершение подпрограммы обработки прерывания.

                      rti        ;Определить вектора прерывания и начального [запуска

                      org      vector_irq

                      dw INT_IRQ

                      org      vector_tima

                      dw INT_TIM1

                      org      vector_reset

                      dw START

Внимание! МК семейства НС08 при переходе к подпрограмме обработки прерывания автоматически сохраняют в стеке содержимое регистра признаков CCR, аккумулятора АСС, младшего байта индексного регистра Н:Х и счетчика адреса PC. Содержимое старшего байта индексного регистра Н:Х автоматически не сохраняется. Используйте команды pshh и pulh для сохранения и восстановления регистра Н под управлением подпрограммы.

Аппаратные средства прерывания МК семейства НС08 имеют следующие особенности:

* Выполнение команды возврата из прерывания RTI автоматически разрешает прерывания.

* Выполнение команды возврата из прерывания RTI не блокирует прерывания на период выполнения следующей команды. Вход в новую подпрограмму возможен сразу после выполнения команды RTI.

Дело в том, что при входе в подпрограмму обработки прерывания бит глобальной маски прерывания I обязательно равен 0. Иначе прерывания были бы запрещены, и говорить о подпрограмме обработки прерывания не имело бы смысла. Содержимое регистра признаков, в котором располагается маска I, сохраняется в стеке при входе в подпрограмму обработки прерывания. Следовательно, при восстановлении регистра признаков из стека по команде RTI бит глобальной маски прерывания установится в 0 и прерывания будут разрешены.

Все источники прерываний МК семейства НС08 можно разделить на три группы:

* Немаскируемое программное прерывание по команде SWI.

* Маскируемые внешние прерывания по входу ØIRQ и по некоторому числу линий портов ввода/вывода, которые принадлежат модулю сканирования клавиатуры КВI08.

* Маскируемые прерывания от периферийных модулей.

Механизм программного прерывания позволяет обратиться к какой-либо подпрограмме обработки прерывания по ходу выполнения прикладной программы и воспользоваться подпрограммой обработки прерывания как обычной подпрограммой. Наличие в системе команд инструкции программного прерывания SWI предоставляет такую возможность. Эта команда автоматически загружает в стек регистры CCR, АСС, X и увеличенное на 1 содержимое счетчика команд PC, а затем осуществляет переход по адресу, который указан в ячейках памяти $FFFC и $FFFD сегмента векторов прерывания. Этот адрес может быть начальным адресом подпрограммы обработки прерывания или же находиться внутри нее. При выходе из подпрограммы обработки прерывания команда RTI восстановит содержимое регистров центрального процессора и МК продолжит выполнение прикладной программы с команды, которая была следующей за командой SWI. Таким образом, программисту предоставляется возможность обращения в произвольный момент времени к фрагменту подпрограммы обработки прерывания, который начинается с произвольно выбранной инструкции внутри подпрограммы обработки прерывания, но заканчивается обязательно командой RTI.

Число линий МК для приема внешних запросов на прерывания варьируется от одной линии (вход ØIRQ) до 6...9 линий. Обслуживание запросов по входу IRQ осуществляет модуль внешних прерываний IRQ08. Активный уровень сигнала запроса на входе ØIRQ - низкий логический, длительность сигнала запроса должна составлять не менее tILIH =50 нс (более подробно см. п. 3.5.6). Дополнительные входы внешних запросов могут быть получены путем соответствующей инициализации модуля сканирования клавиатуры KBI08, который позволяет настроить некоторое число линий ввода/вывода МК для приема внешних запросов на прерывание (см. п. 3.8.6).

Все прерывания, кроме программного по команде SWI, могут быть разрешены или запрещены сбросом или установкой глобальной маски прерывания I в регистре признаков CCR:

         cli              ;команда сбрасывает в 0 бит I, т.е. разрешает прерывания.

         sei              ;команда устанавливает бит I в 1, т.е. запрещает прерывания.

Внимание! Глобальная маска прерывания I в регистре признаков CPU МК маскирует все прерывания, в том числе и внешние прерывания по запросу ØIRQ. При сбросе МК маска I устанавливается в 1, следовательно, сразу после включения питания внешние прерывания запрещены.

Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста, залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, авторизуйтесьили зарегистрируйтесь для голосования.

Нет данных для оценки.

Время загрузки: 0.04 секунд 2,299,338 уникальных посетителей