pikapython/bsp/pico/MDK/mdk/startup_RP2040.c
2021-12-14 11:03:33 +08:00

193 lines
8.0 KiB
C

/******************************************************************************
* @file startup_ARMCM0plus.c
* @brief CMSIS-Core(M) Device Startup File for a Cortex-M0+ Device
* @version V2.0.3
* @date 31. March 2020
******************************************************************************/
/*
* Copyright (c) 2009-2020 Arm Limited. All rights reserved.
*
* 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
*
* 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.
*/
#include "RP2040.h"
/*----------------------------------------------------------------------------
External References
*----------------------------------------------------------------------------*/
extern uint32_t __INITIAL_SP;
extern __NO_RETURN void __PROGRAM_START(void);
/*----------------------------------------------------------------------------
Internal References
*----------------------------------------------------------------------------*/
__NO_RETURN void Reset_Handler (void);
void Default_Handler(void);
/*----------------------------------------------------------------------------
Exception / Interrupt Handler
*----------------------------------------------------------------------------*/
/* Exceptions */
void NMI_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void HardFault_Handler (void) __attribute__ ((weak));
void SVC_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void PendSV_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void SysTick_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void TIMER_IRQ_0_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void TIMER_IRQ_1_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void TIMER_IRQ_2_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void TIMER_IRQ_3_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void PWM_IRQ_WRAP_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void USBCTRL_IRQ_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void XIP_IRQ_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void PIO0_IRQ_0_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void PIO0_IRQ_1_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void PIO1_IRQ_0_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void PIO1_IRQ_1_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void DMA_IRQ_0_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void DMA_IRQ_1_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void IO_IRQ_BANK0_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void IO_IRQ_QSPI_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void SIO_IRQ_PROC0_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void SIO_IRQ_PROC1_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void CLOCKS_IRQ_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void SPI0_IRQ_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void SPI1_IRQ_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void UART0_IRQ_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void UART1_IRQ_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void ADC_IRQ_FIFO_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void I2C0_IRQ_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void I2C1_IRQ_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
void RTC_IRQ_Handler (void) __attribute__ ((weak, alias("Default_Handler")));
/*----------------------------------------------------------------------------
Exception / Interrupt Vector table
*----------------------------------------------------------------------------*/
#if defined ( __GNUC__ )
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpedantic"
#endif
extern const VECTOR_TABLE_Type __VECTOR_TABLE[48];
__attribute__((aligned(256)))
const VECTOR_TABLE_Type __VECTOR_TABLE[48] __VECTOR_TABLE_ATTRIBUTE = {
(VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */
Reset_Handler, /* Reset Handler */
NMI_Handler, /* -14 NMI Handler */
HardFault_Handler, /* -13 Hard Fault Handler */
0, /* Reserved */
0, /* Reserved */
0, /* Reserved */
0, /* Reserved */
0, /* Reserved */
0, /* Reserved */
0, /* Reserved */
SVC_Handler, /* -5 SVCall Handler */
0, /* Reserved */
0, /* Reserved */
PendSV_Handler, /* -2 PendSV Handler */
SysTick_Handler, /* -1 SysTick Handler */
/* Interrupts */
TIMER_IRQ_0_Handler,
TIMER_IRQ_1_Handler,
TIMER_IRQ_2_Handler,
TIMER_IRQ_3_Handler,
PWM_IRQ_WRAP_Handler,
USBCTRL_IRQ_Handler,
XIP_IRQ_Handler,
PIO0_IRQ_0_Handler,
PIO0_IRQ_1_Handler,
PIO1_IRQ_0_Handler,
PIO1_IRQ_1_Handler,
DMA_IRQ_0_Handler,
DMA_IRQ_1_Handler,
IO_IRQ_BANK0_Handler,
IO_IRQ_QSPI_Handler,
SIO_IRQ_PROC0_Handler,
SIO_IRQ_PROC1_Handler,
CLOCKS_IRQ_Handler,
SPI0_IRQ_Handler,
SPI1_IRQ_Handler,
UART0_IRQ_Handler,
UART1_IRQ_Handler,
ADC_IRQ_FIFO_Handler,
I2C0_IRQ_Handler,
I2C1_IRQ_Handler,
RTC_IRQ_Handler,
Default_Handler,
Default_Handler,
Default_Handler,
Default_Handler,
Default_Handler,
Default_Handler,
/* Interrupts 10..31 are left out */
};
#if defined ( __GNUC__ )
#pragma GCC diagnostic pop
#endif
/*----------------------------------------------------------------------------
Reset Handler called on controller reset
*----------------------------------------------------------------------------*/
__attribute__((constructor(255), used))
void __pico_entry(void)
{
extern void runtime_init(void);
runtime_init();
}
__NO_RETURN void Reset_Handler(void)
{
SCB->VTOR = (uintptr_t)__VECTOR_TABLE;
__set_MSP((uintptr_t)(&__INITIAL_SP));
//SystemInit(); /* CMSIS System Initialization */
__PROGRAM_START(); /* Enter PreMain (C library entry point) */
}
#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wmissing-noreturn"
#endif
/*----------------------------------------------------------------------------
Hard Fault Handler
*----------------------------------------------------------------------------*/
void HardFault_Handler(void)
{
while(1);
}
/*----------------------------------------------------------------------------
Default Handler for Exceptions / Interrupts
*----------------------------------------------------------------------------*/
void Default_Handler(void)
{
while(1);
}
#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
#pragma clang diagnostic pop
#endif