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

Внешнее прерывание.

Хочу понять такую вещь. Если я запретил прерывание на пине. А тем временем был сигнал на пине. Потом через некоторое время прерывание разрешил. Прерывание потеряно или оно обработается при разрешении?

GPIO_IntConfig(gpioPortC, 12, true, false, false);
//some code
//тут был сигнал на ноге
//some code
GPIO_IntConfig(gpioPortC, 12, true, false, true);

 

Кортекс-М3.

Изменено пользователем Jenya7

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


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

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

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


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

Разрешение + флаг = прерывание. - это значит функция обработчик прерывания исполнит свою работу?

 

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

 

понял. большое спасибо.

Изменено пользователем Jenya7

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


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

См. документацию на свой камень.

 

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

 

Илья

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


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

См. документацию на свой камень.

 

Для 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.

вроде как интерапт таки пендинг? или нет?

 

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


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

вроде как интерапт таки пендинг? или нет?

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

 

Илья

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


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

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

 

Илья

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

 

 

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

post-71075-1458718080_thumb.png

Изменено пользователем Jenya7

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


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

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

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

 

В STM32F429 это не так.

 

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

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

 

Илья

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


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

На картинке явно видно, что 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?

он сам не уверен сработает или нет. :)

 

вроде как интерапт таки пендинг? или нет?

прерывание в ожидании

 

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


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

ну так вам Сергей Борщ тоже самое ответил во втором посте. Так оно обычно и происходит. За конкретным поведением конкретного камня надо конечно в даташит смотреть.

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


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

Разрешение + флаг = прерывание.

Это если в данный момент нет текущего состояния обслуживания прерывания. Если есть - прерывание будет только если приоритет нового прерывания выше уже обслуживаемого. Иначе будет ждать до выхода из текущего.

Всё это касается Cortex-M ессно.

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


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

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

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

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

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

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

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

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

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

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