/**
 * \file
 *
 * \brief GCC startup file for ATSAMD51G18A
 *
 * Copyright (c) 2020 Microchip Technology Inc.
 *
 * \license_start
 *
 * \page License
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Licensed 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.
 *
 * \license_stop
 *
 */

#include "samd51g18a.h"

/* Initialize segments */
extern uint32_t _sfixed;
extern uint32_t _efixed;
extern uint32_t _etext;
extern uint32_t _srelocate;
extern uint32_t _erelocate;
extern uint32_t _szero;
extern uint32_t _ezero;
extern uint32_t _sstack;
extern uint32_t _estack;

/** \cond DOXYGEN_SHOULD_SKIP_THIS */
int main(void);
/** \endcond */

void __libc_init_array(void);

/* Reset handler */
void Reset_Handler(void);

/* Default empty handler */
void Dummy_Handler(void);

/* Cortex-M4 core handlers */
void NonMaskableInt_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void HardFault_Handler    ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void MemoryManagement_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void BusFault_Handler     ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void UsageFault_Handler   ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SVCall_Handler       ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void DebugMonitor_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void PendSV_Handler       ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SysTick_Handler      ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

/* Peripherals handlers */
void PM_Handler           ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void MCLK_Handler         ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void OSCCTRL_XOSC0_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void OSCCTRL_XOSC1_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void OSCCTRL_DFLL_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void OSCCTRL_DPLL0_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void OSCCTRL_DPLL1_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void OSC32KCTRL_Handler   ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SUPC_OTHER_Handler   ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SUPC_BODDET_Handler  ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void WDT_Handler          ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void RTC_Handler          ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void EIC_EXTINT_0_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void EIC_EXTINT_1_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void EIC_EXTINT_2_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void EIC_EXTINT_3_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void EIC_EXTINT_4_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void EIC_EXTINT_5_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void EIC_EXTINT_6_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void EIC_EXTINT_7_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void EIC_EXTINT_8_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void EIC_EXTINT_9_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void EIC_EXTINT_10_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void EIC_EXTINT_11_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void EIC_EXTINT_12_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void EIC_EXTINT_13_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void EIC_EXTINT_14_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void EIC_EXTINT_15_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void FREQM_Handler        ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void NVMCTRL_0_Handler    ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void NVMCTRL_1_Handler    ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void DMAC_0_Handler       ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void DMAC_1_Handler       ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void DMAC_2_Handler       ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void DMAC_3_Handler       ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void DMAC_OTHER_Handler   ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void EVSYS_0_Handler      ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void EVSYS_1_Handler      ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void EVSYS_2_Handler      ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void EVSYS_3_Handler      ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void EVSYS_OTHER_Handler  ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void PAC_Handler          ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void RAMECC_Handler       ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SERCOM0_0_Handler    ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SERCOM0_1_Handler    ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SERCOM0_2_Handler    ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SERCOM0_OTHER_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SERCOM1_0_Handler    ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SERCOM1_1_Handler    ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SERCOM1_2_Handler    ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SERCOM1_OTHER_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SERCOM2_0_Handler    ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SERCOM2_1_Handler    ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SERCOM2_2_Handler    ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SERCOM2_OTHER_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SERCOM3_0_Handler    ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SERCOM3_1_Handler    ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SERCOM3_2_Handler    ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SERCOM3_OTHER_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SERCOM4_0_Handler    ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SERCOM4_1_Handler    ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SERCOM4_2_Handler    ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SERCOM4_OTHER_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SERCOM5_0_Handler    ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SERCOM5_1_Handler    ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SERCOM5_2_Handler    ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SERCOM5_OTHER_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void USB_OTHER_Handler    ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void USB_SOF_HSOF_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void USB_TRCPT0_Handler   ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void USB_TRCPT1_Handler   ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TCC0_OTHER_Handler   ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TCC0_MC0_Handler     ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TCC0_MC1_Handler     ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TCC0_MC2_Handler     ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TCC0_MC3_Handler     ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TCC0_MC4_Handler     ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TCC0_MC5_Handler     ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TCC1_OTHER_Handler   ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TCC1_MC0_Handler     ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TCC1_MC1_Handler     ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TCC1_MC2_Handler     ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TCC1_MC3_Handler     ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TCC2_OTHER_Handler   ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TCC2_MC0_Handler     ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TCC2_MC1_Handler     ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TCC2_MC2_Handler     ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TC0_Handler          ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TC1_Handler          ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TC2_Handler          ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TC3_Handler          ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void PDEC_OTHER_Handler   ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void PDEC_MC0_Handler     ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void PDEC_MC1_Handler     ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void ADC0_OTHER_Handler   ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void ADC0_RESRDY_Handler  ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void ADC1_OTHER_Handler   ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void ADC1_RESRDY_Handler  ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void AC_Handler           ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void DAC_OTHER_Handler    ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void DAC_EMPTY_0_Handler  ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void DAC_EMPTY_1_Handler  ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void DAC_RESRDY_0_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void DAC_RESRDY_1_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void PCC_Handler          ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void AES_Handler          ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TRNG_Handler         ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void ICM_Handler          ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void PUKCC_Handler        ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void QSPI_Handler         ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SDHC0_Handler        ( void ) __attribute__ ((weak, alias("Dummy_Handler")));

