LAS9891 0 1 марта, 2023 Опубликовано 1 марта, 2023 · Жалоба Есть stm32. На пин PA0 и на пин PB0 установлены кнопки. На оба пина настроено и включено прерывание NVIC_EnableIRQ(EXTI0_IRQn). Согласно документации PA0 и PB0 приходятся на линию EXTI0. При нажатии одной из кнопок возникает прерывание EXTI0_IRQHandler. Как в обработчике прерывания определить с какого пина возникло прерывание? Вариант 1: в обработчике прерывания проверить уровень на пинах PA0 и PB. Есть ещё варианты? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndyBig 8 1 марта, 2023 Опубликовано 1 марта, 2023 · Жалоба А чем вариант 1 плох? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
engel65536 12 1 марта, 2023 Опубликовано 1 марта, 2023 · Жалоба Если мне не изменяет память, то никак. 1 minute ago, AndyBig said: А чем вариант 1 плох? Тем, что к моменту, когда мы дойдём до опроса, там уже может не быть того уровня, который вызвал срабатывание. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mitya1698 18 1 марта, 2023 Опубликовано 1 марта, 2023 · Жалоба кажется нельзя такую конфигурацию сделать. То-есть 0 бит может быть на любом порту но только на одном. Как и все остальные прерывания. Итого 16 шт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 1 марта, 2023 Опубликовано 1 марта, 2023 · Жалоба 7 минут назад, LAS9891 сказал: Как в обработчике прерывания определить с какого пина возникло прерывание? В общем случае - никак. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndyBig 8 1 марта, 2023 Опубликовано 1 марта, 2023 · Жалоба 3 minutes ago, engel65536 said: Тем, что к моменту, когда мы дойдём до опроса, там уже может не быть того уровня, который вызвал срабатывание. Но это же кнопки. Они не могут быть нажаты в течении всего лишь пары микросекунд 🙂 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 1 марта, 2023 Опубликовано 1 марта, 2023 · Жалоба 8 минут назад, LAS9891 сказал: Вариант 1: в обработчике прерывания проверить уровень на пинах PA0 и PB. По нему вы никак не сможете ответить на поставленный вопрос. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LAS9891 0 1 марта, 2023 Опубликовано 1 марта, 2023 · Жалоба 1 minute ago, jcxz said: По нему вы никак не сможете ответить на поставленный вопрос. Как же ответить на поставленный вопрос? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 1 марта, 2023 Опубликовано 1 марта, 2023 · Жалоба 3 минуты назад, AndyBig сказал: Но это же кнопки. Они не могут быть нажаты в течении всего лишь пары микросекунд 🙂 Причём тут пара мкс? Вы уверены, что ISR гарантированно получит управление и успеет опросить входы в течение пары мкс? 1) Они могут быть нажаты одновременно. 2) Помеха может прийти одновременно. 3 минуты назад, LAS9891 сказал: Как же ответить на поставленный вопрос? Чтобы определять с какой ноги пришло прерывание - вешайте на разные EXTIx. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LAS9891 0 1 марта, 2023 Опубликовано 1 марта, 2023 (изменено) · Жалоба 6 minutes ago, jcxz said: В общем случае - никак. Я думал, что я что-то не дочитал про External interrupt. Надеялся, что есть какой-то регистр (который относится к External interrupt), в котором это отражается. Изменено 1 марта, 2023 пользователем LAS9891 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mitya1698 18 1 марта, 2023 Опубликовано 1 марта, 2023 · Жалоба Вам же дали 16 внешних прерываний, вот и раздайте на разные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 1 марта, 2023 Опубликовано 1 марта, 2023 · Жалоба Если немного подумать, то для опроса кнопок совешенно не нужно определять = "с какой ноги пришло прерывание". Если вам нужен именно опрос кнопок, а не что-то иное. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AndyBig 8 1 марта, 2023 Опубликовано 1 марта, 2023 · Жалоба 4 minutes ago, jcxz said: 1) Они могут быть нажаты одновременно. 2) Помеха может прийти одновременно. Значит и увидите обе нажатые кнопки. Не пойму в чем проблема 🙂 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mitya1698 18 1 марта, 2023 Опубликовано 1 марта, 2023 · Жалоба В 01.03.2023 в 16:33, jcxz сказал: совешенно не нужно определять = "с какой ноги пришло прерывание". ну так это и есть 1 вариант проверки уровня на порту. На мой взгляд если опрашивать кнопки, то по таймеру, всеравно антидребезг делать нужно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 1 марта, 2023 Опубликовано 1 марта, 2023 · Жалоба 5 минут назад, AndyBig сказал: Значит и увидите обе нажатые кнопки. Не пойму в чем проблема 🙂 Проблема в том, что вы не читаете исходный вопрос, на который пытаетесь отвечать. Подумайте что будет если активный уровень (генерящий прерывание) появился на ноге1, а через 1мкс - такой же уровень появился на ноге2. Как определите с какой ноги пришло прерывание, при условии того, что нет гарантии что вход в ISR займёт менее 1мкс? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться