Newer
Older
mbed-os / targets / TARGET_Cypress / TARGET_PSOC6 / mtb-pdl-cat1 / devices / COMPONENT_CAT1A / templates / COMPONENT_MTB / COMPONENT_CM0P / TOOLCHAIN_A_Clang / startup_psoc6_01_cm0plus.S
@Dustin Crossman Dustin Crossman on 6 Jul 2021 10 KB Add proper PDL (still version 2.2.0.7891).
/**************************************************************************//**
 * @file     startup_psoc6_01_cm0plus.S
 * @brief    CMSIS Core Device Startup File for
 *           ARMCM0plus Device Series
 * @version  V5.00
 * @date     02. March 2016
 ******************************************************************************/
/*
 * Copyright (c) 2009-2016 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.
 */

    /* Address of the NMI handler */
    #define CY_NMI_HANLDER_ADDR         0x0000000D

    /* The CPU VTOR register */
    #define CY_CPU_VTOR_ADDR            0xE000ED08

    .syntax    unified

    .section __STACK, __stack
    .align    3
#ifdef __STACK_SIZE
    .equ    Stack_Size, __STACK_SIZE
#else
    .equ    Stack_Size, 0x00001000
#endif
    .globl    __StackTop
    .globl    __StackLimit

__StackLimit:
    .space    Stack_Size
    .equ    __StackTop, . - Stack_Size

    .section __HEAP, __heap
    .align    3
#ifdef __HEAP_SIZE
    .equ    Heap_Size, __HEAP_SIZE
#else
    .equ    Heap_Size, 0x00000400
#endif
    .globl    __HeapBase
__HeapBase:
    .if    Heap_Size
    .space    Heap_Size
    .endif

    .section __VECT, ___Vectors
    .align 2
    .globl    ___Vectors
___Vectors:
    .long    __StackTop            /* Top of Stack */
    .long    Reset_Handler         /* Reset Handler */
    .long    CY_NMI_HANLDER_ADDR   /* NMI Handler */
    .long    HardFault_Handler     /* Hard Fault Handler */
    .long    0                     /* Reserved */
    .long    0                     /* Reserved */
    .long    0                     /* Reserved */
    .long    0                     /* Reserved */
    .long    0                     /* Reserved */
    .long    0                     /* Reserved */
    .long    0                     /* Reserved */
    .long    SVC_Handler           /* SVCall Handler */
    .long    0                     /* Reserved */
    .long    0                     /* Reserved */
    .long    PendSV_Handler        /* PendSV Handler */
    .long    SysTick_Handler       /* SysTick Handler */

     /* External interrupts                             Description */
    .long    NvicMux0_IRQHandler                     /* CM0+ NVIC Mux input 0 */
    .long    NvicMux1_IRQHandler                     /* CM0+ NVIC Mux input 1 */
    .long    NvicMux2_IRQHandler                     /* CM0+ NVIC Mux input 2 */
    .long    NvicMux3_IRQHandler                     /* CM0+ NVIC Mux input 3 */
    .long    NvicMux4_IRQHandler                     /* CM0+ NVIC Mux input 4 */
    .long    NvicMux5_IRQHandler                     /* CM0+ NVIC Mux input 5 */
    .long    NvicMux6_IRQHandler                     /* CM0+ NVIC Mux input 6 */
    .long    NvicMux7_IRQHandler                     /* CM0+ NVIC Mux input 7 */
    .long    NvicMux8_IRQHandler                     /* CM0+ NVIC Mux input 8 */
    .long    NvicMux9_IRQHandler                     /* CM0+ NVIC Mux input 9 */
    .long    NvicMux10_IRQHandler                    /* CM0+ NVIC Mux input 10 */
    .long    NvicMux11_IRQHandler                    /* CM0+ NVIC Mux input 11 */
    .long    NvicMux12_IRQHandler                    /* CM0+ NVIC Mux input 12 */
    .long    NvicMux13_IRQHandler                    /* CM0+ NVIC Mux input 13 */
    .long    NvicMux14_IRQHandler                    /* CM0+ NVIC Mux input 14 */
    .long    NvicMux15_IRQHandler                    /* CM0+ NVIC Mux input 15 */
    .long    NvicMux16_IRQHandler                    /* CM0+ NVIC Mux input 16 */
    .long    NvicMux17_IRQHandler                    /* CM0+ NVIC Mux input 17 */
    .long    NvicMux18_IRQHandler                    /* CM0+ NVIC Mux input 18 */
    .long    NvicMux19_IRQHandler                    /* CM0+ NVIC Mux input 19 */
    .long    NvicMux20_IRQHandler                    /* CM0+ NVIC Mux input 20 */
    .long    NvicMux21_IRQHandler                    /* CM0+ NVIC Mux input 21 */
    .long    NvicMux22_IRQHandler                    /* CM0+ NVIC Mux input 22 */
    .long    NvicMux23_IRQHandler                    /* CM0+ NVIC Mux input 23 */
    .long    NvicMux24_IRQHandler                    /* CM0+ NVIC Mux input 24 */
    .long    NvicMux25_IRQHandler                    /* CM0+ NVIC Mux input 25 */
    .long    NvicMux26_IRQHandler                    /* CM0+ NVIC Mux input 26 */
    .long    NvicMux27_IRQHandler                    /* CM0+ NVIC Mux input 27 */
    .long    NvicMux28_IRQHandler                    /* CM0+ NVIC Mux input 28 */
    .long    NvicMux29_IRQHandler                    /* CM0+ NVIC Mux input 29 */
    .long    NvicMux30_IRQHandler                    /* CM0+ NVIC Mux input 30 */
    .long    NvicMux31_IRQHandler                    /* CM0+ NVIC Mux input 31 */

    .equ    __VectorsSize, . - ___Vectors

    .section __RAMVECTORS, ___ramVectors
    .align 2
    .globl ___ramVectors

