mirror of https://github.com/rusefi/openblt.git
288 lines
10 KiB
ArmAsm
288 lines
10 KiB
ArmAsm
; ---------------------------------------------------------------------------------------
|
||
; @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 ; OR’ed [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 ; OR’ed 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
|