реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> pin change interrupt как работает?
Kirill_Good
сообщение Jan 26 2013, 10:04
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 10-12-10
Из: Москва
Пользователь №: 61 528



Добрый день!

Есть проблема с ложным срабатыванием обработчика прерывания в системе. Девайс подключен ногой DATA_OUT к PIO ноге процессора. В драйвере ядра linux есть строчки gpio_to_irq(). Девайс не припаян к плате , а подключается через jack разъем. В процессе работы системы срабатывает в определенные моменты времени обработчик прерывания, хотя не девайс не был подключен. Схемотехника вроде правильная, вход процессора подтянут в питанию. Почему может возникнуть прерывание? PIO банк имеет восемь пинов. К банку подключен девайс и SPI флеш. После чтения литературы нашел понятие как pin change interrupt. Я правильно понимаю что, если irq привязвается к gpio, то прерывание привязвается не к конкретному пину, а ко всему банку и проверка какой пин сработал лежит на программисте? Если да, то не слишком ли высокий уровень абстакции у драйвера, чтобы проверять пины таким образом? Может ли это ложное срабатывание тянуться отсюда? Платформа не ARM , но подходы я думаю у всех похожи.

Не совсем понятно как вообще работает GPIO пин как внешнее прерывание. Это 8 разрядный регистр + логика на входе у банка и от него тянется одна линия ко внутреннему контроллеру прерывания SoC'a? И по изменению значений на нем генерируется прерывание?

Спасибо!

Сообщение отредактировал Kirill_Good - Jan 26 2013, 10:09
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 26 2013, 15:22
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Хорошо бы конечно платформу определить, у всех по разному бывает.

Есть такой вариант

4 ноги из порта имеют индивидуальные прерывания и еще есть 3 прерывания на группу по 4 ноги. То есть прерывания на каждой ноге из первых 4 вызовут каждый свой обработчик, а прерывание любой ноги из группы в остальных вызовет единое прерывание для группы.

Иногда прерывание вызывается для всего порта, и так далее...

на физическом уровне это сделано так: ножки от 4 портов идут на логическое или, а оно уже на детектор прерывания.

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

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

Схемотехнически от этого трудно избавится, если вообще возможно.
Go to the top of the page
 
+Quote Post
Kirill_Good
сообщение Jan 26 2013, 16:10
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 10-12-10
Из: Москва
Пользователь №: 61 528



На помеху как то не думается, потому что возникает это "ложное" прерывание почти при одних и тех же действиях в определенный момент времени. А кто должен определять какой именно пин из группы сработал? Драйвер или кто то на более низком уровне?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 26 2013, 16:20
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



От философии зависит.

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

Так что скорее всего должна быть какая то самая низкая функция которая разбирает перерывания и уже адресно дергает драйвер. Надо читать спецификацию к драйверу, как его использовать предполагали авторы. Может он вообще написан для систем с раздельными прерываниями, или использует глобальный драйвер порта ввода вывода решающий все проблемы...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 19:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01368 секунд с 7
ELECTRONIX ©2004-2016