два вопроса:
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, это КОРОТКИЙ код!