ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
4 мая
1514436 Топик полностью
VladislavS. (27.04.2025 08:28, просмотров: 338) ответил Vit на Насколько помню, считывал регистр флагов и обрабатывал копию, а уже затем рассматривал случай pending interrupt.
Я бы как-то так сделал Было


Стало

void TIMER2_IRQHandler()
{
  static uint32_t tm2_cr0;
  static uint32_t tm2_cr1;

  auto ir = LPC_TIM2->IR;
  LPC_TIM2->IR = ir;
  
  if (ir & BIT(4))         
    if (auto cr0 = LPC_TIM2->CR0; cr0 - tm2_cr0 >= FIN_MIN_PERIOD) 
    {        
      tm2_cr0 = cr0;
      vars.fcntr[0]++;
    }
  
  if (ir & BIT(5))
    if (auto cr1 = LPC_TIM2->CR1; cr1 - tm2_cr1 >= FIN_MIN_PERIOD) 
    {
      tm2_cr1 = cr1;
      vars.fcntr[1]++;
    }
}