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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Прерывания в AT90S8535, вложенные прерывания
Nik
сообщение Nov 2 2004, 09:03
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 28
Регистрация: 2-11-04
Пользователь №: 1 016



Поясните начинающему, как будут обрабатываться прерывания от событий 1 (более высокий приоритет) и 2 (более низкий приоритет), если:
1.во время обработки события 1 произойдет событие 2
2.во время обработки события 2 произойдет событие 1
Go to the top of the page
 
+Quote Post
Himer
сообщение Nov 2 2004, 09:14
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 51
Регистрация: 22-06-04
Из: Riga,Latvia
Пользователь №: 104



Наскока помню в AVR нету приоритета прерываний, тебе самому надо разрешать прерывание 1 во время обработки события 2, и запрещать прерывание события 2(ну ето автоматом AVR во время обработки прерываний делает) во время обработки 1 - го.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Nov 2 2004, 09:28
Сообщение #3


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Приоритеты прерываний у Atmel AVR означают буквально следующее:
- предположим глобально прерывания запрещены;
- происходят события 1 и 2 в любом порядке;
- разрешаются глобально прерывания;
- первым обрабатывается прерывание от события 1 (более высокий приоритет).
Если глобально превания разрешены изначально и события наступают одновременно (в пределах такта), то картина та же.
При переходе к процедуре обработки прерывания глобально все прерывания запрещяются (независимо от приоритета) и разрешаются при выходе из обработчика автоматически. Если их глобально разрешить инструкцией SEI (внутри обработчика), то произойдёт переход к обработчику любого (независимо от приоритета) прерывания, имеющему место (захваченному) на данный момент.
Go to the top of the page
 
+Quote Post
Nik
сообщение Nov 2 2004, 10:52
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 28
Регистрация: 2-11-04
Пользователь №: 1 016



спасибо за разъяснения
Go to the top of the page
 
+Quote Post
Пришелец
сообщение Oct 14 2009, 05:23
Сообщение #5


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

Группа: Участник
Сообщений: 183
Регистрация: 28-01-05
Пользователь №: 2 272



а может ли при разрешении вложенных прерываний из прерывания вызваться то же самое прерывание котрое в данный момент обрабатывается?

Другими словами надо ли при разрешении разрешении прерываний запрещать обрабатываемое прерывание?

в даташите написано, что флаг вызывающий прерывание сбрасывается аппаратно при выполнении прерывания т.е. в прерывании он видимо уже сброшен и может вновь установится вызвав то же прерывание.
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Oct 14 2009, 05:36
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(Пришелец @ Oct 14 2009, 08:23) *
а может ли при разрешении вложенных прерываний из прерывания вызваться то же самое прерывание котрое в данный момент обрабатывается?


То которое обрабатывается - нет.
Но если будете долго сидеть в обработчике прерывания то возможно наступит такой момент когда выполняться условия для генерации нового этого же прерывания - например ТС0 генерирует прерывание TC0OVF раз в 1мС а вы в прерывании вызываете функцию задержки на 5 мС. Тогда ждите краха системы - возникновение множества вложенных прерываний с переполнением стека smile.gif
Go to the top of the page
 
+Quote Post
Пришелец
сообщение Oct 14 2009, 05:45
Сообщение #7


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

Группа: Участник
Сообщений: 183
Регистрация: 28-01-05
Пользователь №: 2 272



непонятно biggrin.gif

в том то и вопрос:

значит может всё-таки

долго и недолго относительные понятия

например если по таймеру прерывания с периодом 64 мкс

на их фоне разрешаются другие прерывания

сейчас прерывания от этого таймера на время обработки его прерывания запрещаю - вот думаю можно ли не запрещать
(если задерживаются некоторые прерывания таймера - некритично)


из Вашего ответа понял, что обработчик таймера может вызваться повторно если его индивидуально не запретить при разрешении всех прерываний
Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 14 2009, 05:58
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Пришелец @ Oct 14 2009, 08:45) *
сейчас прерывания от этого таймера на время обработки его прерывания запрещаю - вот думаю можно ли не запрещать
(если задерживаются некоторые прерывания таймера - некритично)
Если в процедуре обработки прерывания разрешены прерывания (флаг I установлен), и возможно условие повторной установки флага обрабатываемого прерывания, то запрет этого конкретного прерывания - обязателен (иначе, процедура обработки прерывания будет прервана и вызвана вновь).
Go to the top of the page
 