___ramVectors:
    .space  __VectorsSize


    .text
    .thumb_func
    .align 2
    /* Reset handler */
    .globl Reset_Handler

Reset_Handler:
    bl Cy_OnResetUser
    cpsid i

/*  Single section scheme.
 *
 *  The ranges of copy from/to are specified by following symbols
 *    __etext: LMA of start of the section to copy from. Usually end of text
 *    __data_start__: VMA of start of the section to copy to
 *    __data_end__: VMA of end of the section to copy to
 *
 *  All addresses must be aligned to 4 bytes boundary.
 */
    ldr    r0, =___ramVectors
    ldr    r1, =___Vectors
    ldr    r2, =__VectorsSize
    bl     _memcpy

    ldr    r0, =segment$start$__DATA
    ldr    r1, =segment$end$__TEXT
    ldr    r2, =section$start$__DATA$__zerofill
    sub    r2, r0
    bl     _memcpy

    ldr    r0, =section$start$__DATA$__zerofill
    eor    r1, r1
    ldr    r2, =section$end$__DATA$__zerofill
    sub    r2, r0
    bl     _memset

    /* Update Vector Table Offset Register. */
    ldr r0, =___ramVectors
    ldr r1, =CY_CPU_VTOR_ADDR
    str r0, [r1]
    dsb 0xF

    bl _HeapInit
#ifndef __NO_SYSTEM_INIT
    bl  _SystemInit
#endif

    bl  _main

    /* Should never get here */
    b   .

    .pool

    .text
    .thumb
    .thumb_func
    .align 2

    /* Device startup customization */
    .weak_definition   Cy_OnResetUser
    .global Cy_OnResetUser, Cy_OnResetUser
Cy_OnResetUser:
    bx lr

    .text
    .align    1
    .thumb_func
    .weak_reference    Default_Handler

Default_Handler:
    b    .

    .text
    .thumb_func
    .align  2
    .weak_definition    Cy_SysLib_FaultHandler

Cy_SysLib_FaultHandler:
    b    .

    .text
    .thumb_func
    .align  2

Fault_Handler:
    /* Storing LR content for Creator call stack trace */
    push {LR}
    movs r0, #4
    mov r1, LR
    tst r0, r1
    beq .L_MSP
    mrs r0, PSP
    b .L_API_call
.L_MSP:
    mrs r0, MSP
.L_API_call:
    /* Compensation of stack pointer address due to pushing 4 bytes of LR */
    adds r0, r0, #4
    bl Cy_SysLib_FaultHandler
    b   .

