roboforum.ru

Технический форум по робототехнике.

Ложное срабатывание INT0 на AVR

Ложное срабатывание INT0 на AVR

HarryStar » 10 мар 2015, 11:16

Ситуация
Есть обработчик INT0 по любому изменению фронта.
- внутри я определяю что произошло нужное мне событие (оно на восходящем фронте + доп. условия).
- дальше идет обмен данными по тому-же пину что INT0 внутри обработчика
- дальше жду высокого уровня на пине
- выхожу из обработчика

и тут ПРОБЛЕМА

тут же происходит повторное прерывание INT0 с высоким уровнем на пине.

А его не должно быть, я выхожу из обработчика с высоким уровнем и никакого восходящего фронта быть не должно.

Внутри обработчика прерывания запрещены, в это время возникает куча восходящих и нисходящих фронтов, и где-то ставится флаг, что прерывание должно произойти, но не происходит из за запрета. А как только разрешается, тут же оно и приходит. ВОПРОС: Какой флаг нужно сбросить в конце моего обработчика, чтоб после его окончания не происходило прерывание на то, что уже закончилось?

Надеюсь понятно объяснил. МК ATmega32 если это важно, но я так понимаю для любых AVR оно одинаково.

Re: Ложное срабатывание INT0 на AVR

Angel71 » 10 мар 2015, 12:02

gifr

Re: Ложное срабатывание INT0 на AVR

Radist » 10 мар 2015, 22:38

Добавлю лишь, что флаг сбрасывается записью единички (как это ни парадоксально).

Re: Ложное срабатывание INT0 на AVR

Angel71 » 11 мар 2015, 00:03

в чём парадокс? как посчитали удобным, так и сделали. :) так часто делают, поищите "write 1 to clear bit".


Rambler\'s Top100 Mail.ru counter