Jump to content
    

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

Есть stm32. На пин PA0 и на пин PB0 установлены кнопки. На оба пина настроено и включено прерывание NVIC_EnableIRQ(EXTI0_IRQn). Согласно документации PA0 и PB0 приходятся на линию EXTI0. При нажатии одной из кнопок возникает прерывание EXTI0_IRQHandler. Как в обработчике прерывания определить с какого пина возникло прерывание? Вариант 1: в обработчике прерывания проверить уровень на пинах PA0 и PB.

Есть ещё варианты?

Share this post


Link to post
Share on other sites

Если мне не изменяет память, то никак.

1 minute ago, AndyBig said:

А чем вариант 1 плох?

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

Share this post


Link to post
Share on other sites

кажется нельзя такую конфигурацию сделать. 

То-есть 0 бит может быть на любом порту но только на одном. Как и все остальные прерывания. Итого 16 шт.

 

Share this post


Link to post
Share on other sites

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

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

В общем случае - никак.

Share this post


Link to post
Share on other sites

3 minutes ago, engel65536 said:

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

Но это же кнопки. Они не могут быть нажаты в течении всего лишь пары микросекунд 🙂

 

Share this post


Link to post
Share on other sites

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

Вариант 1: в обработчике прерывания проверить уровень на пинах PA0 и PB.

По нему вы никак не сможете ответить на поставленный вопрос.

Share this post


Link to post
Share on other sites

1 minute ago, jcxz said:

По нему вы никак не сможете ответить на поставленный вопрос.

Как же ответить на поставленный вопрос?

Share this post


Link to post
Share on other sites

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

Но это же кнопки. Они не могут быть нажаты в течении всего лишь пары микросекунд 🙂

Причём тут пара мкс? Вы уверены, что ISR гарантированно получит управление и успеет опросить входы в течение пары мкс?

1) Они могут быть нажаты одновременно.

2) Помеха может прийти одновременно.

 

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

Как же ответить на поставленный вопрос?

Чтобы определять с какой ноги пришло прерывание - вешайте на разные EXTIx.

Share this post


Link to post
Share on other sites

6 minutes ago, jcxz said:

В общем случае - никак.

Я думал, что я что-то не дочитал про External interrupt. Надеялся, что есть какой-то регистр (который относится к External interrupt), в котором это отражается.

Edited by LAS9891

Share this post


Link to post
Share on other sites

Вам же дали 16 внешних прерываний, вот и раздайте на разные.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

4 minutes ago, jcxz said:

1) Они могут быть нажаты одновременно.

2) Помеха может прийти одновременно.

Значит и увидите обе нажатые кнопки. Не пойму в чем проблема 🙂

Share this post


Link to post
Share on other sites

В 01.03.2023 в 16:33, jcxz сказал:

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

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

На мой взгляд если опрашивать кнопки, то по таймеру, всеравно антидребезг делать нужно.

Share this post


Link to post
Share on other sites

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

Значит и увидите обе нажатые кнопки. Не пойму в чем проблема 🙂

Проблема в том, что вы не читаете исходный вопрос, на который пытаетесь отвечать.

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...