Перейти к содержанию

Вложенные Прерывания В Avr


Lyt

Рекомендуемые сообщения

Прошу разъяснить вопрос:

если в обработчике прерывания разрешить другое прерывание и оно произойдет - вызывается обработчик второго прерывания, а затем по его завершению завершается обработчик первого, либо ожидается завершение обработчика первого прерывания и только потом вызывается обработчик второго?

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Будет выполняться то прерывание, которое имеет более высокий статус. Например внешние будут выполняться и забивать внутренние. Самое приоритетное INT0. Если прерывания таймеров, то будет выполняться то, которое первее наступит, не мешая остальным. Так, например, прерывания от первого таймера, не будут мешать прерываниям от второго, если они не происходят одновременно.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Будет выполняться то прерывание, которое имеет более высокий статус. Например внешние будут выполняться и забивать внутренние. Самое приоритетное INT0

Это правило для одновременного прихода 2х прерываний справедливо и для вложенных прерываний?

Когда в обработчике первого прерывания приходит запрос на прерывание с большим приоритетом (при глобальном разрешении прерываний), произойдет переход на обработчик нового прерывания?

Собственно мой конкретный случай: тикать таймером и ждать от него прерывания по переполнению в обработчике прерывания от компаратора можно? Проблема вот в чем - при отладке не происходит перехода на обработчик прерывания от Т0 (без разницы: и по переполнению и по равенству с OC0A/B) при том, что соответствующие флаги устанавливаются.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Глобальное разрешение прерываний должно быть включено для любых прерываний. У вас получается происходит прерывание от компаратора и в нем разрешается прерывание для Т0? Вполне должно работать...

Ссылка на комментарий
Поделиться на другие сайты

При обработке любого произошедшего прерывания автоматически происходит запрет всех прерываний до комманды возврата в основную программу. Обработка вложенного прерывания не произойдет, пока не отработает основное. Получается что в основном прерывании нужно первым делом cбросить флаг основного прерывания и разрешить прерывания глобально?

Изменено пользователем koms45

Так ку или не ку ?!

Ссылка на комментарий
Поделиться на другие сайты

Прошу разъяснить вопрос:

если в обработчике прерывания разрешить другое прерывание и оно произойдет - вызывается обработчик второго прерывания, а затем по его завершению завершается обработчик первого, либо ожидается завершение обработчика первого прерывания и только потом вызывается обработчик второго?

Если МК начал выполнять программу прерывания, то вход в другие прерывания "блокируется" (автоматически) сбросом флага I регистра статуса, и другие прерывания если произошла установка их флагов, будут ожидать пока флаг I не будет установлен. Флаг I устанавливается при выходе из прерывания командой reti, если необходимо чтобы при выполнении одного прерывания его работа прервалась и отработалось другое прерывание - нужно после входа в первое прерывание установить флаг I командой sei, тогда при возникновении второго прерывания, во время выполнения первого, произойдет переход на выполнение второго, и после его выполнения возврат для довыполнения первого.

Изменено пользователем donec
Ссылка на комментарий
Поделиться на другие сайты

если необходимо чтобы при выполнении одного прерывания его работа прервалась и отработалось другое прерывание - нужно после входа в первое прерывание установить флаг I командой sei, тогда при возникновении второго прерывания, во время выполнения первого, произойдет переход на выполнение второго, и после его выполнения возврат для довыполнения первого.

все именно так

но переход на обработчик не происходит

atmel studio 6

Ссылка на комментарий
Поделиться на другие сайты

все именно так

но переход на обработчик не происходит

atmel studio 6

Это сделано?

ОТЛАДКА-ПАРАМЕТРЫ И НАСТРОЙКИ-DEBUGGER-ATMELL DEBUGER-MASK INTERRUPTS WHILE STEPPING-FALSE.

Изменено пользователем donec
Ссылка на комментарий
Поделиться на другие сайты

Ничего не понял насчет контекста, можно понятнее?

Под контекстом понимается регистр состояния и те регистры, которые используются в прерывании.

При входе в обработчик все это требуется сохранить, а перед выходом восстановить.

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

Контекст сохраняют либо в стеке либо в shadow регистрах. Вот и вопрос: как сохраняется контекст при использовании вложенных прерываний? Не будет ли вложенное портить контекст первому, а паче основной программе....?

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

как сохраняется контекст при использовании вложенных прерываний? Не будет ли вложенное портить контекст первому, а паче основной программе....

Указатель стека один, если над ним не издеваться, то все будет нормально.

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

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...