text: /* USER CODE BEGIN Header */
  /**
    ******************************************************************************
    * @file    stm32h7xx_it.c
    * @brief   Interrupt Service Routines.
    ******************************************************************************
    * @attention
    *
    * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
    * All rights reserved.</center></h2>
    *
    * This software component is licensed by ST under BSD 3-Clause license,
    * the "License"; You may not use this file except in compliance with the
    * License. You may obtain a copy of the License at:
    *                        opensource.org/licenses/BSD-3-Clause
    *
    ******************************************************************************
    */
  /* USER CODE END Header */
  
  /* Includes ------------------------------------------------------------------*/
  #include "main.h"
  #include "stm32h7xx_it.h"
  /* Private includes ----------------------------------------------------------*/
  /* USER CODE BEGIN Includes */
  #include "bq24072.h"
  /* USER CODE END Includes */
  
  /* Private typedef -----------------------------------------------------------*/
  /* USER CODE BEGIN TD */
  
  /* USER CODE END TD */
  
  /* Private define ------------------------------------------------------------*/
  /* USER CODE BEGIN PD */
  
  /* USER CODE END PD */
  
  /* Private macro -------------------------------------------------------------*/
  /* USER CODE BEGIN PM */
  
  /* USER CODE END PM */
  
  /* Private variables ---------------------------------------------------------*/
  /* USER CODE BEGIN PV */
  
  /* USER CODE END PV */
  
  /* Private function prototypes -----------------------------------------------*/
  /* USER CODE BEGIN PFP */
  
  /* USER CODE END PFP */
  
  /* Private user code ---------------------------------------------------------*/
  /* USER CODE BEGIN 0 */
  
  /* USER CODE END 0 */
  
  /* External variables --------------------------------------------------------*/
  extern ADC_HandleTypeDef hadc1;
  extern LTDC_HandleTypeDef hltdc;
  extern OSPI_HandleTypeDef hospi1;
  extern DMA_HandleTypeDef hdma_sai1_a;
  extern SAI_HandleTypeDef hsai_BlockA1;
  extern TIM_HandleTypeDef htim1;
  extern WWDG_HandleTypeDef hwwdg1;
  /* USER CODE BEGIN EV */
  
  /* USER CODE END EV */
  
  /******************************************************************************/
  /*           Cortex Processor Interruption and Exception Handlers          */
  /******************************************************************************/
  /**
    * @brief This function handles Non maskable interrupt.
    */
  void NMI_Handler(void)
  {
    /* USER CODE BEGIN NonMaskableInt_IRQn 0 */
  
    /* USER CODE END NonMaskableInt_IRQn 0 */
    /* USER CODE BEGIN NonMaskableInt_IRQn 1 */
  
    /* USER CODE END NonMaskableInt_IRQn 1 */
  }
  
  /**
    * @brief This function handles Hard fault interrupt.
    */
  void HardFault_Handler(void)
  {
    /* USER CODE BEGIN HardFault_IRQn 0 */
    uint32_t stack;
    uint32_t *pStack = &stack;
  
    BSOD(BSOD_HARDFAULT, pStack[9], pStack[8]);
  
    /* USER CODE END HardFault_IRQn 0 */
    while (1)
    {
      /* USER CODE BEGIN W1_HardFault_IRQn 0 */
      /* USER CODE END W1_HardFault_IRQn 0 */
    }
  }
  
  /**
    * @brief This function handles Memory management fault.
    */
  void MemManage_Handler(void)
  {
    /* USER CODE BEGIN MemoryManagement_IRQn 0 */
    uint32_t stack;
    uint32_t *pStack = &stack;
  
    BSOD(BSOD_MEMFAULT, pStack[9], pStack[8]);
  
    /* USER CODE END MemoryManagement_IRQn 0 */
    while (1)
    {
      /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */
      /* USER CODE END W1_MemoryManagement_IRQn 0 */
    }
  }
  
  /**
    * @brief This function handles Pre-fetch fault, memory access fault.
    */
  void BusFault_Handler(void)
  {
    /* USER CODE BEGIN BusFault_IRQn 0 */
  
    uint32_t stack;
    uint32_t *pStack = &stack;
  
    BSOD(BSOD_BUSFAULT, pStack[9], pStack[8]);
  
    /* USER CODE END BusFault_IRQn 0 */
    while (1)
    {
      /* USER CODE BEGIN W1_BusFault_IRQn 0 */
      /* USER CODE END W1_BusFault_IRQn 0 */
    }
  }
  
  /**
    * @brief This function handles Undefined instruction or illegal state.
    */
  void UsageFault_Handler(void)
  {
    /* USER CODE BEGIN UsageFault_IRQn 0 */
  
    uint32_t stack;
    uint32_t *pStack = &stack;
  
    BSOD(BSOD_USAGEFAULT, pStack[9], pStack[8]);
  
    /* USER CODE END UsageFault_IRQn 0 */
    while (1)
    {
      /* USER CODE BEGIN W1_UsageFault_IRQn 0 */
      /* USER CODE END W1_UsageFault_IRQn 0 */
    }
  }
  
  /**
    * @brief This function handles System service call via SWI instruction.
    */
  void SVC_Handler(void)
  {
    /* USER CODE BEGIN SVCall_IRQn 0 */
  
    /* USER CODE END SVCall_IRQn 0 */
    /* USER CODE BEGIN SVCall_IRQn 1 */
  
    /* USER CODE END SVCall_IRQn 1 */
  }
  
  /**
    * @brief This function handles Debug monitor.
    */
  void DebugMon_Handler(void)
  {
    /* USER CODE BEGIN DebugMonitor_IRQn 0 */
  
    /* USER CODE END DebugMonitor_IRQn 0 */
    /* USER CODE BEGIN DebugMonitor_IRQn 1 */
  
    /* USER CODE END DebugMonitor_IRQn 1 */
  }
  
  /**
    * @brief This function handles Pendable request for system service.
    */
  void PendSV_Handler(void)
  {
    /* USER CODE BEGIN PendSV_IRQn 0 */
  
    /* USER CODE END PendSV_IRQn 0 */
    /* USER CODE BEGIN PendSV_IRQn 1 */
  
    /* USER CODE END PendSV_IRQn 1 */
  }
  
  /**
    * @brief This function handles System tick timer.
    */
  void SysTick_Handler(void)
  {
    /* USER CODE BEGIN SysTick_IRQn 0 */
  
    /* USER CODE END SysTick_IRQn 0 */
    HAL_IncTick();
    /* USER CODE BEGIN SysTick_IRQn 1 */
  
    /* USER CODE END SysTick_IRQn 1 */
  }
  
  /******************************************************************************/
  /* STM32H7xx Peripheral Interrupt Handlers                                    */
  /* Add here the Interrupt Handlers for the used peripherals.                  */
  /* For the available peripheral interrupt handler names,                      */
  /* please refer to the startup file (startup_stm32h7xx.s).                    */
  /******************************************************************************/
  
  /**
    * @brief This function handles Window watchdog interrupt.
    */
  void WWDG_IRQHandler(void)
  {
    /* USER CODE BEGIN WWDG_IRQn 0 */
  
    /* USER CODE END WWDG_IRQn 0 */
    HAL_WWDG_IRQHandler(&hwwdg1);
    /* USER CODE BEGIN WWDG_IRQn 1 */
  
    /* USER CODE END WWDG_IRQn 1 */
  }
  
  /**
    * @brief This function handles EXTI line2 interrupt.
    */
  void EXTI2_IRQHandler(void)
  {
    /* USER CODE BEGIN EXTI2_IRQn 0 */
  
    if(__HAL_GPIO_EXTI_GET_FLAG(GPIO_PIN_2))
    {
      bq24072_handle_power_good();
    }
  
    /* USER CODE END EXTI2_IRQn 0 */
    HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2);
    /* USER CODE BEGIN EXTI2_IRQn 1 */
  
    __HAL_GPIO_EXTI_CLEAR_FLAG(GPIO_PIN_2);
  
    /* USER CODE END EXTI2_IRQn 1 */
  }
  
  /**
    * @brief This function handles DMA1 stream0 global interrupt.
    */
  void DMA1_Stream0_IRQHandler(void)
  {
    /* USER CODE BEGIN DMA1_Stream0_IRQn 0 */
  
    /* USER CODE END DMA1_Stream0_IRQn 0 */
    HAL_DMA_IRQHandler(&hdma_sai1_a);
    /* USER CODE BEGIN DMA1_Stream0_IRQn 1 */
  
    /* USER CODE END DMA1_Stream0_IRQn 1 */
  }
  
  /**
    * @brief This function handles ADC1 and ADC2 global interrupts.
    */
  void ADC_IRQHandler(void)
  {
    /* USER CODE BEGIN ADC_IRQn 0 */
  
    /* USER CODE END ADC_IRQn 0 */
    HAL_ADC_IRQHandler(&hadc1);
    /* USER CODE BEGIN ADC_IRQn 1 */
  
    /* USER CODE END ADC_IRQn 1 */
  }
  
  /**
    * @brief This function handles EXTI line[9:5] interrupts.
    */
  void EXTI9_5_IRQHandler(void)
  {
    /* USER CODE BEGIN EXTI9_5_IRQn 0 */
  
    if(__HAL_GPIO_EXTI_GET_FLAG(GPIO_PIN_7))
    {
      bq24072_handle_charging();
    }
  
    /* USER CODE END EXTI9_5_IRQn 0 */
    HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_7);
    /* USER CODE BEGIN EXTI9_5_IRQn 1 */
  
    __HAL_GPIO_EXTI_CLEAR_FLAG(GPIO_PIN_7);
  
    /* USER CODE END EXTI9_5_IRQn 1 */
  }
  
  /**
    * @brief This function handles TIM1 update interrupt.
    */
  void TIM1_UP_IRQHandler(void)
  {
    /* USER CODE BEGIN TIM1_UP_IRQn 0 */
  
    bq24072_poll();
  
    /* USER CODE END TIM1_UP_IRQn 0 */
    HAL_TIM_IRQHandler(&htim1);
    /* USER CODE BEGIN TIM1_UP_IRQn 1 */
  
    /* USER CODE END TIM1_UP_IRQn 1 */
  }
  
  /**
    * @brief This function handles SAI1 global interrupt.
    */
  void SAI1_IRQHandler(void)
  {
    /* USER CODE BEGIN SAI1_IRQn 0 */
  
    /* USER CODE END SAI1_IRQn 0 */
    HAL_SAI_IRQHandler(&hsai_BlockA1);
    /* USER CODE BEGIN SAI1_IRQn 1 */
  
    /* USER CODE END SAI1_IRQn 1 */
  }
  
  /**
    * @brief This function handles LTDC global interrupt.
    */
  void LTDC_IRQHandler(void)
  {
    /* USER CODE BEGIN LTDC_IRQn 0 */
  
    /* USER CODE END LTDC_IRQn 0 */
    HAL_LTDC_IRQHandler(&hltdc);
    /* USER CODE BEGIN LTDC_IRQn 1 */
  
    /* USER CODE END LTDC_IRQn 1 */
  }
  
  /**
    * @brief This function handles OCTOSPI1 global interrupt.
    */
  void OCTOSPI1_IRQHandler(void)
  {
    /* USER CODE BEGIN OCTOSPI1_IRQn 0 */
  
    /* USER CODE END OCTOSPI1_IRQn 0 */
    HAL_OSPI_IRQHandler(&hospi1);
    /* USER CODE BEGIN OCTOSPI1_IRQn 1 */
  
    /* USER CODE END OCTOSPI1_IRQn 1 */
  }
  
  /* USER CODE BEGIN 1 */
  
  /* USER CODE END 1 */
  /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
  