LAS9891 0 March 1 Posted March 1 · Report post 5 minutes ago, jcxz said: Если немного подумать, то для опроса кнопок совешенно не нужно определять = "с какой ноги пришло прерывание". Если вам нужен именно опрос кнопок, а не что-то иное. Согласен. Но изначально были условия: уже готовая схема, обязательный опрос кнопок по прерываниям. Quote Share this post Link to post Share on other sites More sharing options...
jcxz 82 March 1 Posted March 1 · Report post 6 минут назад, mitya1698 сказал: ну так это и есть 1 вариант проверки уровня на порту. Вы тоже не читаете вопрос, на который отвечаете. Читаем внимательно: 22 минуты назад, LAS9891 сказал: Как в обработчике прерывания определить с какого пина возникло прерывание? Сначала уровень активирующий IRQ возник на пине1, через пару тактов - на пине2. Как определите какой именно пин вызвал IRQ? Quote Share this post Link to post Share on other sites More sharing options...
mitya1698 7 March 1 Posted March 1 · Report post если это часы для кто быстрее собрал кубик рубика, то не годится :) Не определим того, кто первый, в остальных задачах вероятно это не важно - вызвали оба, обработаем обоих. Quote Share this post Link to post Share on other sites More sharing options...
LAS9891 0 March 1 Posted March 1 · Report post Всем спасибо, я выяснил что хотел. Quote Share this post Link to post Share on other sites More sharing options...
AndyBig 1 March 1 Posted March 1 · Report post 3 minutes ago, jcxz said: Подумайте что будет если активный уровень (генерящий прерывание) появился на ноге1, а через 1мкс - такой же уровень появился на ноге2. Как определите с какой ноги пришло прерывание Если Вам нужно обрабатывать нажатия кнопок, то какая разница какая из них вызвала прерывание? Все равно ведь надо обработать все нажатые кнопки. Так что если к моменту входа в прерывание активный уровень выставлен от нескольких кнопок - всех их и обрабатываете. Цель прерывания в данном случае - проинформировато, что какая-то из кнопок была нажата. Или две кнопки. Или больше. А дальше Вы уже проверяете какие кнопки нажаты и действуете в соответствии с этим. Quote Share this post Link to post Share on other sites More sharing options...
jcxz 82 March 1 Posted March 1 · Report post 4 минуты назад, LAS9891 сказал: Согласен. Но изначально были условия: уже готовая схема, обязательный опрос кнопок по прерываниям. Так что мешает делать его по этой схеме? Ещё раз: Для опроса кнопок совершенно не нужно знать "какой именно пин возбудил прерывание". Сигнал прерывания нужно использовать только как сигнал о том, что что-то изменилось на порту. Всё. А все дальнейшие операции с пинами кнопок выполнять периодическим чтением их состояния через GPIO. И делать это до тех пор, пока все кнопки висящие на EXTI0 не окажутся отжатыми. Quote Share this post Link to post Share on other sites More sharing options...
Сергей Борщ 60 March 1 Posted March 1 · Report post Если одна кнопка на PA0, вторая - на PB0, то только одна из них может быть настроена на EXTI. То есть исходная задача не решается вообще никак - только одна из кнопок на Px0 может вызывать прерывание. Одну из кнопок надо уносить на PxY, где X - любой, а Y != 0. 1 Quote Share this post Link to post Share on other sites More sharing options...
jcxz 82 March 1 Posted March 1 · Report post 3 минуты назад, AndyBig сказал: Цель прерывания в данном случае - проинформировато, что какая-то из кнопок была нажата. Я вообще-то об этом и писал. Только исходный вопрос ТС был несколько иной. Напоминаю: 29 минут назад, LAS9891 сказал: Как в обработчике прерывания определить с какого пина возникло прерывание? Quote Share this post Link to post Share on other sites More sharing options...
LAS9891 0 March 1 Posted March 1 · Report post 1 minute ago, jcxz said: Так что мешает делать его по этой схеме? Да ничего не мешает. Меня интересовало есть ли возможность проверить это по регистрам EXTIx, ну раз нет, значит определю по другому. 6 minutes ago, Сергей Борщ said: только одна из кнопок на Px0 может вызывать прерывание проверим Quote Share this post Link to post Share on other sites More sharing options...
xemul 0 March 2 Posted March 2 · Report post 19 hours ago, LAS9891 said: Всем спасибо, я выяснил что хотел. Выше уже поминали дребезг кнопок. Вы знаете, как с ним бороться? (чтобы сэкономить Вам немного времени: типичное время дребезга мелких тактовых кнопок 5..20 мс, больших не-тактовых - легко до 100 мс, - на это точно нужны EXTI?. На "изначально были условия: ... обязательный опрос кнопок по прерываниям" можно ответить опросом кнопок по прерыванию таймера. Потратьте сэкономленное время на разбор вариантов антидребезга.) Quote Share this post Link to post Share on other sites More sharing options...
Сергей Борщ 60 March 2 Posted March 2 · Report post 19 часов назад, LAS9891 сказал: проверим Интересно, как? Документация утверждает однозначно: 1 Quote Share this post Link to post Share on other sites More sharing options...
jcxz 82 March 2 Posted March 2 · Report post 1 час назад, xemul сказал: обязательный опрос кнопок по прерываниям" можно ответить опросом кнопок по прерыванию таймера. Строго говоря - одних прерываний таймера может быть недостаточно. И прерывания от EXTI всё равно нужны. Вы же не знаете условий эксплуатации. Может у ТС батарейное питание? В этом случае оптимальное решение = начальное_EXTI + затем IRQ_от_таймера (пока все кнопы не окажутся отпущенными). Quote Share this post Link to post Share on other sites More sharing options...
xemul 0 March 2 Posted March 2 · Report post Всё может быть (кроме смысла в обсуждении очередного сферического коня). Я говорил про необязательность самостоятельной полировки древка грабель. (у мну коробочки с потреблением в статике ~0.1 мкА просыпаются по прерыванию от кнопок; другие коробочки, где есть часовой кварц, и можно позволить 2-3-.. мкА, просыпаются по прерыванию от RTC; были коробочки, которые пинала внешняя сторожевая собака. При этом основная масса поделий для входов с динамикой +- как от кнопок благополучно обходится опросом по софтовому таймеру с периодом 2^-7 с. А общего у всех коробочек - алгоритм антидребезга.) Quote Share this post Link to post Share on other sites More sharing options...
LAS9891 0 March 3 Posted March 3 (edited) · Report post 20 hours ago, Сергей Борщ said: Документация утверждает однозначно: У меня на самом деле GD32F103RB, и тут я не нашёл System configuration controller Вообще пост получился исключительный. Мне было лень внимательно читать даташит и решил быстренько спросить на форуме. Я как всегда ожидал ответа в стиле "читай даташит", ну и готовился, что закидают помидорами, а тут на две страницы ответов/споров, даже после того, как я уже выяснил то, что хотел изначально. Магия блин. Вопрос не глобального масштаба - а популярности... В серьёзных темах ответа не дождешься, только "читайдаташитами" закидают. Edited March 3 by LAS9891 Quote Share this post Link to post Share on other sites More sharing options...
Edit2007 3 March 3 Posted March 3 · Report post Цитата У меня на самом деле GD32F103RB, и тут я не нашёл System configuration controller смотрите 7.5.10. EXTI sources selection register 0 (AFIO_EXTISS0) - апельсин, вид с боку. 1 Quote Share this post Link to post Share on other sites More sharing options...