Читайте также:
|
|
15. Распознавание и обработка прерывания по переполнению таймера микроконтроллера HC908GP32 P
ОБРАБОТКА ПРЕРЫВАНИЙ
Прерывания изменяют текущую последовательность выполнения команд с целью обслуживания внешнего или внутреннего события, вызывавшего прерывание. Прерывание в отличие от сброса не останавливает выполнение текущей инструкции. При поступлении запроса на прерывание МК завершает выполнение текущей команды, а затем реализует механизм перехода к подпрограмме прерывания:
• регистры центрального процессора автоматически сохраняются в стеке в следующем порядке: регистр признаков CCR, аккумулятор АСС, младший байт индексного регистра X, старший байт счетчика адреса РСН, младший байт счетчика адреса PCL; по завершении прерывания инструкция возврата из прерывания RTI восстанавливает в обратном порядке все регистры центрального процессора для возобновления выполнения фоновой программы;
• бит глобальной маски прерывания I в регистре признаков CCR устанавливается в «1», запрещая обслуживание любых других запросов на прерывание до тех пор, пока не
будет завершена текущая подпрограмма прерывания;
• счетчик адреса C загружается адресом начала подпрограммы прерывания, который называют вектором прерывания.
В МК семейства НС08 реализован традиционный для всех МК фирмы «Motorola» механизм загрузки векторов прерывания. В адресном пространстве памяти программ МК выделена специальная область, которая носит название сегмента векторов прерывания. Каждому источнику запросов на прерывание в этой области отведено по два байта памяти с фиксированными адресами. Пользователь на этапе программирования МК заносит в эти ячейки памяти адрес начала подпрограммы прерывания. При переходе к выполнению подпрограммы прерывания этот адрес автоматически загружается в счетчик адреса центрального процессора. В рассматриваемом сегменте памяти размещается также вектор сброса.
Аппаратные средства прерывания МК семейства НС08 имеют следующие особенности:
• выполнение команды возврата из прерывания RTI автоматически разрешает прерывания;
• выполнение команды возврата из прерывания RTI не блокирует прерывания на период выполнения следующей команды; вход в новую подпрограмму возможен сразу после выполнения команды RTI.
Дело в том, что при входе в подпрограмму прерывания бит глобальной маски прерывания I обязательно равен 0. Иначе прерывания были бы запрещены и говорить о подпрограмме прерывания не имело бы смысла. Содержимое регистра признаков, в котором располагается маска I, сохраняется в стеке при входе в подпрограмму прерывания. Следовательно, при восстановлении регистра признаков из стека по команде RTI бит глобальной маски прерывания установится в «0», и прерывания будут разрешены.
Все источники прерываний МК семейства НС08 можно разделить на три группы:
1) немаскируемое программное прерывание по команде SWI;
2) маскируемые внешние прерывания по входу IRQ и по некоторому числу линий
портов ввода/вывода, которые принадлежат модулю сканирования клавиатуры КВI08;
3) маскируемые прерывания от периферийных модулей.
Механизм программного прерывания позволяет обратиться к какой-либо подпрограмме прерывания по ходу выполнения прикладной программы и воспользоваться подпрограммой прерывания как обычной подпрограммой. Наличие в системе команд инструкции программного прерывания SWI предоставляет такую возможность. Эта команда автоматически загружает в стек регистры CCR, АСС, X и увеличенное на единицу содержимое счетчика команд PC, а затем осуществляет переход по адресу, который указан в ячейках памяти $FFFC и $FFFD сегмента векторов прерывания. Этот адрес может быть начальным адресом подпрограммы прерывания или же находиться внутри нее. При выходе из подпрограммы прерывания команда RTI восстановит содержимое регистров центрального процессора и МК продолжит выполнение прикладной программы с команды, которая была следующей за командой SWI. Таким образом, программисту предоставляется возможность обращения в произвольный момент времени к фрагменту подпрограммы прерывания, который начинается с произвольно выбранной инструкции внутри подпрограммы прерывания, но заканчивается обязательно командой RTI.
Число линий МК MC68HC908GP32 для приема внешних запросов на прерывания ва-рьируется от одной линии (вход IRQ) до 9 линий. Обслуживание запросов по входу IRQ осуществляет модуль внешних прерываний IRQ08. Активный уровень сигнала запроса на входе IRQ - низкий логический, длительность сигнала запроса должна составлять не менее t,UH=50 не. Дополнительные входы внешних запросов могут быть получены путем.соответствующей инициализации модуля сканирования клавиатуры KBI08, который позволяет настроить некоторое число линий ввода/вывода МК для приема внешних запросов на прерывание.
Все прерывания, кроме программного по команде SWI, могут быть разрешены или запрещены сбросом или установкой глобальной маски прерывания I в регистре признаков CCR:
cli; команда сбрасывает в «О» бит I, т. е. разрешает прерывания.
sei; команда устанавливает бит I в «1», т. е. запрещает прерывания.
Кроме того, каждому источнику прерывания, за исключением программного, поставлена в соответствие индивидуальная маска прерываний, которая расположена в одном из регистров специальных функций соответствующего периферийного модуля.
Подсистема прерываний МК семейства НС08 имеет жесткое распределение приоритетов, которое не может быть скорректировано программными настройками
Дата добавления: 2015-01-30; просмотров: 113 | Поможем написать вашу работу | Нарушение авторских прав |