Подскажите пожалуйста, в даташитах не нашел точного ответа
Вот если например прерывание INT0 разрешено в регистре масок, и происходит определенное событие флаг прерывания устанавливается с переходом к обработчику. Тут все понятно.
Если например я временно запрещаю прерывание INT0 в регистре масок, будет ли устанавливаться флаг прерывания в регистре флагов в данном случае при возникновении события?
И если я опять разрешу прерывание INT0 то не улечу ли я в прерывание? (что не должно быть).
Нужно ли мне проверять флаг перед включением прерывания INT0 и если он установлен сбрасыать? Не лишнее ли это?
Прерывания и флаги
-
Compressor
- Открыл глаза
- Сообщения: 41
- Зарегистрирован: Пт май 29, 2009 09:38:45
Re: Прерывания и флаги
касательно INT0/1...
Если прерывание по фронту/спаду флаг будет установлен по факту события независимо было ли разрешено или запрещено данное прерывание.
Следовательно необходим предварительный анализ наличия флага и его сброс при необходимости перед разрешением прерывания.
Прерывание по уровню флаг НЕ УСТАНАВЛИВАЕТ - выполняется вызов по факту события ( если уровень останется на момент выхода из прерывания, то оное будет перезапущено заново после исполнения одной команды, следующей за reti ).

Если прерывание по фронту/спаду флаг будет установлен по факту события независимо было ли разрешено или запрещено данное прерывание.
Следовательно необходим предварительный анализ наличия флага и его сброс при необходимости перед разрешением прерывания.
Прерывание по уровню флаг НЕ УСТАНАВЛИВАЕТ - выполняется вызов по факту события ( если уровень останется на момент выхода из прерывания, то оное будет перезапущено заново после исполнения одной команды, следующей за reti ).
-
Compressor
- Открыл глаза
- Сообщения: 41
- Зарегистрирован: Пт май 29, 2009 09:38:45
Re: Прерывания и флаги
Благодарю, вот этот момент был непонятен. Буду флаг проверять. Настроен INT0 как раз по спаду, не уточнил в вопросе
- lizard66
- Первый раз сказал Мяу!
- Сообщения: 35
- Зарегистрирован: Чт май 14, 2015 16:58:00
- Откуда: Kharkiv
Re: Прерывания и флаги
[uquote="Compressor",url="/forum/viewtopic.php?p=3888341#p3888341"]Если например я временно запрещаю прерывание INT0 в регистре масок, будет ли устанавливаться флаг прерывания в регистре флагов в данном случае при возникновении события?
И если я опять разрешу прерывание INT0 то не улечу ли я в прерывание? (что не должно быть).
Нужно ли мне проверять флаг перед включением прерывания INT0 и если он установлен сбрасыать? Не лишнее ли это?[/uquote]
Если INTx в EIMSK не установлен, то все события по по этому внешнему прерыванию игнорируются, флаг INTFx в EIFR не устанавливается и "отложенного" прерывания не возникает.
И если я опять разрешу прерывание INT0 то не улечу ли я в прерывание? (что не должно быть).
Нужно ли мне проверять флаг перед включением прерывания INT0 и если он установлен сбрасыать? Не лишнее ли это?[/uquote]
Если INTx в EIMSK не установлен, то все события по по этому внешнему прерыванию игнорируются, флаг INTFx в EIFR не устанавливается и "отложенного" прерывания не возникает.
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Прерывания и флаги
На каждый мк нужно в даташите смотреть, какой регистр отвечает за разрешение внешнего прерывания. К примеру у ATMEGA8535 это GICR. По сбросу флага. Если вы не включали ранее, если вы правильно провели инициализации, если ранее включали, но правильно выключили, то можно не проверять. Если есть сомнения, проверяйте, это много ресурсов не отнимает. Теперь, чтобы не было ложных срабатывания, нужно правильно провести инициализации. Иначе будут сюрпризы. Поясняю. Берём ATMEGA8535, устанавливаем в регистре GICR INT0. Но, так как по умолчанию стоит настройка по низкому уровню, и если на входе низкий уровень, то флаг будет выставлен и произойдёт переход на вектор прерывания.
Поэтому порядок такой. Сначала режим внешнего прерывания. И только потом разрешать прерывания.
Кстати, у внешнего прерывания нет такого режима, чтобы флаг выставлялся, без включения соответствующего прерывания. Но это и логично. Порт без прерывания и так можно проверить.
Поэтому порядок такой. Сначала режим внешнего прерывания. И только потом разрешать прерывания.
Кстати, у внешнего прерывания нет такого режима, чтобы флаг выставлялся, без включения соответствующего прерывания. Но это и логично. Порт без прерывания и так можно проверить.
Re: Прерывания и флаги
[uquote="Compressor",url="/forum/viewtopic.php?p=3888365#p3888365"]Буду флаг проверять.[/uquote] Зачем проверять? Просто сбрасывайте перед разрешением.
-
Compressor
- Открыл глаза
- Сообщения: 41
- Зарегистрирован: Пт май 29, 2009 09:38:45
Re: Прерывания и флаги
[uquote="OKF",url="/forum/viewtopic.php?p=3888810#p3888810"][uquote="Compressor",url="/forum/viewtopic.php?p=3888365#p3888365"]Буду флаг проверять.[/uquote] Зачем проверять? Просто сбрасывайте перед разрешением.[/uquote] сбрасывается то он записью единицы, а если не проверить а там ноль был, неувязочка выйдет, сам флаг установлю
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Прерывания и флаги
Нет. Эти флаги сбрасываются единицей. Установки в 1 не будет. Читайте даташиты. RTFM...