.macro    def_fault_Handler    fault_handler_name
    .weak_definition    \fault_handler_name
    .set    \fault_handler_name, Fault_Handler
    .endm

/*    Macro to define default handlers. Default handler
 *    will be weak symbol and just dead loops. They can be
 *    overwritten by other handlers */
    .macro    def_irq_handler    handler_name
    .weak_definition    \handler_name
    .set    \handler_name, Default_Handler
    .endm

    def_irq_handler    NMI_Handler

    def_fault_Handler  HardFault_Handler

    def_irq_handler    SVC_Handler
    def_irq_handler    PendSV_Handler
    def_irq_handler    SysTick_Handler

    def_irq_handler  NvicMux0_IRQHandler                     /* CM0+ NVIC Mux input 0 */
    def_irq_handler  NvicMux1_IRQHandler                     /* CM0+ NVIC Mux input 1 */
    def_irq_handler  NvicMux2_IRQHandler                     /* CM0+ NVIC Mux input 2 */
    def_irq_handler  NvicMux3_IRQHandler                     /* CM0+ NVIC Mux input 3 */
    def_irq_handler  NvicMux4_IRQHandler                     /* CM0+ NVIC Mux input 4 */
    def_irq_handler  NvicMux5_IRQHandler                     /* CM0+ NVIC Mux input 5 */
    def_irq_handler  NvicMux6_IRQHandler                     /* CM0+ NVIC Mux input 6 */
    def_irq_handler  NvicMux7_IRQHandler                     /* CM0+ NVIC Mux input 7 */
    def_irq_handler  NvicMux8_IRQHandler                     /* CM0+ NVIC Mux input 8 */
    def_irq_handler  NvicMux9_IRQHandler                     /* CM0+ NVIC Mux input 9 */
    def_irq_handler  NvicMux10_IRQHandler                    /* CM0+ NVIC Mux input 10 */
    def_irq_handler  NvicMux11_IRQHandler                    /* CM0+ NVIC Mux input 11 */
    def_irq_handler  NvicMux12_IRQHandler                    /* CM0+ NVIC Mux input 12 */
    def_irq_handler  NvicMux13_IRQHandler                    /* CM0+ NVIC Mux input 13 */
    def_irq_handler  NvicMux14_IRQHandler                    /* CM0+ NVIC Mux input 14 */
    def_irq_handler  NvicMux15_IRQHandler                    /* CM0+ NVIC Mux input 15 */
    def_irq_handler  NvicMux16_IRQHandler                    /* CM0+ NVIC Mux input 16 */
    def_irq_handler  NvicMux17_IRQHandler                    /* CM0+ NVIC Mux input 17 */
    def_irq_handler  NvicMux18_IRQHandler                    /* CM0+ NVIC Mux input 18 */
    def_irq_handler  NvicMux19_IRQHandler                    /* CM0+ NVIC Mux input 19 */
    def_irq_handler  NvicMux20_IRQHandler                    /* CM0+ NVIC Mux input 20 */
    def_irq_handler  NvicMux21_IRQHandler                    /* CM0+ NVIC Mux input 21 */
    def_irq_handler  NvicMux22_IRQHandler                    /* CM0+ NVIC Mux input 22 */
    def_irq_handler  NvicMux23_IRQHandler                    /* CM0+ NVIC Mux input 23 */
    def_irq_handler  NvicMux24_IRQHandler                    /* CM0+ NVIC Mux input 24 */
    def_irq_handler  NvicMux25_IRQHandler                    /* CM0+ NVIC Mux input 25 */
    def_irq_handler  NvicMux26_IRQHandler                    /* CM0+ NVIC Mux input 26 */
    def_irq_handler  NvicMux27_IRQHandler                    /* CM0+ NVIC Mux input 27 */
    def_irq_handler  NvicMux28_IRQHandler                    /* CM0+ NVIC Mux input 28 */
    def_irq_handler  NvicMux29_IRQHandler                    /* CM0+ NVIC Mux input 29 */
    def_irq_handler  NvicMux30_IRQHandler                    /* CM0+ NVIC Mux input 30 */
    def_irq_handler  NvicMux31_IRQHandler                    /* CM0+ NVIC Mux input 31 */

    .end


/* [] END OF FILE */