mirror of
https://gitee.com/Lyon1998/pikapython.git
synced 2025-01-15 17:02:53 +08:00
193 lines
8.0 KiB
C
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
|
|
|