openblt/Target/Demo/ARMCM0_S32K14_S32K118EVB_IAR/Boot/startup_S32K118.s

288 lines
10 KiB
ArmAsm
Raw Normal View History

; ---------------------------------------------------------------------------------------
; @file: startup_S32K118.s
; @purpose: IAR Startup File
; S32K118
; @version: 1.0
; @date: 2018-1-22
; @build: b170107
; ---------------------------------------------------------------------------------------
;
; Copyright 2018 NXP
; All rights reserved.
;
; THIS SOFTWARE IS PROVIDED BY NXP "AS IS" AND ANY EXPRESSED OR
; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
; OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
; IN NO EVENT SHALL NXP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
; INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
; HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
; STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
; IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
; THE POSSIBILITY OF SUCH DAMAGE.
;
; The modules in this file are included in the libraries, and may be replaced
; by any user-defined modules that define the PUBLIC symbol _program_start or
; a user defined start symbol.
; To override the cstartup defined in the library, simply add your modified
; version to the workbench project.
;
; The vector table is normally located at address 0.
; When debugging in RAM, it can be located in RAM, aligned to at least 2^6.
; The name "__vector_table" has special meaning for C-SPY:
; it is where the SP start value is found, and the NVIC vector
; table register (VTOR) is initialized to this address if != 0.
;
; Cortex-M version
;
MODULE ?cstartup
;; Forward declaration of sections.
SECTION CSTACK:DATA:NOROOT(3)
SECTION .intvec:CODE:ROOT(2)
EXTERN main
EXTERN SystemInit
EXTERN init_data_bss
PUBLIC __vector_table
PUBLIC __vector_table_0x1c
PUBLIC __Vectors
PUBLIC __Vectors_End
PUBLIC __Vectors_Size
DATA
__vector_table
DCD sfe(CSTACK)
DCD Reset_Handler ; Reset Handler
DCD NMI_Handler ; Non Maskable Interrupt
DCD HardFault_Handler ; Cortex-M0 SV Hard Fault Interrupt
DCD 0
DCD 0
DCD 0
__vector_table_0x1c
DCD 0
DCD 0
DCD 0
DCD 0
DCD SVC_Handler ; Cortex-M0 SV Call Interrupt
DCD 0
DCD 0
DCD PendSV_Handler ; Cortex-M0 Pend SV Interrupt
DCD SysTick_Handler ; Cortex-M0 System Tick Interrupt
DCD DMA0_IRQHandler ; DMA channel 0 transfer complete
DCD DMA1_IRQHandler ; DMA channel 1 transfer complete
DCD DMA2_IRQHandler ; DMA channel 2 transfer complete
DCD DMA3_IRQHandler ; DMA channel 3 transfer complete
DCD DMA_Error_IRQHandler ; DMA error interrupt channels 0-3
DCD ERM_fault_IRQHandler ; ERM single and double bit error correction
DCD RTC_IRQHandler ; RTC alarm interrupt
DCD RTC_Seconds_IRQHandler ; RTC seconds interrupt
DCD LPTMR0_IRQHandler ; LPTIMER interrupt request
DCD PORT_IRQHandler ; Port A, B, C, D and E pin detect interrupt
DCD CAN0_ORed_Err_Wakeup_IRQHandler ; ORed [Bus Off OR Bus Off Done OR Transmit Warning OR Receive Warning], Interrupt indicating that errors were detected on the CAN bus, Interrupt asserted when Pretended Networking operation is enabled, and a valid message matches the selected filter criteria during Low Power mode
DCD CAN0_ORed_0_31_MB_IRQHandler ; ORed Message buffer (0-15, 16-31)
DCD FTM0_Ch0_7_IRQHandler ; FTM0 Channel 0 to 7 interrupt
DCD FTM0_Fault_IRQHandler ; FTM0 Fault interrupt
DCD FTM0_Ovf_Reload_IRQHandler ; FTM0 Counter overflow and Reload interrupt
DCD FTM1_Ch0_7_IRQHandler ; FTM1 Channel 0 to 7 interrupt
DCD FTM1_Fault_IRQHandler ; FTM1 Fault interrupt
DCD FTM1_Ovf_Reload_IRQHandler ; FTM1 Counter overflow and Reload interrupt
DCD FTFC_IRQHandler ; FTFC Command complete, Read collision and Double bit fault detect
DCD PDB0_IRQHandler ; PDB0 interrupt
DCD LPIT0_IRQHandler ; LPIT interrupt
DCD SCG_CMU_LVD_LVWSCG_IRQHandler ; PMC Low voltage detect interrupt, SCG bus interrupt request and CMU loss of range interrupt
DCD WDOG_IRQHandler ; WDOG interrupt request out before wdg reset out
DCD RCM_IRQHandler ; RCM Asynchronous Interrupt
DCD LPI2C0_Master_Slave_IRQHandler ; LPI2C0 Master Interrupt and Slave Interrupt
DCD FLEXIO_IRQHandler ; FlexIO Interrupt
DCD LPSPI0_IRQHandler ; LPSPI0 Interrupt
DCD LPSPI1_IRQHandler ; LPSPI1 Interrupt
DCD ADC0_IRQHandler ; ADC0 interrupt request.
DCD CMP0_IRQHandler ; CMP0 interrupt request
DCD LPUART1_RxTx_IRQHandler ; LPUART1 Transmit / Receive Interrupt
DCD LPUART0_RxTx_IRQHandler ; LPUART0 Transmit / Receive Interrupt
__Vectors_End
SECTION FlashConfig:CODE
__FlashConfig
DCD 0xFFFFFFFF ; 8 bytes backdoor comparison key
DCD 0xFFFFFFFF ;
DCD 0xFFFFFFFF ; 4 bytes program flash protection bytes
DCD 0xFFFF7FFE ; FDPROT:FEPROT:FOPT:FSEC(0xFE = unsecured)
__FlashConfig_End
__Vectors EQU __vector_table
__Vectors_Size EQU __Vectors_End - __Vectors
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Default interrupt handlers.
;;
THUMB
PUBWEAK Reset_Handler
SECTION .text:CODE:REORDER:NOROOT(2)
Reset_Handler
CPSID I ; Mask interrupts
;; Init the rest of the registers
LDR R1,=0
LDR R2,=0
LDR R3,=0
LDR R4,=0
LDR R5,=0
LDR R6,=0
LDR R7,=0
MOV R8,R7
MOV R9,R7
MOV R10,R7
MOV R11,R7
MOV R12,R7
#ifdef START_FROM_FLASH
IMPORT __RAM_START, __RAM_END
;; INIT ECC RAM
LDR R1, =__RAM_START
LDR R2, =__RAM_END
SUBS R2, R2, R1
SUBS R2, #1
BLE .LC5
MOVS R0, #0
MOVS R3, #4
.LC4:
STR R0, [R1]
ADD R1, R1, R3
SUBS R2, #4
BGE .LC4
.LC5:
#endif
;; Initialize the stack pointer
LDR R0, =sfe(CSTACK)
MOV R13,R0
#ifndef __NO_SYSTEM_INIT
;; Call the CMSIS system init routine
LDR R0, =SystemInit
BLX R0
#endif
;; Init .data and .bss sections
LDR R0, =init_data_bss
BLX R0
CPSIE I ; Unmask interrupts
BL main
JumpToSelf
B JumpToSelf
PUBWEAK NMI_Handler
SECTION .text:CODE:REORDER:NOROOT(1)
NMI_Handler
B .
PUBWEAK HardFault_Handler
SECTION .text:CODE:REORDER:NOROOT(1)
HardFault_Handler
B .
PUBWEAK SVC_Handler
SECTION .text:CODE:REORDER:NOROOT(1)
SVC_Handler
B .
PUBWEAK PendSV_Handler
SECTION .text:CODE:REORDER:NOROOT(1)
PendSV_Handler
B .
PUBWEAK SysTick_Handler
SECTION .text:CODE:REORDER:NOROOT(1)
SysTick_Handler
B .
PUBWEAK DMA0_IRQHandler
PUBWEAK DMA1_IRQHandler
PUBWEAK DMA2_IRQHandler
PUBWEAK DMA3_IRQHandler
PUBWEAK DMA_Error_IRQHandler
PUBWEAK ERM_fault_IRQHandler
PUBWEAK RTC_IRQHandler
PUBWEAK RTC_Seconds_IRQHandler
PUBWEAK LPTMR0_IRQHandler
PUBWEAK PORT_IRQHandler
PUBWEAK CAN0_ORed_Err_Wakeup_IRQHandler
PUBWEAK CAN0_ORed_0_31_MB_IRQHandler
PUBWEAK FTM0_Ch0_7_IRQHandler
PUBWEAK FTM0_Fault_IRQHandler
PUBWEAK FTM0_Ovf_Reload_IRQHandler
PUBWEAK FTM1_Ch0_7_IRQHandler
PUBWEAK FTM1_Fault_IRQHandler
PUBWEAK FTM1_Ovf_Reload_IRQHandler
PUBWEAK FTFC_IRQHandler
PUBWEAK PDB0_IRQHandler
PUBWEAK LPIT0_IRQHandler
PUBWEAK SCG_CMU_LVD_LVWSCG_IRQHandler
PUBWEAK WDOG_IRQHandler
PUBWEAK RCM_IRQHandler
PUBWEAK LPI2C0_Master_Slave_IRQHandler
PUBWEAK FLEXIO_IRQHandler
PUBWEAK LPSPI0_IRQHandler
PUBWEAK LPSPI1_IRQHandler
PUBWEAK ADC0_IRQHandler
PUBWEAK CMP0_IRQHandler
PUBWEAK LPUART1_RxTx_IRQHandler
PUBWEAK LPUART0_RxTx_IRQHandler
PUBWEAK DefaultISR
SECTION .text:CODE:REORDER:NOROOT(1)
NMI_Handler
HardFault_Handler
SVC_Handler
PendSV_Handler
SysTick_Handler
DMA0_IRQHandler
DMA1_IRQHandler
DMA2_IRQHandler
DMA3_IRQHandler
DMA_Error_IRQHandler
ERM_fault_IRQHandler
RTC_IRQHandler
RTC_Seconds_IRQHandler
LPTMR0_IRQHandler
PORT_IRQHandler
CAN0_ORed_Err_Wakeup_IRQHandler
CAN0_ORed_0_31_MB_IRQHandler
FTM0_Ch0_7_IRQHandler
FTM0_Fault_IRQHandler
FTM0_Ovf_Reload_IRQHandler
FTM1_Ch0_7_IRQHandler
FTM1_Fault_IRQHandler
FTM1_Ovf_Reload_IRQHandler
FTFC_IRQHandler
PDB0_IRQHandler
LPIT0_IRQHandler
SCG_CMU_LVD_LVWSCG_IRQHandler
WDOG_IRQHandler
RCM_IRQHandler
LPI2C0_Master_Slave_IRQHandler
FLEXIO_IRQHandler
LPSPI0_IRQHandler
LPSPI1_IRQHandler
ADC0_IRQHandler
CMP0_IRQHandler
LPUART1_RxTx_IRQHandler
LPUART0_RxTx_IRQHandler
DefaultISR
B DefaultISR
END