Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Внешнее прерывание.
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Jenya7
Хочу понять такую вещь. Если я запретил прерывание на пине. А тем временем был сигнал на пине. Потом через некоторое время прерывание разрешил. Прерывание потеряно или оно обработается при разрешении?
Код
GPIO_IntConfig(gpioPortC, 12, true, false, false);
//some code
//тут был сигнал на ноге
//some code
GPIO_IntConfig(gpioPortC, 12, true, false, true);


Кортекс-М3.
Сергей Борщ
Вы снимаете разрешение. Сигнал выставляет флаг. Вы выставляете разрешение. Разрешение + флаг = прерывание. Это в случае, если вы снимаете и выставляете разрешение. Что делают ваши функции GPIO_IntConfig() - я не знаю и разбираться не хочу.
Jenya7
Разрешение + флаг = прерывание. - это значит функция обработчик прерывания исполнит свою работу?

а что сигнал выставит флаг если разрешение снято = external interrupt disabled?

понял. большое спасибо.
501-q
См. документацию на свой камень.

Для stm32f42xx (RM0090, стр.377): если запретить прерывание на пине (маской), то прерывания не будет, до pending request register событие не дойдёт. Сам попадался.

Илья
Jenya7
Цитата(501-q @ Mar 22 2016, 09:38) *
См. документацию на свой камень.

Для stm32f42xx (RM0090, стр.377): если запретить прерывание на пине (маской), то прерывания не будет, до pending request register событие не дойдёт. Сам попадался.

Илья

у меня EFM32TG. в документации написано так.
Цитата
The EFM32TG devices have up to 23 interrupt request lines (IRQ) which are connected to the CortexM3. Each of these lines (shown in Table 4.1 (p. 12)) are connected to one or more interrupt flags in
one or more modules. The interrupt flags are set by hardware on an interrupt condition. It is also possible
to set/clear the interrupt flags through the IFS/IFC registers. Each interrupt flag is then qualified with its
own interrupt enable bit (IEN register), before being OR'ed with the other interrupt flags to generate the
IRQ. A high IRQ line will set the corresponding pending bit (can also be set/cleared with the SETPEND/
CLRPEND bits in ISPR0/ICPR0) in the Cortex-M3 NVIC. The pending bit is then qualified with an enable
bit (set/cleared with SETENA/CLRENA bits in ISER0/ICER0) before generating an interrupt request to
the core. Figure 4.1 (p. 12) illustrates the interrupt system. For more information on how the interrupts
are handled inside the Cortex-M3, the reader is referred to the EFM32 Cortex-M3 Reference Manual.

вроде как интерапт таки пендинг? или нет?
501-q
Цитата(Jenya7 @ Mar 22 2016, 13:17) *
вроде как интерапт таки пендинг? или нет?

Скорее нет. На картинке (которая Fig 4.1.) должно быть явно видно. Но по тексту: сначала выставляется флаг, потом флаг маскируется (qualified), затем флаг запоминается в pending регистре. Так что если маска наложена, то флаг не запомнится.

Илья
Jenya7
Цитата(501-q @ Mar 23 2016, 09:29) *
Скорее нет. На картинке (которая Fig 4.1.) должно быть явно видно. Но по тексту: сначала выставляется флаг, потом флаг маскируется (qualified), затем флаг запоминается в pending регистре. Так что если маска наложена, то флаг не запомнится.

Илья

да вот не знаю. по картинке не ясно.


по логике если флаг пендинг то он дожен обработаться.
501-q
Цитата(Jenya7 @ Mar 23 2016, 12:28) *
да вот не знаю. по картинке не ясно.

На картинке явно видно, что IF[n] -- это тригер. Значит событие будет запомнено и обработано после разрешения битом IEN[n]. (Ну, тут ещё возникает вопрос соответствия картинки, как и вообще документации, реальному положению дел :-)

В STM32F429 это не так.

Цитата
по логике если флаг пендинг то он дожен обработаться.

Конечно, если запрос зафиксировали в pending регистре, то он будет обработан.

Илья
Herz
Цитата(Jenya7 @ Mar 22 2016, 10:17) *
вроде как интерапт таки пендинг? или нет?


Давайте, всё-таки, по-русски.
Jenya7
Цитата(501-q @ Mar 23 2016, 13:28) *
На картинке явно видно, что IF[n] -- это тригер. Значит событие будет запомнено и обработано после разрешения битом IEN[n]. (Ну, тут ещё возникает вопрос соответствия картинки, как и вообще документации, реальному положению дел :-)

В STM32F429 это не так.


Конечно, если запрос зафиксировали в pending регистре, то он будет обработан.

Илья

спасибо за объяснение.
интересен ответ официального представителя Silicom Labs.
Цитата
I'm assuming that the interrupt flag will still be set, so that you'd vector to the interrupt handler once you re-enabled interrupts. This is how it generally works on our 8-bit MCUs, at least (which, you know, is not a great indicator of whether it occurs on our 32-bit MCUs). Can you test it out?

он сам не уверен сработает или нет. sm.gif

Цитата(Jenya7 @ Mar 22 2016, 13:17) *
вроде как интерапт таки пендинг? или нет?

прерывание в ожидании
sigmaN
ну так вам Сергей Борщ тоже самое ответил во втором посте. Так оно обычно и происходит. За конкретным поведением конкретного камня надо конечно в даташит смотреть.
jcxz
Цитата(Сергей Борщ @ Mar 21 2016, 19:02) *
Разрешение + флаг = прерывание.

Это если в данный момент нет текущего состояния обслуживания прерывания. Если есть - прерывание будет только если приоритет нового прерывания выше уже обслуживаемого. Иначе будет ждать до выхода из текущего.
Всё это касается Cortex-M ессно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.