Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AT91SAM7X. Прерывания по фронту.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Aurochs
Работал до этого только с прерываниями по уровню (от внутренней периферии). И, как говорится, горя не знал. Теперь вот обстоятельства вынуждают использовать прерывания по фронту (тоже от внутренней периферии). И обнаружил следующее - AIC почему-то не сбрасывает автоматически прерывания по фронту. Обработку произвожу в точном соответствии с даташитом. После выставления периферией AICу запроса на прерывание эти прерывания потом валят беспрерывно и все затыкается.
Спасает только одно - сбрасывние прерывания в ручном режиме прописыванием рег-ра AIC_ICCR. В этом случае нормальная работа восстанавливается. Уже не один раз проштудировал даташит (и errata в том числе: уже жизнью научен) - везде, где касаются этой темы прописано, что-то типа
Цитата
The AIC features an automatic clear of the current interrupt when the AIC_IVR (Interrupt Vector Register) is read.
И еще раз подчеркиваю: при работе с прерываниями по уровню подобных проблем вообще не возникало.
Поделитесь, пожалуйста опытом по данному вопросу, буду очень признателен.
А то теперь не дает покоя почти гамлетовский вопрос: кто же здесь дурак? smile.gif
aaarrr
Прерывания по фронту работают совершенно нормально, но их использование требует предельной внимательности со стороны программиста.
А что вынудило использовать их, тем более на внутренних источниках?
Aurochs
Цитата(aaarrr @ Mar 31 2009, 13:15) *
Прерывания по фронту работают совершенно нормально

Т.е. Вы имеете ввиду, что сбрасываются они автоматически?
Цитата(aaarrr @ Mar 31 2009, 13:15) *
А что вынудило использовать их, тем более на внутренних источниках?

Имеется цель на базе FIQ-прерывания создать некое виртуальное устройство и нужно из FIQ-обработчика инициировать в AIC запрос на прерывание для обычного драйвера. А это можно сделать только для прерываний по фронту.
aaarrr
Цитата(Aurochs @ Mar 31 2009, 14:45) *
Т.е. Вы имеете ввиду, что сбрасываются они автоматически?

Да, но есть подозрение...

Цитата(Aurochs @ Mar 31 2009, 14:45) *
Имеется цель на базе FIQ-прерывания создать некое виртуальное устройство и нужно из FIQ-обработчика инициировать в AIC запрос на прерывание для обычного драйвера. А это можно сделать только для прерываний по фронту.

...что в случае ручной установки его и сбрасывать нужно вручную.
Aurochs
Цитата(aaarrr @ Mar 31 2009, 15:07) *
Да, но есть подозрение...
...что в случае ручной установки его и сбрасывать нужно вручную.

Но я даже не имел в виду этот случай. Речь идет о самом банальном случае, когда прерывание просто приходит от внутренней периферии, например контроллера USART.
aaarrr
Не берусь утверждать со стопроцентной уверенностью, т.к. прерывания по фронту от внутренних источников запускал только в порядке эксперимента, но сбросов через AIC_ICCR оно не требовало.
Aurochs
Цитата(aaarrr @ Mar 31 2009, 16:56) *
Не берусь утверждать со стопроцентной уверенностью, т.к. прерывания по фронту от внутренних источников запускал только в порядке эксперимента, но сбросов через AIC_ICCR оно не требовало.

Спасибо за консультацию, aaarrr.
Но у меня без сброса никак не получается. К сожалению, нет времени проводить какие-то специальные исследования по этому поводу. Тем более, что с ручными сбросами все работает вроде как нормально.
В итоге вопрос остается открытым и если у кого-то еще будут соображения по этому поводу - буду очень рад.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.