Все просто(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено cout 04 ноября 2003 г. 11:31
В ответ на: можно ли не возвращаться из обработки прерывания командой reti в основную программу? отправлено BN 04 ноября 2003 г. 09:25

Нужно только принять для себя несколько постулатов:
1. Всегда в самом начале программы запрещать прерывания,нициализовать порты, тормозить таймеры и, разумеется, указатель стека.
2. Тогда из любой глубокой подпрограммы (в т.ч. прерывательской) можно делать jmp 0. Все переустановится на исходные позиции.

Однако, есть процы, у которых запрос прерывания должен заканчиваться
командой reti , потому что она сбрасывает нутряной недоступный бит, разрешающий дальнейшие прерывания. Т.е. такой проц имеет флаг режима норм.работа/прерывание. Он устанавается аппаратно при входе в прерывание и сбрасывается командой reti.
Тогда в прерывании надо достать из стека адрес возврата и подменить его на нули. Reti отдаст управление на 0.
В Atmele этого нет, но технологию подмены адресов возврата надо знать(тогда сможете делать интересные и чертовски запутанные программные трюки).

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru