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

 
 
> Не срабатывает внешнее прерывание
Rash
сообщение Dec 2 2014, 19:46
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



Всем привет.

Столкнулся с такой проблемой в STM32F407: Если сделать критическую секцию для внешнего прерывания, то если его отключить на время выполнения кода, а потом опять включить, но за время выполнения кода пришло внешнее прерывание, то при последующем включении внешнего прерывания, прерывание не сработает. Т.е. получается будет пропущенное прерывание на время его отключения. Как сделать чтобы при включении внешнего прерывания его сработавший флаг был активен?

Код инициализации
CODE
#define TEST_IRQ_PIN GPIO_Pin_14
#define TEST_IRQ_GPIO_PORT GPIOE
#define TEST_EXTI_Line EXTI_Line14
#define TEST_IRQChannel EXTI15_10_IRQn
#define TEST_EXTI_PortSource EXTI_PortSourceGPIOE
#define TEST_GPIO_PinSource GPIO_PinSource14


// отключение обработки внешнего прерывания
#define ENTER_NOIRQ_REGION() { ITStatus exti_status = EXTI_GetIRQStatus(TEST_EXTI_Line); \
EXTI_Disable_IRQ(TEST_EXTI_Line); \

// включение обработки прерывания
#define LEAVE_NOIRQ_REGION() if(exti_status != RESET) \
EXTI_Enable_IRQ(TEST_EXTI_Line); \
}


GPIO_InitStructure.GPIO_Pin = TEST_IRQ_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(TEST_IRQ_GPIO_PORT, &GPIO_InitStructure);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
SYSCFG_EXTILineConfig(TEST_EXTI_PortSource, TEST_GPIO_PinSource);

EXTI_InitStructure.EXTI_Line = TEST_EXTI_Line;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = TEST_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);


Такой вид имеет код приложения
Код
ENTER_NOIRQ_REGION();
           ...
   Копирование данных
           ...
LEAVE_NOIRQ_REGION();


Сообщение отредактировал IgorKossak - Dec 2 2014, 19:55
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Rash   Не срабатывает внешнее прерывание   Dec 2 2014, 19:46
- - Golikov A.   если флаг прерывания есть, то оно сработает, и пок...   Dec 2 2014, 20:33
- - Rash   да сам удивлён такой ситуации. Штрихуешь выключени...   Dec 2 2014, 20:47
- - adnega   Не нашел исходников EXTI_Disable_IRQ() и EXTI_Enab...   Dec 3 2014, 08:12
- - Rash   Кодstatic inline void EXTI_Enable_IRQ(uint32_t...   Dec 3 2014, 08:31
- - Golikov A.   а можно проследить в момент разрешения флаг стоит,...   Dec 3 2014, 08:46
- - Rash   Я пробовал читать этот флаг перед EXTI->IMR |= ...   Dec 3 2014, 08:57
- - Golikov A.   погодите. Так если флага нет, то и прерывания не б...   Dec 3 2014, 09:15
- - Rash   попытаюсь вкратце объяснить. По внешнему прерывани...   Dec 3 2014, 09:30
- - Golikov A.   вот сейчас мне вдруг подумалось вы включение и мас...   Dec 3 2014, 09:53
- - scifi   Цитата(Rash @ Dec 2 2014, 22:46) Т.е. пол...   Dec 3 2014, 10:34
|- - adnega   Цитата(scifi @ Dec 3 2014, 14:34) прерыва...   Dec 3 2014, 10:59
- - Rash   Я понял, спасибо за разъяснение. Но если работать ...   Dec 3 2014, 17:20
|- - scifi   Цитата(Rash @ Dec 3 2014, 20:20) Но если ...   Dec 3 2014, 18:11
- - Rash   Объясните, пожалуйста, смысл регистров NVIC ISPR и...   Dec 3 2014, 21:12
|- - scifi   Цитата(Rash @ Dec 4 2014, 00:12) Объяснит...   Dec 3 2014, 21:28
- - Rash   читал и на английском и на русском, смысл что флаж...   Dec 4 2014, 06:40
|- - adnega   Цитата(Rash @ Dec 4 2014, 10:40) читал и ...   Dec 4 2014, 06:51
- - Rash   спасибо всем, вроде разобрался   Dec 4 2014, 09:12


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 10:06
Рейтинг@Mail.ru


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