реклама на сайте
подробности

 
 
> Приоритет прерываний, ATMega8
Ahab
сообщение May 23 2008, 20:42
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 12-05-08
Из: Харьков
Пользователь №: 37 457



Подскажите плиз, как распределен приоретет прерываний в АТМега8.

И можно ли програмно установить приоритет.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 8)
aaarrr
сообщение May 23 2008, 20:51
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



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

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

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

Нет.
Go to the top of the page
 
+Quote Post
Ahab
сообщение May 23 2008, 21:22
Сообщение #3





Группа: Новичок
Сообщений: 5
Регистрация: 12-05-08
Из: Харьков
Пользователь №: 37 457



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



......


А как быть если необходимо выполнять код в OVF T0 , а прерывания от внешних импульсов игнорировать? Или просто выключать прерывание от INT0 в OVF T0 ?
Go to the top of the page
 
+Quote Post
aesok
сообщение May 23 2008, 21:33
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(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.


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

Анатолий.
Go to the top of the page
 
+Quote Post
Ahab
сообщение May 23 2008, 21:37
Сообщение #5





Группа: Новичок
Сообщений: 5
Регистрация: 12-05-08
Из: Харьков
Пользователь №: 37 457



Спасибо.

Буду учить , буду читать.
Go to the top of the page
 
+Quote Post
swisst
сообщение May 23 2008, 21:41
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 16-02-07
Из: Харьков
Пользователь №: 25 425



Цитата(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.


попадаете в прерывание - глобально прерывания запрещаются, но вобщем можете руками разрешить все прерывания (тогда может прерваться ваша процедура обработки прерывания, которая запустилась ранее). Вобщем - этого не стоит делать, т.к. бит глобальных прерываний устанавливается по завершении процедуры обработки прерывания.
Что-то в этом роде...

Сообщение отредактировал swisst - May 23 2008, 21:46
Go to the top of the page
 
+Quote Post
Леонид Иванович
сообщение May 24 2008, 21:07
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 318
Регистрация: 21-07-06
Из: Минск
Пользователь №: 18 986



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


--------------------
Go to the top of the page
 
+Quote Post
Rst7
сообщение May 25 2008, 11:39
Сообщение #8


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата
В IAR для этого служит ключевое слово __nested.


Гм... Признаюсь, прочитав это, я на Вас хотел напасть словами "это в ARM'овском IAR'е есть", но что-то остановило... Попробовал - да, действительно, понимает и AVR'овский этот модификатор, действительно размещает SEI в начале обработчика, только вот в документации по компилятору - тишина...


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Леонид Иванович
сообщение May 25 2008, 16:09
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 318
Регистрация: 21-07-06
Из: Минск
Пользователь №: 18 986



Это в pdf тишина. Они его редко обновляют. Но кроме EWAVR_CompilerReference.pdf в той же папке doc есть iccavr.htm и manuals.htm, где про __nested сказано, как, впрочем, и про другие new features.


--------------------
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 06:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01419 секунд с 7
ELECTRONIX ©2004-2016