реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Внешнее прерывание.
Jenya7
сообщение Mar 21 2016, 12:39
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Хочу понять такую вещь. Если я запретил прерывание на пине. А тем временем был сигнал на пине. Потом через некоторое время прерывание разрешил. Прерывание потеряно или оно обработается при разрешении?
Код
GPIO_IntConfig(gpioPortC, 12, true, false, false);
//some code
//тут был сигнал на ноге
//some code
GPIO_IntConfig(gpioPortC, 12, true, false, true);


Кортекс-М3.

Сообщение отредактировал Jenya7 - Mar 21 2016, 12:40
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 21 2016, 13:02
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Mar 21 2016, 13:09
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



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

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

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

Сообщение отредактировал Jenya7 - Mar 21 2016, 13:39
Go to the top of the page
 
+Quote Post
501-q
сообщение Mar 22 2016, 03:38
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 24-02-09
Из: Екатеринбург
Пользователь №: 45 296



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

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

Илья
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Mar 22 2016, 08:17
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(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.

вроде как интерапт таки пендинг? или нет?
Go to the top of the page
 
+Quote Post
501-q
сообщение Mar 23 2016, 04:29
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 24-02-09
Из: Екатеринбург
Пользователь №: 45 296



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

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

Илья
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Mar 23 2016, 07:28
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



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

Илья

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


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

Сообщение отредактировал Jenya7 - Mar 23 2016, 07:30
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
501-q
сообщение Mar 23 2016, 08:28
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 24-02-09
Из: Екатеринбург
Пользователь №: 45 296



Цитата(Jenya7 @ Mar 23 2016, 12:28) *
да вот не знаю. по картинке не ясно.

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

В STM32F429 это не так.

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

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

Илья
Go to the top of the page
 
+Quote Post
Herz
сообщение Mar 23 2016, 08:33
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



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


Давайте, всё-таки, по-русски.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Mar 23 2016, 09:02
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(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) *
вроде как интерапт таки пендинг? или нет?

прерывание в ожидании
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Mar 28 2016, 09:12
Сообщение #11


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



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


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 28 2016, 13:48
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Сергей Борщ @ Mar 21 2016, 19:02) *
Разрешение + флаг = прерывание.

Это если в данный момент нет текущего состояния обслуживания прерывания. Если есть - прерывание будет только если приоритет нового прерывания выше уже обслуживаемого. Иначе будет ждать до выхода из текущего.
Всё это касается Cortex-M ессно.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 16:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.01731 секунд с 7
ELECTRONIX ©2004-2016