Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

проблема с внешними прерываниями

Сб окт 29, 2022 22:33:52

Если в программе одно внешнее прерывание NVIC_EnableIRQ(EXTI4_15_IRQn) то его ISR (void EXTI4_15_IRQHandler(void))срабатывает. Но когда в программе есть 2 внешних прерываний, как показано ниже, то ISR(void EXTI4_15_IRQHandler(void)) не срабатывает. Что делаю не так?
Чип stm32f030R8
Код:
  RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
  SYSCFG->EXTICR[4] &= (uint16_t)~SYSCFG_EXTICR4_EXTI15_PA;
  EXTI->IMR = EXTI_IMR_MR15;
  EXTI->RTSR = EXTI_RTSR_TR15;
  NVIC_EnableIRQ(EXTI4_15_IRQn);
  NVIC_SetPriority(EXTI4_15_IRQn,0);

  SYSCFG->EXTICR[1] &= (uint16_t)~SYSCFG_EXTICR1_EXTI0_PA;
  EXTI->IMR = EXTI_IMR_MR0;
  EXTI->RTSR = EXTI_RTSR_TR0;
  NVIC_EnableIRQ(EXTI0_1_IRQn);
  NVIC_SetPriority(EXTI0_1_IRQn,1);

 void EXTI4_15_IRQHandler(void)
{
  if ((EXTI->PR & EXTI_PR_PR15) != 0) 
  {
     EXTI->PR |= EXTI_PR_PR15;
     GPIOC->ODR ^= (1<<9);
  }
}

void EXTI0_IRQHandler(void)
{
  if ((EXTI->PR & EXTI_PR_PR0) != 0) 
      {
          EXTI->PR |= EXTI_PR_PR0;
         GPIOC->ODR ^= (1<<8);
       }
}

Re: проблема с внешними прерываниями

Вс окт 30, 2022 10:20:43

ошибку допустил, пропустил _1_ в названии функции void EXTI0_1_IRQHandler(void)
Вопрос закрыт.
Ответить