petrdynin

Mik32+ADC_IRQ+Timer16_IRQ

Sep 17th, 2025 (edited)
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.05 KB | Source Code | 0 0
  1. /* Запуск преобразования в прерывании по таймеру, получение данных в прерывании по готовности ADC */
  2.  HAL_EPIC_MaskLevelSet(HAL_EPIC_TIMER16_1_MASK);
  3.  HAL_EPIC_MaskEdgeSet(HAL_EPIC_ADC_MASK);
  4.  HAL_IRQ_EnableInterrupts();
  5.  
  6. ..............................................................
  7.  
  8. void __attribute__((section(".ram_text"))) trap_handler(void)
  9. {
  10.  
  11.     if (EPIC_CHECK_ADC())
  12.        {
  13.             adc_value = HAL_ADC_GetValue(&hadc);
  14.             HAL_GPIO_TogglePin(GPIO_0, GPIO_PIN_9);
  15.             EPIC->CLEAR = 1<<29;
  16.        }
  17.  
  18.     if (EPIC_CHECK_TIMER16_1())
  19.     {
  20.        if (__HAL_TIMER16_GET_FLAG_IT(&htimer16_1, TIMER16_FLAG_ARRM))
  21.         {
  22.             ANALOG_REG->ADC_SINGLE = 1;
  23.             HAL_GPIO_TogglePin(GPIO_0, GPIO_PIN_10); /* Смена сигнала PORT0_10 на противоположный */
  24.             __HAL_TIMER16_CLEAR_FLAG(&htimer16_1, TIMER16_FLAG_ARRM);
  25.         }
  26.      }
  27.    
  28.  
  29.     /* Сброс прерываний */
  30.     HAL_EPIC_Clear(0xDFFFFFFF);
  31. }
Advertisement
Add Comment
Please, Sign In to add comment