/* Exception Table */
__attribute__ ((section(".vectors")))
const DeviceVectors exception_table = {

        /* Configure Initial Stack Pointer, using linker-generated symbols */
        .pvStack = (void*) (&_estack),

        .pfnReset_Handler              = (void*) Reset_Handler,
        .pfnNonMaskableInt_Handler     = (void*) NonMaskableInt_Handler,
        .pfnHardFault_Handler          = (void*) HardFault_Handler,
        .pfnMemoryManagement_Handler   = (void*) MemoryManagement_Handler,
        .pfnBusFault_Handler           = (void*) BusFault_Handler,
        .pfnUsageFault_Handler         = (void*) UsageFault_Handler,
        .pvReservedC9                  = (void*) (0UL), /* Reserved */
        .pvReservedC8                  = (void*) (0UL), /* Reserved */
        .pvReservedC7                  = (void*) (0UL), /* Reserved */
        .pvReservedC6                  = (void*) (0UL), /* Reserved */
        .pfnSVCall_Handler             = (void*) SVCall_Handler,
        .pfnDebugMonitor_Handler       = (void*) DebugMonitor_Handler,
        .pvReservedC3                  = (void*) (0UL), /* Reserved */
        .pfnPendSV_Handler             = (void*) PendSV_Handler,
        .pfnSysTick_Handler            = (void*) SysTick_Handler,

        /* Configurable interrupts */
        .pfnPM_Handler                 = (void*) PM_Handler,     /* 0  Power Manager */
        .pfnMCLK_Handler               = (void*) MCLK_Handler,   /* 1  Main Clock */
        .pfnOSCCTRL_XOSC0_Handler      = (void*) OSCCTRL_XOSC0_Handler, /* 2  Oscillators Control */
        .pfnOSCCTRL_XOSC1_Handler      = (void*) OSCCTRL_XOSC1_Handler, /* 3  Oscillators Control */
        .pfnOSCCTRL_DFLL_Handler       = (void*) OSCCTRL_DFLL_Handler, /* 4  Oscillators Control */
        .pfnOSCCTRL_DPLL0_Handler      = (void*) OSCCTRL_DPLL0_Handler, /* 5  Oscillators Control */
        .pfnOSCCTRL_DPLL1_Handler      = (void*) OSCCTRL_DPLL1_Handler, /* 6  Oscillators Control */
        .pfnOSC32KCTRL_Handler         = (void*) OSC32KCTRL_Handler, /* 7  32kHz Oscillators Control */
        .pfnSUPC_OTHER_Handler         = (void*) SUPC_OTHER_Handler, /* 8  Supply Controller */
        .pfnSUPC_BODDET_Handler        = (void*) SUPC_BODDET_Handler, /* 9  Supply Controller */
        .pfnWDT_Handler                = (void*) WDT_Handler,    /* 10 Watchdog Timer */
        .pfnRTC_Handler                = (void*) RTC_Handler,    /* 11 Real-Time Counter */
        .pfnEIC_EXTINT_0_Handler       = (void*) EIC_EXTINT_0_Handler, /* 12 External Interrupt Controller */
        .pfnEIC_EXTINT_1_Handler       = (void*) EIC_EXTINT_1_Handler, /* 13 External Interrupt Controller */
        .pfnEIC_EXTINT_2_Handler       = (void*) EIC_EXTINT_2_Handler, /* 14 External Interrupt Controller */
        .pfnEIC_EXTINT_3_Handler       = (void*) EIC_EXTINT_3_Handler, /* 15 External Interrupt Controller */
        .pfnEIC_EXTINT_4_Handler       = (void*) EIC_EXTINT_4_Handler, /* 16 External Interrupt Controller */
        .pfnEIC_EXTINT_5_Handler       = (void*) EIC_EXTINT_5_Handler, /* 17 External Interrupt Controller */
        .pfnEIC_EXTINT_6_Handler       = (void*) EIC_EXTINT_6_Handler, /* 18 External Interrupt Controller */
        .pfnEIC_EXTINT_7_Handler       = (void*) EIC_EXTINT_7_Handler, /* 19 External Interrupt Controller */
        .pfnEIC_EXTINT_8_Handler       = (void*) EIC_EXTINT_8_Handler, /* 20 External Interrupt Controller */
        .pfnEIC_EXTINT_9_Handler       = (void*) EIC_EXTINT_9_Handler, /* 21 External Interrupt Controller */
        .pfnEIC_EXTINT_10_Handler      = (void*) EIC_EXTINT_10_Handler, /* 22 External Interrupt Controller */
        .pfnEIC_EXTINT_11_Handler      = (void*) EIC_EXTINT_11_Handler, /* 23 External Interrupt Controller */
        .pfnEIC_EXTINT_12_Handler      = (void*) EIC_EXTINT_12_Handler, /* 24 External Interrupt Controller */
        .pfnEIC_EXTINT_13_Handler      = (void*) EIC_EXTINT_13_Handler, /* 25 External Interrupt Controller */
        .pfnEIC_EXTINT_14_Handler      = (void*) EIC_EXTINT_14_Handler, /* 26 External Interrupt Controller */
        .pfnEIC_EXTINT_15_Handler      = (void*) EIC_EXTINT_15_Handler, /* 27 External Interrupt Controller */
        .pfnFREQM_Handler              = (void*) FREQM_Handler,  /* 28 Frequency Meter */
        .pfnNVMCTRL_0_Handler          = (void*) NVMCTRL_0_Handler, /* 29 Non-Volatile Memory Controller */
        .pfnNVMCTRL_1_Handler          = (void*) NVMCTRL_1_Handler, /* 30 Non-Volatile Memory Controller */
        .pfnDMAC_0_Handler             = (void*) DMAC_0_Handler, /* 31 Direct Memory Access Controller */
        .pfnDMAC_1_Handler             = (void*) DMAC_1_Handler, /* 32 Direct Memory Access Controller */
        .pfnDMAC_2_Handler             = (void*) DMAC_2_Handler, /* 33 Direct Memory Access Controller */
        .pfnDMAC_3_Handler             = (void*) DMAC_3_Handler, /* 34 Direct Memory Access Controller */
        .pfnDMAC_OTHER_Handler         = (void*) DMAC_OTHER_Handler, /* 35 Direct Memory Access Controller */
        .pfnEVSYS_0_Handler            = (void*) EVSYS_0_Handler, /* 36 Event System Interface */
        .pfnEVSYS_1_Handler            = (void*) EVSYS_1_Handler, /* 37 Event System Interface */
        .pfnEVSYS_2_Handler            = (void*) EVSYS_2_Handler, /* 38 Event System Interface */
        .pfnEVSYS_3_Handler            = (void*) EVSYS_3_Handler, /* 39 Event System Interface */
        .pfnEVSYS_OTHER_Handler        = (void*) EVSYS_OTHER_Handler, /* 40 Event System Interface */
        .pfnPAC_Handler                = (void*) PAC_Handler,    /* 41 Peripheral Access Controller */
        .pvReserved42                  = (void*) (0UL),          /* 42 Reserved */
        .pvReserved43                  = (void*) (0UL),          /* 43 Reserved */
        .pvReserved44                  = (void*) (0UL),          /* 44 Reserved */
        .pfnRAMECC_Handler             = (void*) RAMECC_Handler, /* 45 RAM ECC */
        .pfnSERCOM0_0_Handler          = (void*) SERCOM0_0_Handler, /* 46 Serial Communication Interface */
        .pfnSERCOM0_1_Handler          = (void*) SERCOM0_1_Handler, /* 47 Serial Communication Interface */
        .pfnSERCOM0_2_Handler          = (void*) SERCOM0_2_Handler, /* 48 Serial Communication Interface */
        .pfnSERCOM0_OTHER_Handler      = (void*) SERCOM0_OTHER_Handler, /* 49 Serial Communication Interface */
        .pfnSERCOM1_0_Handler          = (void*) SERCOM1_0_Handler, /* 50 Serial Communication Interface */
        .pfnSERCOM1_1_Handler          = (void*) SERCOM1_1_Handler, /* 51 Serial Communication Interface */
        .pfnSERCOM1_2_Handler          = (void*) SERCOM1_2_Handler, /* 52 Serial Communication Interface */
        .pfnSERCOM1_OTHER_Handler      = (void*) SERCOM1_OTHER_Handler, /* 53 Serial Communication Interface */
        .pfnSERCOM2_0_Handler          = (void*) SERCOM2_0_Handler, /* 54 Serial Communication Interface */
        .pfnSERCOM2_1_Handler          = (void*) SERCOM2_1_Handler, /* 55 Serial Communication Interface */
        .pfnSERCOM2_2_Handler          = (void*) SERCOM2_2_Handler, /* 56 Serial Communication Interface */
        .pfnSERCOM2_OTHER_Handler      = (void*) SERCOM2_OTHER_Handler, /* 57 Serial Communication Interface */
        .pfnSERCOM3_0_Handler          = (void*) SERCOM3_0_Handler, /* 58 Serial Communication Interface */
        .pfnSERCOM3_1_Handler          = (void*) SERCOM3_1_Handler, /* 59 Serial Communication Interface */
        .pfnSERCOM3_2_Handler          = (void*) SERCOM3_2_Handler, /* 60 Serial Communication Interface */
        .pfnSERCOM3_OTHER_Handler      = (void*) SERCOM3_OTHER_Handler, /* 61 Serial Communication Interface */
        .pfnSERCOM4_0_Handler          = (void*) SERCOM4_0_Handler, /* 62 Serial Communication Interface */
        .pfnSERCOM4_1_Handler          = (void*) SERCOM4_1_Handler, /* 63 Serial Communication Interface */
        .pfnSERCOM4_2_Handler          = (void*) SERCOM4_2_Handler, /* 64 Serial Communication Interface */
        .pfnSERCOM4_OTHER_Handler      = (void*) SERCOM4_OTHER_Handler, /* 65 Serial Communication Interface */
        .pfnSERCOM5_0_Handler          = (void*) SERCOM5_0_Handler, /* 66 Serial Communication Interface */
        .pfnSERCOM5_1_Handler          = (void*) SERCOM5_1_Handler, /* 67 Serial Communication Interface */
        .pfnSERCOM5_2_Handler          = (void*) SERCOM5_2_Handler, /* 68 Serial Communication Interface */
        .pfnSERCOM5_OTHER_Handler      = (void*) SERCOM5_OTHER_Handler, /* 69 Serial Communication Interface */
        .pvReserved70                  = (void*) (0UL),          /* 70 Reserved */
        .pvReserved71                  = (void*) (0UL),          /* 71 Reserved */
        .pvReserved72                  = (void*) (0UL),          /* 72 Reserved */
        .pvReserved73                  = (void*) (0UL),          /* 73 Reserved */
        .pvReserved74                  = (void*) (0UL),          /* 74 Reserved */
        .pvReserved75                  = (void*) (0UL),          /* 75 Reserved */
        .pvReserved76                  = (void*) (0UL),          /* 76 Reserved */
        .pvReserved77                  = (void*) (0UL),          /* 77 Reserved */
        .pvReserved78                  = (void*) (0UL),          /* 78 Reserved */
        .pvReserved79                  = (void*) (0UL),          /* 79 Reserved */
        .pfnUSB_OTHER_Handler          = (void*) USB_OTHER_Handler, /* 80 Universal Serial Bus */
        .pfnUSB_SOF_HSOF_Handler       = (void*) USB_SOF_HSOF_Handler, /* 81 Universal Serial Bus */
        .pfnUSB_TRCPT0_Handler         = (void*) USB_TRCPT0_Handler, /* 82 Universal Serial Bus */
        .pfnUSB_TRCPT1_Handler         = (void*) USB_TRCPT1_Handler, /* 83 Universal Serial Bus */
        .pvReserved84                  = (void*) (0UL),          /* 84 Reserved */
        .pfnTCC0_OTHER_Handler         = (void*) TCC0_OTHER_Handler, /* 85 Timer Counter Control */
        .pfnTCC0_MC0_Handler           = (void*) TCC0_MC0_Handler, /* 86 Timer Counter Control */
        .pfnTCC0_MC1_Handler           = (void*) TCC0_MC1_Handler, /* 87 Timer Counter Control */
        .pfnTCC0_MC2_Handler           = (void*) TCC0_MC2_Handler, /* 88 Timer Counter Control */
        .pfnTCC0_MC3_Handler           = (void*) TCC0_MC3_Handler, /* 89 Timer Counter Control */
        .pfnTCC0_MC4_Handler           = (void*) TCC0_MC4_Handler, /* 90 Timer Counter Control */
        .pfnTCC0_MC5_Handler           = (void*) TCC0_MC5_Handler, /* 91 Timer Counter Control */
        .pfnTCC1_OTHER_Handler         = (void*) TCC1_OTHER_Handler, /* 92 Timer Counter Control */
        .pfnTCC1_MC0_Handler           = (void*) TCC1_MC0_Handler, /* 93 Timer Counter Control */
        .pfnTCC1_MC1_Handler           = (void*) TCC1_MC1_Handler, /* 94 Timer Counter Control */
        .pfnTCC1_MC2_Handler           = (void*) TCC1_MC2_Handler, /* 95 Timer Counter Control */
        .pfnTCC1_MC3_Handler           = (void*) TCC1_MC3_Handler, /* 96 Timer Counter Control */
        .pfnTCC2_OTHER_Handler         = (void*) TCC2_OTHER_Handler, /* 97 Timer Counter Control */
        .pfnTCC2_MC0_Handler           = (void*) TCC2_MC0_Handler, /* 98 Timer Counter Control */
        .pfnTCC2_MC1_Handler           = (void*) TCC2_MC1_Handler, /* 99 Timer Counter Control */
        .pfnTCC2_MC2_Handler           = (void*) TCC2_MC2_Handler, /* 100 Timer Counter Control */
        .pvReserved101                 = (void*) (0UL),          /* 101 Reserved */
        .pvReserved102                 = (void*) (0UL),          /* 102 Reserved */
        .pvReserved103                 = (void*) (0UL),          /* 103 Reserved */
        .pvReserved104                 = (void*) (0UL),          /* 104 Reserved */
        .pvReserved105                 = (void*) (0UL),          /* 105 Reserved */
        .pvReserved106                 = (void*) (0UL),          /* 106 Reserved */
        .pfnTC0_Handler                = (void*) TC0_Handler,    /* 107 Basic Timer Counter */
        .pfnTC1_Handler                = (void*) TC1_Handler,    /* 108 Basic Timer Counter */
        .pfnTC2_Handler                = (void*) TC2_Handler,    /* 109 Basic Timer Counter */
        .pfnTC3_Handler                = (void*) TC3_Handler,    /* 110 Basic Timer Counter */
        .pvReserved111                 = (void*) (0UL),          /* 111 Reserved */
        .pvReserved112                 = (void*) (0UL),          /* 112 Reserved */
        .pvReserved113                 = (void*) (0UL),          /* 113 Reserved */
        .pvReserved114                 = (void*) (0UL),          /* 114 Reserved */
        .pfnPDEC_OTHER_Handler         = (void*) PDEC_OTHER_Handler, /* 115 Quadrature Decodeur */
        .pfnPDEC_MC0_Handler           = (void*) PDEC_MC0_Handler, /* 116 Quadrature Decodeur */
        .pfnPDEC_MC1_Handler           = (void*) PDEC_MC1_Handler, /* 117 Quadrature Decodeur */
        .pfnADC0_OTHER_Handler         = (void*) ADC0_OTHER_Handler, /* 118 Analog Digital Converter */
        .pfnADC0_RESRDY_Handler        = (void*) ADC0_RESRDY_Handler, /* 119 Analog Digital Converter */
        .pfnADC1_OTHER_Handler         = (void*) ADC1_OTHER_Handler, /* 120 Analog Digital Converter */
        .pfnADC1_RESRDY_Handler        = (void*) ADC1_RESRDY_Handler, /* 121 Analog Digital Converter */
        .pfnAC_Handler                 = (void*) AC_Handler,     /* 122 Analog Comparators */
        .pfnDAC_OTHER_Handler          = (void*) DAC_OTHER_Handler, /* 123 Digital-to-Analog Converter */
        .pfnDAC_EMPTY_0_Handler        = (void*) DAC_EMPTY_0_Handler, /* 124 Digital-to-Analog Converter */
        .pfnDAC_EMPTY_1_Handler        = (void*) DAC_EMPTY_1_Handler, /* 125 Digital-to-Analog Converter */
        .pfnDAC_RESRDY_0_Handler       = (void*) DAC_RESRDY_0_Handler, /* 126 Digital-to-Analog Converter */
        .pfnDAC_RESRDY_1_Handler       = (void*) DAC_RESRDY_1_Handler, /* 127 Digital-to-Analog Converter */
        .pvReserved128                 = (void*) (0UL),          /* 128 Reserved */
        .pfnPCC_Handler                = (void*) PCC_Handler,    /* 129 Parallel Capture Controller */
        .pfnAES_Handler                = (void*) AES_Handler,    /* 130 Advanced Encryption Standard */
        .pfnTRNG_Handler               = (void*) TRNG_Handler,   /* 131 True Random Generator */
        .pfnICM_Handler                = (void*) ICM_Handler,    /* 132 Integrity Check Monitor */
        .pfnPUKCC_Handler              = (void*) PUKCC_Handler,  /* 133 PUblic-Key Cryptography Controller */
        .pfnQSPI_Handler               = (void*) QSPI_Handler,   /* 134 Quad SPI interface */
        .pfnSDHC0_Handler              = (void*) SDHC0_Handler   /* 135 SD/MMC Host Controller */
};

/**
 * \brief This is the code that gets called on processor reset.
 * To initialize the device, and call the main() routine.
 */
void Reset_Handler(void)
{
        uint32_t *pSrc, *pDest;

        /* Initialize the relocate segment */
        pSrc = &_etext;
        pDest = &_srelocate;

        if (pSrc != pDest) {
                for (; pDest < &_erelocate;) {
                        *pDest++ = *pSrc++;
                }
        }

        /* Clear the zero segment */
        for (pDest = &_szero; pDest < &_ezero;) {
                *pDest++ = 0;
        }

        /* Set the vector table base address */
        pSrc = (uint32_t *) & _sfixed;
        SCB->VTOR = ((uint32_t) pSrc & SCB_VTOR_TBLOFF_Msk);

        /* Initialize the C library */
        __libc_init_array();

        /* Branch to main function */
        main();

        /* Infinite loop */
        while (1);
}

/**
 * \brief Default interrupt handler for unused IRQs.
 */
void Dummy_Handler(void)
{
        while (1) {
        }
}
