[an error occurred while processing this directive] [an error occurred while processing this directive]
в AVR _НЕТУ_!!!_ аппаратных приоритетов прерываний как Вы их понимаете, т.е. по умолчанию если программа находится в обработке прерывания, никакое другое прерывание обрабатываться не будет ...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Valery_Y 03 апреля 2002 г. 22:35
В ответ на: Господа, ответьте на вопрос: АВР находится в 4 прерывании, а пришло первое.Перейдет он в первое( а потом назад в 4) или закончит сначала четвертое отправлено erema 03 апреля 2002 г. 16:21

при входе в прерывание АППАРАТНО:
1)сбрасывается флаг разрешения всех прерываний (cli) и флаг _этого_ прерывания,
2)сохраняется в стеке адрес возврата,
3)выполяется переход на начало программы обработки прерывания.
Это все занимает 4 машинных цикла.

О приоритетах можно говорить лишь тогда, когда два или более прерывания пришли ОДНОВРЕМЕННО, [ т.е. за время выполнения одной команды (прерывание не может прервать команду, даже ту, что выполняется несколько тактов)], либо если прерывания были запрещены, и накопилось несколько необработанных прерываний. В этом случае первым обрабатывается прерывание с меньшим адресом вектора 0x001,0x003,и т.д.

Приоритеты можно организовать программно. Для этого при входе в обработчик надо запретить прерывания с меньшим (как Вы предполагаете) приоритетом, разрешить с бОльшим и разрешить прерывания (sei). При этом не следует забывать запретить то прерывание, которое обрабатывается в данный момент, чтобы не допустить повторного вхождения в него до завершения его обработки.

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

Ответы



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

E-mail: info@telesys.ru