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

 
 
> stm32f4 прерывания, изменение переменных прерыванием, и включение другого прерывания
BlackOps
сообщение Jul 30 2013, 16:13
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 618
Регистрация: 7-06-08
Из: USSR
Пользователь №: 38 121



два вопроса:

1) как лучше объявлять глобальную переменную вне функции main() если я хочу чтобы эта переменная нормально модифицировалась/читалась прерыванием и основной программой?


2) Я заметил проблемы с прерыванием по EXTI, а именно, когда в обработчике прерывания по EXTI я хочу включить прерывание EXTI другого пина, то у меня все вылетает с ошибкой Segmentation Fault, в чем причина этого?

И как правильнее организовать включение одного прерывания (в данном случае EXTI) внутри другого?

Я например делаю так:

первое прерывание ЕХТИ:
Код
// Enable SYSCFG clock
RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;


[code]// External interrupt from pin PE2 (EXT1_IN1)
SYSCFG->EXTICR[0] |= SYSCFG_EXTICR1_EXTI2_PE; //

EXTI->IMR |= (1 << 2); // Mask PE2
EXTI->RTSR |= (1 << 2); // Rising Edge detection

NVIC_SetPriority(EXTI2_IRQn, 0x1);

NVIC_EnableIRQ(EXTI2_IRQn);



А вот так выглядит обработчик этого прерывания где включается второе аналогичное:

Код
void EXTI2_IRQHandler()
{

// check if interrupt bit set
if ( (EXTI->PR) & (1 << 2) )
{
    // clear interrupt bit
    EXTI->PR = (1 << 2);

// External interrupt from pin PE4 (EXT1_IN3)
SYSCFG->EXTICR[1] |= SYSCFG_EXTICR2_EXTI4_PE; //

EXTI->IMR |= (1 << 4); // Mask PE4
EXTI->RTSR |= (1 << 4); // Rising Edge detection

NVIC_SetPriority(EXTI4_IRQn, 0x3);

NVIC_EnableIRQ(EXTI4_IRQn);

}
}


не кладите мой код в codebox, это КОРОТКИЙ код!


--------------------
Нажми на кнопку - получишь результат, и твоя мечта осуществится
Go to the top of the page
 
+Quote Post



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

 


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


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