Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Когда нужно сбрасывать флаг прерывания : в начале или в конце обработчика
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
IanPo
Речь про STM32!

Код1:
Код
void TIM3_IRQHandler(void)
{
  /* Clear TIM3 Capture compare interrupt pending bit */
  TIM_ClearITPendingBit(TIM3, TIM_IT_CC2);

  /* Get the Input Capture value */
  IC2Value = TIM_GetCapture2(TIM3);

  if (IC2Value != 0)
  {
    /* Duty cycle computation */
    DutyCycle = (TIM_GetCapture1(TIM3) * 100) / IC2Value;

    /* Frequency computation */
    Frequency = SystemCoreClock / IC2Value;
  }
  else
  {
    DutyCycle = 0;
    Frequency = 0;
  }
}


Код2:
Код
void EXTI0_IRQHandler(void)
{
  if(EXTI_GetITStatus(EXTI_Line0) != RESET)
  {
    /* Toggle LED1 */
     STM_EVAL_LEDToggle(LED1);

    /* Clear the  EXTI line 0 pending bit */
    EXTI_ClearITPendingBit(EXTI_Line0);
  }
}


Правильно ли я понимаю, что вообще все равно, когда, но - после сброса появляется возможность повторного захода в обработчик, когда еще первый запрос не полностью обработан?
nill
В целом так, но есть нюансы. Вот, почитайте:
http://www.keil.com/forum/18951/cortex-m3-...interrupt-flag/
Там разбирается ситуация, когда флаг прерывани сбрасывается в конце обработчика. Обработчик вызывается повторно сразу после выхода из него по причине задержки транзакции по шине данных, т.е. выход из обработчика уже произошёл, но флаг не был сброшен.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.