You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

267 lines
16 KiB
C

/**
* \file
*
* \brief GCC startup file for ATSAME70N20
*
* 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 "same70n20.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-M7 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 SUPC_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void RSTC_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void RTC_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void RTT_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void WDT_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void PMC_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void EFC_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void UART0_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void UART1_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void PIOA_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void PIOB_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void USART0_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void USART1_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void USART2_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void PIOD_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void HSMCI_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TWIHS0_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TWIHS1_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SPI0_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void SSC_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 TC4_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TC5_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void AFEC0_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void DACC_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void PWM0_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void ICM_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void ACC_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void USBHS_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void MCAN0_INT0_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void MCAN0_INT1_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void MCAN1_INT0_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void MCAN1_INT1_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void GMAC_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void AFEC1_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TWIHS2_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void QSPI_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void UART2_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void UART3_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void UART4_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TC6_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TC7_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TC8_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TC9_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TC10_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void TC11_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 XDMAC_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void ISI_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void PWM1_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void FPU_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void RSWDT_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void GMAC_Q1_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void GMAC_Q2_Handler ( void ) __attribute__ ((weak, alias("Dummy_Handler")));
void IXC_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 */
.pfnSUPC_Handler = (void*) SUPC_Handler, /* 0 Supply Controller */
.pfnRSTC_Handler = (void*) RSTC_Handler, /* 1 Reset Controller */
.pfnRTC_Handler = (void*) RTC_Handler, /* 2 Real-time Clock */
.pfnRTT_Handler = (void*) RTT_Handler, /* 3 Real-time Timer */
.pfnWDT_Handler = (void*) WDT_Handler, /* 4 Watchdog Timer */
.pfnPMC_Handler = (void*) PMC_Handler, /* 5 Power Management Controller */
.pfnEFC_Handler = (void*) EFC_Handler, /* 6 Embedded Flash Controller */
.pfnUART0_Handler = (void*) UART0_Handler, /* 7 Universal Asynchronous Receiver Transmitter */
.pfnUART1_Handler = (void*) UART1_Handler, /* 8 Universal Asynchronous Receiver Transmitter */
.pvReserved9 = (void*) (0UL), /* 9 Reserved */
.pfnPIOA_Handler = (void*) PIOA_Handler, /* 10 Parallel Input/Output Controller */
.pfnPIOB_Handler = (void*) PIOB_Handler, /* 11 Parallel Input/Output Controller */
.pvReserved12 = (void*) (0UL), /* 12 Reserved */
.pfnUSART0_Handler = (void*) USART0_Handler, /* 13 Universal Synchronous Asynchronous Receiver Transmitter */
.pfnUSART1_Handler = (void*) USART1_Handler, /* 14 Universal Synchronous Asynchronous Receiver Transmitter */
.pfnUSART2_Handler = (void*) USART2_Handler, /* 15 Universal Synchronous Asynchronous Receiver Transmitter */
.pfnPIOD_Handler = (void*) PIOD_Handler, /* 16 Parallel Input/Output Controller */
.pvReserved17 = (void*) (0UL), /* 17 Reserved */
.pfnHSMCI_Handler = (void*) HSMCI_Handler, /* 18 High Speed MultiMedia Card Interface */
.pfnTWIHS0_Handler = (void*) TWIHS0_Handler, /* 19 Two-wire Interface High Speed */
.pfnTWIHS1_Handler = (void*) TWIHS1_Handler, /* 20 Two-wire Interface High Speed */
.pfnSPI0_Handler = (void*) SPI0_Handler, /* 21 Serial Peripheral Interface */
.pfnSSC_Handler = (void*) SSC_Handler, /* 22 Synchronous Serial Controller */
.pfnTC0_Handler = (void*) TC0_Handler, /* 23 Timer Counter */
.pfnTC1_Handler = (void*) TC1_Handler, /* 24 Timer Counter */
.pfnTC2_Handler = (void*) TC2_Handler, /* 25 Timer Counter */
.pfnTC3_Handler = (void*) TC3_Handler, /* 26 Timer Counter */
.pfnTC4_Handler = (void*) TC4_Handler, /* 27 Timer Counter */
.pfnTC5_Handler = (void*) TC5_Handler, /* 28 Timer Counter */
.pfnAFEC0_Handler = (void*) AFEC0_Handler, /* 29 Analog Front-End Controller */
.pfnDACC_Handler = (void*) DACC_Handler, /* 30 Digital-to-Analog Converter Controller */
.pfnPWM0_Handler = (void*) PWM0_Handler, /* 31 Pulse Width Modulation Controller */
.pfnICM_Handler = (void*) ICM_Handler, /* 32 Integrity Check Monitor */
.pfnACC_Handler = (void*) ACC_Handler, /* 33 Analog Comparator Controller */
.pfnUSBHS_Handler = (void*) USBHS_Handler, /* 34 USB High-Speed Interface */
.pfnMCAN0_INT0_Handler = (void*) MCAN0_INT0_Handler, /* 35 Controller Area Network */
.pfnMCAN0_INT1_Handler = (void*) MCAN0_INT1_Handler, /* 36 Controller Area Network */
.pfnMCAN1_INT0_Handler = (void*) MCAN1_INT0_Handler, /* 37 Controller Area Network */
.pfnMCAN1_INT1_Handler = (void*) MCAN1_INT1_Handler, /* 38 Controller Area Network */
.pfnGMAC_Handler = (void*) GMAC_Handler, /* 39 Gigabit Ethernet MAC */
.pfnAFEC1_Handler = (void*) AFEC1_Handler, /* 40 Analog Front-End Controller */
.pfnTWIHS2_Handler = (void*) TWIHS2_Handler, /* 41 Two-wire Interface High Speed */
.pvReserved42 = (void*) (0UL), /* 42 Reserved */
.pfnQSPI_Handler = (void*) QSPI_Handler, /* 43 Quad Serial Peripheral Interface */
.pfnUART2_Handler = (void*) UART2_Handler, /* 44 Universal Asynchronous Receiver Transmitter */
.pfnUART3_Handler = (void*) UART3_Handler, /* 45 Universal Asynchronous Receiver Transmitter */
.pfnUART4_Handler = (void*) UART4_Handler, /* 46 Universal Asynchronous Receiver Transmitter */
.pfnTC6_Handler = (void*) TC6_Handler, /* 47 Timer Counter */
.pfnTC7_Handler = (void*) TC7_Handler, /* 48 Timer Counter */
.pfnTC8_Handler = (void*) TC8_Handler, /* 49 Timer Counter */
.pfnTC9_Handler = (void*) TC9_Handler, /* 50 Timer Counter */
.pfnTC10_Handler = (void*) TC10_Handler, /* 51 Timer Counter */
.pfnTC11_Handler = (void*) TC11_Handler, /* 52 Timer Counter */
.pvReserved53 = (void*) (0UL), /* 53 Reserved */
.pvReserved54 = (void*) (0UL), /* 54 Reserved */
.pvReserved55 = (void*) (0UL), /* 55 Reserved */
.pfnAES_Handler = (void*) AES_Handler, /* 56 Advanced Encryption Standard */
.pfnTRNG_Handler = (void*) TRNG_Handler, /* 57 True Random Number Generator */
.pfnXDMAC_Handler = (void*) XDMAC_Handler, /* 58 Extensible DMA Controller */
.pfnISI_Handler = (void*) ISI_Handler, /* 59 Image Sensor Interface */
.pfnPWM1_Handler = (void*) PWM1_Handler, /* 60 Pulse Width Modulation Controller */
.pfnFPU_Handler = (void*) FPU_Handler, /* 61 Floating Point Unit */
.pvReserved62 = (void*) (0UL), /* 62 Reserved */
.pfnRSWDT_Handler = (void*) RSWDT_Handler, /* 63 Reinforced Safety Watchdog Timer */
.pvReserved64 = (void*) (0UL), /* 64 Reserved */
.pvReserved65 = (void*) (0UL), /* 65 Reserved */
.pfnGMAC_Q1_Handler = (void*) GMAC_Q1_Handler, /* 66 Gigabit Ethernet MAC */
.pfnGMAC_Q2_Handler = (void*) GMAC_Q2_Handler, /* 67 Gigabit Ethernet MAC */
.pfnIXC_Handler = (void*) IXC_Handler /* 68 Floating Point Unit */
};
/**
* \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) {
}
}