Перейти к содержанию
    

Как определить пин на котором возникло External interrupt?

5 minutes ago, jcxz said:

Если немного подумать, то для опроса кнопок совешенно не нужно определять = "с какой ноги пришло прерывание". Если вам нужен именно опрос кнопок, а не что-то иное.

Согласен. Но изначально были условия: уже готовая схема, обязательный опрос кнопок по прерываниям.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 минут назад, mitya1698 сказал:

ну так это и есть 1 вариант проверки уровня на порту.

Вы тоже не читаете вопрос, на который отвечаете.

Читаем внимательно:

22 минуты назад, LAS9891 сказал:

Как в обработчике прерывания определить с какого пина возникло прерывание?

Сначала уровень активирующий IRQ возник на пине1, через пару тактов - на пине2. Как определите какой именно пин вызвал IRQ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если это часы для кто быстрее собрал кубик рубика, то не годится :)

Не определим того, кто первый, в остальных задачах вероятно это не важно - вызвали оба,  обработаем обоих.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, jcxz said:

Подумайте что будет если активный уровень (генерящий прерывание) появился на ноге1, а через 1мкс - такой же уровень появился на ноге2. Как определите с какой ноги пришло прерывание

Если Вам нужно обрабатывать нажатия кнопок, то какая разница какая из них вызвала прерывание? Все равно ведь надо обработать все нажатые кнопки. Так что если к моменту входа в прерывание активный уровень выставлен от нескольких кнопок - всех их и обрабатываете. Цель прерывания в данном случае - проинформировато, что какая-то из кнопок была нажата. Или две кнопки. Или больше. А дальше Вы уже проверяете какие кнопки нажаты и действуете в соответствии с этим.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 минуты назад, LAS9891 сказал:

Согласен. Но изначально были условия: уже готовая схема, обязательный опрос кнопок по прерываниям.

Так что мешает делать его по этой схеме?

Ещё раз: Для опроса кнопок совершенно не нужно знать "какой именно пин возбудил прерывание". Сигнал прерывания нужно использовать только как сигнал о том, что что-то изменилось на порту. Всё. А все дальнейшие операции с пинами кнопок выполнять периодическим чтением их состояния через GPIO. И делать это до тех пор, пока все кнопки висящие на EXTI0 не окажутся отжатыми.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если одна кнопка на PA0, вторая - на PB0, то только одна из них может быть настроена на EXTI. То есть исходная задача не решается вообще никак - только одна из кнопок на Px0 может вызывать прерывание. Одну из кнопок надо уносить на PxY, где X - любой, а Y != 0.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, AndyBig сказал:

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

Я вообще-то об этом и писал.

Только исходный вопрос ТС был несколько иной. Напоминаю:

29 минут назад, LAS9891 сказал:

Как в обработчике прерывания определить с какого пина возникло прерывание?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, jcxz said:

Так что мешает делать его по этой схеме?

Да ничего не мешает. Меня интересовало есть ли возможность проверить это по регистрам EXTIx, ну раз нет, значит определю по другому.

6 minutes ago, Сергей Борщ said:

только одна из кнопок на Px0 может вызывать прерывание

проверим

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 hours ago, LAS9891 said:

Всем спасибо, я выяснил что хотел.

Выше уже поминали дребезг кнопок. Вы знаете, как с ним бороться?

(чтобы сэкономить Вам немного времени: типичное время дребезга мелких тактовых кнопок 5..20 мс, больших не-тактовых - легко до 100 мс, - на это точно нужны EXTI?.  На "изначально были условия: ... обязательный опрос кнопок по прерываниям" можно ответить опросом кнопок по прерыванию таймера. Потратьте сэкономленное время на разбор вариантов антидребезга.)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 часов назад, LAS9891 сказал:

проверим

Интересно, как? Документация утверждает однозначно:

image.thumb.png.c04aaed8e9c2b1e5ecebee7382f0cfe6.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, xemul сказал:

обязательный опрос кнопок по прерываниям" можно ответить опросом кнопок по прерыванию таймера.

Строго говоря - одних прерываний таймера может быть недостаточно. И прерывания от EXTI всё равно нужны. Вы же не знаете условий эксплуатации. Может у ТС батарейное питание?

В этом случае оптимальное решение = начальное_EXTI + затем IRQ_от_таймера (пока все кнопы не окажутся отпущенными).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

(у мну коробочки с потреблением в статике ~0.1 мкА просыпаются по прерыванию от кнопок; другие коробочки, где есть часовой кварц, и можно позволить 2-3-.. мкА, просыпаются по прерыванию от RTC; были коробочки, которые пинала внешняя сторожевая собака. При этом основная масса поделий для входов с динамикой +- как от кнопок благополучно обходится опросом по софтовому таймеру с периодом 2^-7 с. А общего у всех коробочек - алгоритм антидребезга.)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 hours ago, Сергей Борщ said:

Документация утверждает однозначно:

У меня на самом деле GD32F103RB, и тут я не нашёл System configuration controller

 

Вообще пост получился исключительный. Мне было лень внимательно читать даташит и решил быстренько спросить на форуме. Я как всегда ожидал ответа в стиле "читай даташит", ну и готовился, что закидают помидорами, а тут на две страницы ответов/споров, даже после того, как я уже выяснил то, что хотел изначально. Магия блин. Вопрос не глобального масштаба - а популярности... В серьёзных темах ответа не дождешься, только "читайдаташитами" закидают.

Изменено пользователем LAS9891

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Цитата

У меня на самом деле GD32F103RB, и тут я не нашёл System configuration controller

смотрите 7.5.10.  EXTI sources selection register 0 (AFIO_EXTISS0) - апельсин, вид с боку.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

×
×
  • Создать...