Страница 1 из 1

Прерывания и флаги

Добавлено: Сб сен 05, 2020 09:48:41
Compressor
Подскажите пожалуйста, в даташитах не нашел точного ответа

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

Если например я временно запрещаю прерывание INT0 в регистре масок, будет ли устанавливаться флаг прерывания в регистре флагов в данном случае при возникновении события?

И если я опять разрешу прерывание INT0 то не улечу ли я в прерывание? (что не должно быть).
Нужно ли мне проверять флаг перед включением прерывания INT0 и если он установлен сбрасыать? Не лишнее ли это?

Re: Прерывания и флаги

Добавлено: Сб сен 05, 2020 10:29:39
BOB51
касательно INT0/1...
Если прерывание по фронту/спаду флаг будет установлен по факту события независимо было ли разрешено или запрещено данное прерывание.
Следовательно необходим предварительный анализ наличия флага и его сброс при необходимости перед разрешением прерывания.
Прерывание по уровню флаг НЕ УСТАНАВЛИВАЕТ - выполняется вызов по факту события ( если уровень останется на момент выхода из прерывания, то оное будет перезапущено заново после исполнения одной команды, следующей за reti ).
:roll:

Re: Прерывания и флаги

Добавлено: Сб сен 05, 2020 10:55:43
Compressor
Благодарю, вот этот момент был непонятен. Буду флаг проверять. Настроен INT0 как раз по спаду, не уточнил в вопросе

Re: Прерывания и флаги

Добавлено: Сб сен 05, 2020 13:59:26
lizard66
[uquote="Compressor",url="/forum/viewtopic.php?p=3888341#p3888341"]Если например я временно запрещаю прерывание INT0 в регистре масок, будет ли устанавливаться флаг прерывания в регистре флагов в данном случае при возникновении события?

И если я опять разрешу прерывание INT0 то не улечу ли я в прерывание? (что не должно быть).
Нужно ли мне проверять флаг перед включением прерывания INT0 и если он установлен сбрасыать? Не лишнее ли это?[/uquote]
Если INTx в EIMSK не установлен, то все события по по этому внешнему прерыванию игнорируются, флаг INTFx в EIFR не устанавливается и "отложенного" прерывания не возникает.

Re: Прерывания и флаги

Добавлено: Сб сен 05, 2020 18:45:29
Demiurg
На каждый мк нужно в даташите смотреть, какой регистр отвечает за разрешение внешнего прерывания. К примеру у ATMEGA8535 это GICR. По сбросу флага. Если вы не включали ранее, если вы правильно провели инициализации, если ранее включали, но правильно выключили, то можно не проверять. Если есть сомнения, проверяйте, это много ресурсов не отнимает. Теперь, чтобы не было ложных срабатывания, нужно правильно провести инициализации. Иначе будут сюрпризы. Поясняю. Берём ATMEGA8535, устанавливаем в регистре GICR INT0. Но, так как по умолчанию стоит настройка по низкому уровню, и если на входе низкий уровень, то флаг будет выставлен и произойдёт переход на вектор прерывания.
Поэтому порядок такой. Сначала режим внешнего прерывания. И только потом разрешать прерывания.
Кстати, у внешнего прерывания нет такого режима, чтобы флаг выставлялся, без включения соответствующего прерывания. Но это и логично. Порт без прерывания и так можно проверить.

Re: Прерывания и флаги

Добавлено: Вс сен 06, 2020 14:01:59
OKF
[uquote="Compressor",url="/forum/viewtopic.php?p=3888365#p3888365"]Буду флаг проверять.[/uquote] Зачем проверять? Просто сбрасывайте перед разрешением.

Re: Прерывания и флаги

Добавлено: Вс сен 06, 2020 15:17:57
Compressor
[uquote="OKF",url="/forum/viewtopic.php?p=3888810#p3888810"][uquote="Compressor",url="/forum/viewtopic.php?p=3888365#p3888365"]Буду флаг проверять.[/uquote] Зачем проверять? Просто сбрасывайте перед разрешением.[/uquote] сбрасывается то он записью единицы, а если не проверить а там ноль был, неувязочка выйдет, сам флаг установлю

Re: Прерывания и флаги

Добавлено: Вс сен 06, 2020 15:23:58
Demiurg
Нет. Эти флаги сбрасываются единицей. Установки в 1 не будет. Читайте даташиты. RTFM...