petrdynin

Mik32+ADC_start_IRQ+ADC_read_main

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