+Quote Post
Пришелец
сообщение Oct 14 2009, 06:08
Сообщение #9


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

Группа: Участник
Сообщений: 183
Регистрация: 28-01-05
Пользователь №: 2 272



спасибо.

этого ответа и ждал rolleyes.gif
Go to the top of the page
 
+Quote Post
Палыч
сообщение Oct 14 2009, 07:19
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(Пришелец @ Oct 14 2009, 09:08) *
этого ответа и ждал rolleyes.gif
Да, ещё забыл сказать: при таком подходе к обработке прерываний, возможен пропуск прерываний. Например, если флаг прерывания от таймера взводится каждые 10 мс, а процедура обработки прерывания может затянуться на, например, 15 мс, то может случиться, что условие взведения флага произайдет дважды (ведь не факт, что обработка прерывания начнется сразу же, как установится флаг прерывания - прерывания могут быть замаскированны при обработке других прерываний). Наверное, что-то у Вас не в порядке с организацией обработки прерываний, раз приходится так извращаться: разрешать прерывания в процедуре обработки прерывания. Наверное, лучше "перелопатить" программу...
Go to the top of the page
 
+Quote Post
Пришелец
сообщение Oct 14 2009, 10:25
Сообщение #11


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

Группа: Участник
Сообщений: 183
Регистрация: 28-01-05
Пользователь №: 2 272



Да это само собой разумеется - пропускаться могут.

насчёт перелопатить - согласен но на арме

авр себя исчерпал

посудите сами

мега32(кварц 14.7456) -
уарт на 115200
два программных уарта 19200 и 9600
вывод звука 16 кгц
интерфейс с точ мемори (эл ключи)
измерение частоты аналоговых сигналов (т.е. постоянно прерывания по окончанию измерения АЦП)
ДТМФ декодер программный
на SPI висят dataflash и fram (постоянный обмен и параллельно считывание звука)

памяти давно не осталось - приходится ужиматься - код переписывать выбрасывать ненужное
а данные засовывать в fram


думаю давно пора менять процессор crying.gif
Ваше мнение?
Go to the top of the page
 
+Quote Post
vvs157
сообщение Oct 14 2009, 10:36
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



Цитата(Палыч @ Oct 14 2009, 11:19) *
Наверное, что-то у Вас не в порядке с организацией обработки прерываний, раз приходится так извращаться: разрешать прерывания в процедуре обработки прерывания. Наверное, лучше "перелопатить" программу...
В таком подходе нет ничего "некошерного". Если скажем один из ста циклов прерываний должен работать существенно дольше периода следования сигнала прерывания - то такое "длинное" прерывание будет нормально работать и без проблем прерываться на выполнение "короткого" цикла
Go to the top of the page
 
+Quote Post
Александр Куличо...
сообщение Oct 14 2009, 15:53
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 6-03-06
Из: Украина, г. Винница
Пользователь №: 15 017



Цитата
думаю давно пора менять процессор
Ваше мнение?

Дело ваше. Мегу 644 не рассматривали? Избавитесь от одного програмного уарта и получите в 2 раза больше флеш и озу на той же печатной плате. Правда, насчет цен на 644 не в курсе. Если сопоставимо по цене с арм, то мега не конкурент.

2 IgorKossak
Цитата
произойдёт переход к обработчику любого (независимо от приоритета) прерывания, имеющему место (захваченному) на данный момент

Откуда такая информация?
То есть, если возникли одновременно 3 прерывания: I1,I2,I3 (расставлены в порядке приоритета), и внутри обработчика I1 разрешить прерывания, то не факт, что I2 будет обработано до I3???
Или Вы имели ввиду то, что после sei может быть вызвано прерывание как с большим, так и с меньшим приоритетом относительно текущего?
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Oct 14 2009, 17:34
Сообщение #14


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Александр Куличок @ Oct 14 2009, 18:53) *
Или Вы имели ввиду то, что после sei может быть вызвано прерывание как с большим, так и с меньшим приоритетом относительно текущего?

Именно это.
Go to the top of the page
 
+Quote Post
vvs157
сообщение Oct 14 2009, 20:34
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



Цитата(Александр Куличок @ Oct 14 2009, 19:53) *
Или Вы имели ввиду то, что после sei может быть вызвано прерывание как с большим, так и с меньшим приоритетом относительно текущего?
В AVR нет системы приоритетов прерываний в обычном понимании. Есть только приоритет в отработке запросов, которые пришли в течении одного такта.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 20:52
Рейтинг@Mail.ru


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