|
|
  |
Внешнее прерывание. |
|
|
|
Mar 21 2016, 12:39
|
Профессионал
    
Группа: Участник
Сообщений: 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
|
|
|
|
|
Mar 22 2016, 03:38
|
Участник

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

|
См. документацию на свой камень.
Для stm32f42xx (RM0090, стр.377): если запретить прерывание на пине (маской), то прерывания не будет, до pending request register событие не дойдёт. Сам попадался.
Илья
|
|
|
|
|
Mar 22 2016, 08:17
|
Профессионал
    
Группа: Участник
Сообщений: 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. вроде как интерапт таки пендинг? или нет?
|
|
|
|
|
Mar 23 2016, 04:29
|
Участник

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

|
Цитата(Jenya7 @ Mar 22 2016, 13:17)  вроде как интерапт таки пендинг? или нет? Скорее нет. На картинке (которая Fig 4.1.) должно быть явно видно. Но по тексту: сначала выставляется флаг, потом флаг маскируется (qualified), затем флаг запоминается в pending регистре. Так что если маска наложена, то флаг не запомнится. Илья
|
|
|
|
|
Mar 23 2016, 07:28
|
Профессионал
    
Группа: Участник
Сообщений: 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
Эскизы прикрепленных изображений
|
|
|
|
|
Mar 23 2016, 08:28
|
Участник

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

|
Цитата(Jenya7 @ Mar 23 2016, 12:28)  да вот не знаю. по картинке не ясно. На картинке явно видно, что IF[n] -- это тригер. Значит событие будет запомнено и обработано после разрешения битом IEN[n]. (Ну, тут ещё возникает вопрос соответствия картинки, как и вообще документации, реальному положению дел :-) В STM32F429 это не так. Цитата по логике если флаг пендинг то он дожен обработаться. Конечно, если запрос зафиксировали в pending регистре, то он будет обработан. Илья
|
|
|
|
|
Mar 23 2016, 09:02
|
Профессионал
    
Группа: Участник
Сообщений: 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? он сам не уверен сработает или нет.  Цитата(Jenya7 @ Mar 22 2016, 13:17)  вроде как интерапт таки пендинг? или нет?
прерывание в ожидании
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|