chen
2024-11-08 cc432b761c884a0bd8e9d83db0a4e26109fc08b1
keil/include/devices/MK800X/Source/startup_MK800X.c
对比新文件
@@ -0,0 +1,271 @@
/******************************************************************************
 * @file     startup_MK8000.c
 * @brief    CMSIS-Core(M) Device Startup File for MK8000
 * @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 "MK800X.h"
/*----------------------------------------------------------------------------
  External References
 *----------------------------------------------------------------------------*/
extern uint32_t __INITIAL_SP;
#ifndef STD_LIBC
extern void update_libc_rom_table(void);
#endif
#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
extern __NO_RETURN void __PROGRAM_START(void);
#endif
const struct BOOT_DESC_T mk_boot_desc = {
    .header_marker = BOOT_HEADER_MARKER,
    .boot_flag = APP_BOOT_FLAG,
#if defined(XIP_EN)
    .boot_addr = FLASH_BASE,
#else
    .boot_addr = SRAM_BASE,
#endif
    .cpc = APP_CPC,
    .image_len = (uint32_t)&mk_boot_desc,
    .image_crc = 0,
    .image_ver = APP_VERSION,
    .code_crc = 0,
#if SECURE_EN
    .image_sig = {0},
#endif
    .isp_unprotect_pw = {0},
    .isp_backdoor_pw = {0},
    .copy_len = (uint32_t)&mk_build_inf + sizeof(mk_build_inf),
    .crc = 0,
};
#if defined(__GNUC__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdate-time"
#endif
const char mk_build_inf[80] =
    "\n"
    "Vendor\t: "
    "MKSEMI"
    "\n"
    "Chip\t: "
    "MK8000"
    "\n"
    "Date\t: " __DATE__
    "\n"
    "Version\t: " FIRMWARE_VERSION "\0";
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif
/*----------------------------------------------------------------------------
  Internal References
 *----------------------------------------------------------------------------*/
__NO_RETURN void Reset_Handler(void);
__NO_RETURN void Default_Handler(void);
/*----------------------------------------------------------------------------
  Exception / Interrupt Handler
 *----------------------------------------------------------------------------*/
/* Exceptions */
void NMI_Handler(void) __attribute__((weak, alias("Default_Handler")));
void HardFault_Handler(void) __attribute__((weak, alias("Default_Handler")));
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 BOD_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void ACMP0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void ACMP1_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void DMA_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void SLEEP_TIMER_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void MAC_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void PHY_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void GPIO_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void AES_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void ADC_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void TRNG_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void FLASH_CTRL_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void LSP_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void WDT_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void RTC_ALARM_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void RTC_TICK_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void PWM_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void TIMER0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void TIMER1_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void TIMER2_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void TIMER3_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void I2C0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void SPI0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void SPI1_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void UART0_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void UART1_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void CALIB_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void RCO32K_CAL_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void WAKEUP_IRQHandler(void) __attribute__((weak, alias("Default_Handler")));
void PHY_TIMER_IRQHandler(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];
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 */
    (VECTOR_TABLE_Type)((uint32_t)&mk_boot_desc), /*     Pointer of boot descriptor */
    (VECTOR_TABLE_Type)((uint32_t)&mk_build_inf), /*     Pointer of build information */
    SVC_Handler,                                  /*  -5 SVCall Handler */
    0,                                            /*     Reserved */
    0,                                            /*     Reserved */
    PendSV_Handler,                               /*  -2 PendSV Handler */
    SysTick_Handler,                              /*  -1 SysTick Handler */
    /* Interrupts */
    BOD_IRQHandler,         /*   0 BOD */
    ACMP0_IRQHandler,       /*   1 ACMP0 */
    ACMP1_IRQHandler,       /*   2 ACMP1 */
    SLEEP_TIMER_IRQHandler, /*   3 SLEEP_TIMER */
    MAC_IRQHandler,         /*   4 MAC */
    PHY_IRQHandler,         /*   5 PHY */
    DMA_IRQHandler,         /*   6 DMA */
    GPIO_IRQHandler,        /*   7 GPIO */
    AES_IRQHandler,         /*   8 AES */
    ADC_IRQHandler,         /*   9 ADC */
    TRNG_IRQHandler,        /*  10 TRNG */
    FLASH_CTRL_IRQHandler,  /*  11 FLASH_CTRL */
    LSP_IRQHandler,         /*  12 LSP */
    WDT_IRQHandler,         /*  13 WDT */
    RTC_ALARM_IRQHandler,   /*  14 RTC ALARM */
    RTC_TICK_IRQHandler,    /*  15 RTC TICK */
    PWM_IRQHandler,         /*  16 PWM */
    TIMER0_IRQHandler,      /*  17 TIMER0 */
    TIMER1_IRQHandler,      /*  18 TIMER1 */
    TIMER2_IRQHandler,      /*  19 TIMER2 */
    TIMER3_IRQHandler,      /*  20 TIMER3 */
    I2C0_IRQHandler,        /*  21 I2C0 */
    SPI0_IRQHandler,        /*  22 SPI0 */
    SPI1_IRQHandler,        /*  23 SPI1 */
    UART0_IRQHandler,       /*  24 UART0 */
    UART1_IRQHandler,       /*  25 UART1 */
    CALIB_IRQHandler,       /*  26 CALIBRATION */
    RCO32K_CAL_IRQHandler,  /*  27 RCO32K CAL */
    WAKEUP_IRQHandler,      /*  28 WAKEUP */
    PHY_TIMER_IRQHandler,   /*  29 PHY TIMER */
    /* Interrupts 30..31 are left out */
};
#if defined(__GNUC__)
#pragma GCC diagnostic pop
#endif
/*----------------------------------------------------------------------------
  Reset Handler called on controller reset
 *----------------------------------------------------------------------------*/
