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

STM32 как определить по фронту или срезу произошло внешнее прерывание

Добрый день. МК stm32f405 Мне необходимо использовать внешнее прерывание по фронту и срезу импульса:

EXTI->RTSR|=EXTI_RTSR_TR0;                     //Прерывание по  фронту
EXTI->FTSR|=EXTI_FTSR_TR0;                     //Прерывание по  срезу

Соответственно по фронту и срезу необходимо выполнять различные действия.
Не совсем понятно как корректно проверить в обработчике прерывания по какой причине оно произошло?

void EXTI0_IRQHandler (void)

{
  EXTI->PR=EXTI_PR_PR0;          //Сбрасываем бит события прерывания EXTI0

  if(фронт){};

  if(срез) {};

}

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


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

25 minutes ago, x893 said:

Считать состояние сигнала на ноге и определиться

Читать состояние может быть слишком поздно. 
Тут либо ногу организовать на функции  capture таймера, либо запускать DMA c порта в память. 

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


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

11 часов назад, AlexandrY сказал:

Читать состояние может быть слишком поздно.

"Поздно" для чего?

Для анализа в ISR программным кодом, чтение состояния через GPIO (как описано в первом ответе) - вполне достаточно. Чтение и сравнение с предыдущим запомненным событием.

Если конечно в регистрах состояния нет соотв. флагов....

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


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

10 minutes ago, jcxz said:

"Поздно" для чего?

Для анализа в ISR программным кодом, чтение состояния через GPIO (как описано в первом ответе) - вполне достаточно. Чтение и сравнение с предыдущим запомненным событием.

Если конечно в регистрах состояния нет соотв. флагов....

А если это прерывание имеет низший приоритет и, например, до него еще 10 прерываний обработалось. И к этому времени импульс уже завершился.

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


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

1 минуту назад, dimka76 сказал:

И к этому времени импульс уже завершился.

И что? Прерывание же произошло? Значит что-то менялось. Если текущее считанное совпадает с последним запомненным - значит был и фронт и спад - значит выполняем обе ветки: и для того и для другого.

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


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

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

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

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

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

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

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

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

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

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