Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Приоритет прерываний
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Ahab
Подскажите плиз, как распределен приоретет прерываний в АТМега8.

И можно ли програмно установить приоритет.
aaarrr
Цитата(Ahab @ May 24 2008, 00:42) *
Подскажите плиз, как распределен приоретет прерываний в АТМега8.

В соответствии с адресом вектора - чем ниже адрес, тем выше приоритет.

Цитата(Ahab @ May 24 2008, 00:42) *
И можно ли програмно установить приоритет.

Нет.
Ahab
Т.е. если у внешнего прерывания INT0 адресс $0001 , то у него больший приоритет, чем у прерывания по переполнения таймеры/счетчика Т0 с адрессом $0009 ? Я правильно понял?



......


А как быть если необходимо выполнять код в OVF T0 , а прерывания от внешних импульсов игнорировать? Или просто выключать прерывание от INT0 в OVF T0 ?
aesok
Цитата(Ahab @ May 24 2008, 01:22) *
......
А как быть если необходимо выполнять код в OVF T0 , а прерывания от внешних импульсов игнорировать? Или просто выключать прерывание от INT0 в OVF T0 ?


Цитата
When an interrupt occurs, the Global Interrupt Enable I-bit is cleared and all interrupts are disabled.
The user software can write logic one to the I-bit to enable nested interrupts. All enabled
interrupts can then interrupt the current interrupt routine. The I-bit is automatically set when a
Return from Interrupt instruction – RETI – is executed.


И пожалуйста, прочитайте даташит.

Анатолий.
Ahab
Спасибо.

Буду учить , буду читать.
swisst
Цитата(Ahab @ May 23 2008, 23:22) *
А как быть если необходимо выполнять код в OVF T0 , а прерывания от внешних импульсов игнорировать? Или просто выключать прерывание от INT0 в OVF T0 ?



Запрещаете маскируемые прерывания либо ручками сбрасываете флаг прерывания.

Цитата
When an interrupt occurs, the Global Interrupt Enable I-bit is cleared and all interrupts are disabled.
The user software can write logic one to the I-bit to enable nested interrupts. All enabled
interrupts can then interrupt the current interrupt routine. The I-bit is automatically set when a
Return from Interrupt instruction – RETI – is executed.


попадаете в прерывание - глобально прерывания запрещаются, но вобщем можете руками разрешить все прерывания (тогда может прерваться ваша процедура обработки прерывания, которая запустилась ранее). Вобщем - этого не стоит делать, т.к. бит глобальных прерываний устанавливается по завершении процедуры обработки прерывания.
Что-то в этом роде...
Леонид Иванович
У AVR нет приоритетов прерываний. То, что зависит от адреса вектора, и что обычно называют приоритетами, всего лишь порядок обработки прерываний при ОДНОВРЕМЕННОМ поступлении запросов. Если бы существовали приоритеты, то обработчик менее приортетного прерывания мог бы быть прерванным обработчиком более приоритетного. Но это аппаратно не реализовано (в отличие, например, от MCS-51). Реализовать приоритеты прерываний можно программно. В простейшем случае, когда требуются всего два уровня приоритета, в обработчиках менее приоритетных прерываний нужно разрешать вложенные прерывания. В IAR для этого служит ключевое слово __nested.
Rst7
Цитата
В IAR для этого служит ключевое слово __nested.


Гм... Признаюсь, прочитав это, я на Вас хотел напасть словами "это в ARM'овском IAR'е есть", но что-то остановило... Попробовал - да, действительно, понимает и AVR'овский этот модификатор, действительно размещает SEI в начале обработчика, только вот в документации по компилятору - тишина...
Леонид Иванович
Это в pdf тишина. Они его редко обновляют. Но кроме EWAVR_CompilerReference.pdf в той же папке doc есть iccavr.htm и manuals.htm, где про __nested сказано, как, впрочем, и про другие new features.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.