#if defined(__CC_ARM)
/* ARM RVDS or Keil MDK */
__asm void start_main_asm(void)
{
    IMPORT __PROGRAM_START;
    LDR R0, = __PROGRAM_START;
    BX R0;
}
#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
/* ARM CLANG */
__NO_RETURN void start_main_asm(void) __attribute__((naked));
void start_main_asm(void)
{
    __ASM volatile(
        "ldr r0, = __main\n"
        "bx r0\n");
}
#elif defined(__ICCARM__)
/* IAR */
__NO_RETURN void start_main_asm(void) __attribute__((naked));
extern void __iar_program_start(void);
void start_main_asm(void)
{
    __ASM volatile(
        "ldr r0, = __iar_program_start\n"
        "bx r0\n");
    while (1)
    {
    }
}
#else
/* GCC */
__NO_RETURN void start_main_asm(void) __attribute__((naked));
__NO_RETURN void __cmsis_start_(void)
{
    __cmsis_start();
}
void start_main_asm(void)
{
    __ASM volatile(
        "ldr r0, = __cmsis_start_\n"
        "bx r0\n");
}
#endif
__NO_RETURN void Reset_Handler(void)
{
#if defined(XIP_EN)
    // Remap FLASH
    SYSCON->SYS_CTRL &= ~(SYSCON_SYS_CTRL_REMAP_MSK);
    SYSCON->SYS_CTRL |= SYSCON_SYS_CTRL_REMAP(0x02);
#else
    // Remap SRAM
    SYSCON->SYS_CTRL &= ~(SYSCON_SYS_CTRL_REMAP_MSK);
    SYSCON->SYS_CTRL |= SYSCON_SYS_CTRL_REMAP(0x01);
#endif
#ifndef STD_LIBC
    update_libc_rom_table();
#endif
    SystemInit();     /* CMSIS System Initialization */
    start_main_asm(); /* Enter PreMain (C library entry point) */
}
/*----------------------------------------------------------------------------
  Default Handler for Exceptions / Interrupts
 *----------------------------------------------------------------------------*/
__NO_RETURN void Default_Handler(void)
{
    while (1)
    {
    }
}