МИКРОКОНТРОЛЛЕР AVR - Страница 51

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

Следует заметить, что команды «push» и «pop» могут быть заменены на «Id» и «st» с предекрементом/постинкрементом.

Старшие модели микроконтроллеров AVR используют стек в оперативной памяти, что означает, что можно довольно легко реализовать вложенные прерывания (почти как в 68НС05). После того, как началось выполнение обработчика прерывания, и было сохранено содержимое регистров контекста, можно выполнить команду «sei», чтобы разрешить обслуживание других прерываний.

Следует дать несколько комментариев относительно обработки прерываний в младших моделях микроконтроллеров, то есть в серии AVRI200. Так как они имеют очень маленький стек (только на 3 элемента) и не содержат памяти RAM (имеются только регистры общего назначения), вам придется более осторожно планировать обработчики прерываний, которые собираетесь использовать. Лично я всегда оставляю в запасе, по меньшей мере, три регистра общего назначения (или пять, если в обработчике прерываний предполагается использовать индексный регистр Z) для сохранения содержимого регистров контекста основной программы. Я не использую вложенные прерывания и исключаю вызовы функций внутри обработчика, а также, по возможности, стараюсь не использовать вызовы функции в основной программе. Реализовать обработчик прерывания, удовлетворяющий этим условиям, не очень сложно, зато это поможет избежать впоследствии лишних проблем, таких как переполнение стека.

Go to Top