МИКРОКОНТРОЛЛЕР AVR - МИКРОКОНТРОЛЛЕР AVR

Прерывания

Реализация прерываний в AVR является специфичной для конкретных приложений. Я сделал такое утверждение, так как легко можно написать обработчик прерываний, который абсолютно не будет менять контекстовую информацию контроллера (содержимое стека, регистра состояния и других регистров), или такой, который будет сохранять содержимое всех РОН и некоторых специальных регистров.

Описать, что происходит внутри процессора во время выполнения прерывания очень просто. Если произошел запрос прерывания, и флаг I в регистре состояния установлен в 1, то адрес следующей команды сохраняется в стеке, а выполнение программы продолжается с адреса, хранящегося в соответствующем векторе прерывания. Когда запрос прерывания получен, и программа перешла по этому вектору, флаг I сбрасывается в 0. чтобы предотвратить возможность вызова нового прерывания во время обработки текущего прерывания.

Флаг I будет снова установлен в 1 в конце обработчика прерывания, когда выполняется команда возврата «reti». Он также может быть установлен в 1 в процессе обработки (после сохранения контекстовых регистров), чтобы разрешить вложенные прерывания. Средние и старшие модели AVR могут обрабатывать столько вложенных прерываний, на сколько хватит объема стека для сохранения содержимого программного счетчика и регистров контекста. Младшие модели имеют ограниченный объем стека (три позиции), который может быстро переполниться при выполнении вложенных прерываний или подпрограмм.

Go to Top