2015-12-13 10 views
1

Как определить порт, из которого было выполнено прерывание в обработчике? Например, в EXTI0_IRQHandler, как определить, было ли прерывание создано через PA0, PB0 или PC0? Можно ли даже обрабатывать прерывания с этих контактов на одной и той же линии EXTI (если только один вывод генерирует прерывание за раз, так что нет конфликта)?Определение порта внутри обработчика GPIO EXTI

ответ

1

Нет, только один из PA0, PB0 и т. Д. Может быть настроен как источник EXTI0. См. Описание регистров SYSCFG_EXTICR *, раздел 9.2.3 в STM32F4 Reference Manual.

Если обработчик прерываний совместно используется несколькими источниками EXTI, такими как EXTI9_5_IRQHandler и EXTI15_10_IRQHandler, затем прочитайте регистр EXTI_PR, чтобы определить, какой из них вызвал прерывание.

0

Я не знаком с вашей доской, но обычно вы хотите запросить контроллер прерываний из вашего обработчика, чтобы определить фактический источник прерываний.

Вы можете найти довольно легко следовать примеру на сайте ARM (но ваше оборудование может отличаться от контроллера обсуждаемой здесь): http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/15708.html

Установка в примере обсуждается в README в ZIP-архиве , Короче говоря, это показывает передачу прерываний с помощью векторного контроллера прерываний, а также обработку каскадного контроллера через этот первичный VIC.

+0

Можете ли вы предоставить образец кода или дать ссылку на любой материал? –

+0

Я добавил ссылку на некоторый код примера ARM, который делает лучшую работу, чем я мог. –