/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

INT_VECTOR_STACK_TOP(__StackTop)
INT_VECTOR_RESET_HANDLER(Reset_Handler)
INT_VECTOR_NMI_HANDLER(NMI_Handler)
INT_VECTOR_HARDFAULT_HANDLER(HardFault_Handler)
INT_VECTOR_MEMMANAGE_HANDLER(MemManage_Handler)
INT_VECTOR_BUSFAULT_HANDLER(BusFault_Handler)
INT_VECTOR_USAGEFAULT_HANDLER(UsageFault_Handler)
INT_VECTOR_UNUSED(0)
INT_VECTOR_UNUSED(0)
INT_VECTOR_UNUSED(0)
INT_VECTOR_UNUSED(0)
INT_VECTOR_SVC_HANDLER(SVC_Handler)
INT_VECTOR_DEBUGMON_HANDLER(DebugMon_Handler)
INT_VECTOR_UNUSED(0)
INT_VECTOR_PENDSV_HANDLER(PendSV_Handler)
INT_VECTOR_SYSTICK_HANDLER(SysTick_Handler)
INT_VECTOR(WWDG_IRQHandler)
INT_VECTOR(PVD_PVM_IRQHandler)
INT_VECTOR(RTC_TAMP_LSECSS_IRQHandler)
INT_VECTOR(RTC_WKUP_IRQHandler)
INT_VECTOR(FLASH_IRQHandler)
INT_VECTOR(RCC_IRQHandler)
INT_VECTOR(EXTI0_IRQHandler)
INT_VECTOR(EXTI1_IRQHandler)
INT_VECTOR(EXTI2_IRQHandler)
INT_VECTOR(EXTI3_IRQHandler)
INT_VECTOR(EXTI4_IRQHandler)
INT_VECTOR(DMA1_Channel1_IRQHandler)
INT_VECTOR(DMA1_Channel2_IRQHandler)
INT_VECTOR(DMA1_Channel3_IRQHandler)
INT_VECTOR(DMA1_Channel4_IRQHandler)
INT_VECTOR(DMA1_Channel5_IRQHandler)
INT_VECTOR(DMA1_Channel6_IRQHandler)
INT_VECTOR(DMA1_Channel7_IRQHandler)
INT_VECTOR(ADC1_2_IRQHandler)
INT_VECTOR(USB_HP_IRQHandler)
INT_VECTOR(USB_LP_IRQHandler)
INT_VECTOR(FDCAN1_IT0_IRQHandler)
INT_VECTOR(FDCAN1_IT1_IRQHandler)
INT_VECTOR(EXTI9_5_IRQHandler)
INT_VECTOR(TIM1_BRK_TIM15_IRQHandler)
INT_VECTOR(TIM1_UP_TIM16_IRQHandler)
INT_VECTOR(TIM1_TRG_COM_TIM17_IRQHandler)
INT_VECTOR(TIM1_CC_IRQHandler)
INT_VECTOR(TIM2_IRQHandler)
INT_VECTOR(TIM3_IRQHandler)
INT_VECTOR(TIM4_IRQHandler)
INT_VECTOR(I2C1_EV_IRQHandler)
INT_VECTOR(I2C1_ER_IRQHandler)
INT_VECTOR(I2C2_EV_IRQHandler)
INT_VECTOR(I2C2_ER_IRQHandler)
INT_VECTOR(SPI1_IRQHandler)
INT_VECTOR(SPI2_IRQHandler)
INT_VECTOR(USART1_IRQHandler)
INT_VECTOR(USART2_IRQHandler)
INT_VECTOR(USART3_IRQHandler)
INT_VECTOR(EXTI15_10_IRQHandler)
INT_VECTOR(RTC_Alarm_IRQHandler)
INT_VECTOR(USBWakeUp_IRQHandler)
INT_VECTOR(TIM8_BRK_IRQHandler)
INT_VECTOR(TIM8_UP_IRQHandler)
INT_VECTOR(TIM8_TRG_COM_IRQHandler)
INT_VECTOR(TIM8_CC_IRQHandler)
INT_VECTOR(ADC3_IRQHandler)
INT_VECTOR(FMC_IRQHandler)
INT_VECTOR(LPTIM1_IRQHandler)
INT_VECTOR(TIM5_IRQHandler)
INT_VECTOR(SPI3_IRQHandler)
INT_VECTOR(UART4_IRQHandler)
INT_VECTOR(UART5_IRQHandler)
INT_VECTOR(TIM6_DAC_IRQHandler)
INT_VECTOR(TIM7_DAC_IRQHandler)
INT_VECTOR(DMA2_Channel1_IRQHandler)
INT_VECTOR(DMA2_Channel2_IRQHandler)
INT_VECTOR(DMA2_Channel3_IRQHandler)
INT_VECTOR(DMA2_Channel4_IRQHandler)
INT_VECTOR(DMA2_Channel5_IRQHandler)
INT_VECTOR(ADC4_IRQHandler)
INT_VECTOR(ADC5_IRQHandler)
INT_VECTOR(UCPD1_IRQHandler)
INT_VECTOR(COMP1_2_3_IRQHandler)
INT_VECTOR(COMP4_5_6_IRQHandler)
INT_VECTOR(COMP7_IRQHandler)
INT_VECTOR_UNUSED(0)
INT_VECTOR_UNUSED(0)
INT_VECTOR_UNUSED(0)
INT_VECTOR_UNUSED(0)
INT_VECTOR_UNUSED(0)
INT_VECTOR_UNUSED(0)
INT_VECTOR_UNUSED(0)
INT_VECTOR_UNUSED(0)
INT_VECTOR(CRS_IRQHandler)
INT_VECTOR(SAI1_IRQHandler)
INT_VECTOR(TIM20_BRK_IRQHandler)
INT_VECTOR(TIM20_UP_IRQHandler)
INT_VECTOR(TIM20_TRG_COM_IRQHandler)
INT_VECTOR(TIM20_CC_IRQHandler)
INT_VECTOR(FPU_IRQHandler)
INT_VECTOR(I2C4_EV_IRQHandler)
INT_VECTOR(I2C4_ER_IRQHandler)
INT_VECTOR(SPI4_IRQHandler)
INT_VECTOR_UNUSED(0)
INT_VECTOR(FDCAN2_IT0_IRQHandler)
INT_VECTOR(FDCAN2_IT1_IRQHandler)
INT_VECTOR(FDCAN3_IT0_IRQHandler)
INT_VECTOR(FDCAN3_IT1_IRQHandler)
INT_VECTOR(RNG_IRQHandler)
INT_VECTOR(LPUART1_IRQHandler)
INT_VECTOR(I2C3_EV_IRQHandler)
INT_VECTOR(I2C3_ER_IRQHandler)
INT_VECTOR(DMAMUX_OVR_IRQHandler)
INT_VECTOR(QUADSPI_IRQHandler)
INT_VECTOR(DMA1_Channel8_IRQHandler)
INT_VECTOR(DMA2_Channel6_IRQHandler)
INT_VECTOR(DMA2_Channel7_IRQHandler)
INT_VECTOR(DMA2_Channel8_IRQHandler)
INT_VECTOR(CORDIC_IRQHandler)
INT_VECTOR(FMAC_IRQHandler)
