;/***************************************************************************** | |
; * @file: startup_LPC51U68.s | |
; * @purpose: CMSIS Cortex-M0 Core Device Startup File | |
; * LPC51U68 | |
; * @version: 1.0 | |
; * @date: 2017-12-15 | |
; *---------------------------------------------------------------------------- | |
; * | |
; Copyright 1997-2016 Freescale Semiconductor, Inc. | |
; Copyright 2016-2018 NXP | |
; | |
; SPDX-License-Identifier: BSD-3-Clause | |
; | |
; 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:NOROOT(2) | |
EXTERN __iar_program_start | |
EXTERN SystemInit | |
PUBLIC __vector_table | |
PUBLIC __vector_table_0x1c | |
PUBLIC __Vectors | |
PUBLIC __Vectors_End | |
PUBLIC __Vectors_Size | |
DATA | |
__vector_table | |
DCD sfe(CSTACK) | |
DCD Reset_Handler | |
DCD NMI_Handler | |
DCD HardFault_Handler | |
DCD 0 | |
DCD 0 | |
DCD 0 | |
__vector_table_0x1c | |
DCD 0 | |
DCD 0 | |
DCD 0 | |
DCD 0 | |
DCD SVC_Handler | |
DCD 0 | |
DCD 0 | |
DCD PendSV_Handler | |
DCD SysTick_Handler | |
; External Interrupts | |
DCD WDT_BOD_IRQHandler ; Windowed watchdog timer, Brownout detect | |
DCD DMA0_IRQHandler ; DMA controller | |
DCD GINT0_IRQHandler ; GPIO group 0 | |
DCD GINT1_IRQHandler ; GPIO group 1 | |
DCD PIN_INT0_IRQHandler ; Pin interrupt 0 or pattern match engine slice 0 | |
DCD PIN_INT1_IRQHandler ; Pin interrupt 1or pattern match engine slice 1 | |
DCD PIN_INT2_IRQHandler ; Pin interrupt 2 or pattern match engine slice 2 | |
DCD PIN_INT3_IRQHandler ; Pin interrupt 3 or pattern match engine slice 3 | |
DCD UTICK0_IRQHandler ; Micro-tick Timer | |
DCD MRT0_IRQHandler ; Multi-rate timer | |
DCD CTIMER0_IRQHandler ; Standard counter/timer CTIMER0 | |
DCD CTIMER1_IRQHandler ; Standard counter/timer CTIMER1 | |
DCD SCT0_IRQHandler ; SCTimer/PWM | |
DCD CTIMER3_IRQHandler ; Standard counter/timer CTIMER3 | |
DCD FLEXCOMM0_IRQHandler ; Flexcomm Interface 0 (USART, SPI, I2C) | |
DCD FLEXCOMM1_IRQHandler ; Flexcomm Interface 1 (USART, SPI, I2C) | |
DCD FLEXCOMM2_IRQHandler ; Flexcomm Interface 2 (USART, SPI, I2C) | |
DCD FLEXCOMM3_IRQHandler ; Flexcomm Interface 3 (USART, SPI, I2C) | |
DCD FLEXCOMM4_IRQHandler ; Flexcomm Interface 4 (USART, SPI, I2C) | |
DCD FLEXCOMM5_IRQHandler ; Flexcomm Interface 5 (USART, SPI, I2C) | |
DCD FLEXCOMM6_IRQHandler ; Flexcomm Interface 6 (USART, SPI, I2C, I2S) | |
DCD FLEXCOMM7_IRQHandler ; Flexcomm Interface 7 (USART, SPI, I2C, I2S) | |
DCD ADC0_SEQA_IRQHandler ; ADC0 sequence A completion. | |
DCD ADC0_SEQB_IRQHandler ; ADC0 sequence B completion. | |
DCD ADC0_THCMP_IRQHandler ; ADC0 threshold compare and error. | |
DCD Reserved41_IRQHandler ; Reserved interrupt | |
DCD Reserved42_IRQHandler ; Reserved interrupt | |
DCD USB0_NEEDCLK_IRQHandler ; USB Activity Wake-up Interrupt | |
DCD USB0_IRQHandler ; USB device | |
DCD RTC_IRQHandler ; RTC alarm and wake-up interrupts | |
DCD Reserved46_IRQHandler ; Reserved interrupt | |
DCD Reserved47_IRQHandler ; Reserved interrupt | |
__Vectors_End | |
; Code Read Protection Level (CRP) | |
; <0xFFFFFFFF=> Disabled | |
; <0x4E697370=> NO_ISP | |
; <0x12345678=> CRP1 | |
; <0x87654321=> CRP2 | |
; <0x43218765=> CRP3 | |
#if !defined NO_CRP | |
SECTION .crp:CODE | |
__CRP | |
DCD 0xFFFFFFFF | |
__CRP_End | |
#endif | |
__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 | |
LDR r0, =SystemInit | |
BLX r0 | |
LDR r0, =__iar_program_start | |
BX r0 | |
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 WDT_BOD_IRQHandler | |
PUBWEAK WDT_BOD_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
WDT_BOD_IRQHandler | |
LDR R0, =WDT_BOD_DriverIRQHandler | |
BX R0 | |
PUBWEAK DMA0_IRQHandler | |
PUBWEAK DMA0_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
DMA0_IRQHandler | |
LDR R0, =DMA0_DriverIRQHandler | |
BX R0 | |
PUBWEAK GINT0_IRQHandler | |
PUBWEAK GINT0_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
GINT0_IRQHandler | |
LDR R0, =GINT0_DriverIRQHandler | |
BX R0 | |
PUBWEAK GINT1_IRQHandler | |
PUBWEAK GINT1_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
GINT1_IRQHandler | |
LDR R0, =GINT1_DriverIRQHandler | |
BX R0 | |
PUBWEAK PIN_INT0_IRQHandler | |
PUBWEAK PIN_INT0_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
PIN_INT0_IRQHandler | |
LDR R0, =PIN_INT0_DriverIRQHandler | |
BX R0 | |
PUBWEAK PIN_INT1_IRQHandler | |
PUBWEAK PIN_INT1_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
PIN_INT1_IRQHandler | |
LDR R0, =PIN_INT1_DriverIRQHandler | |
BX R0 | |
PUBWEAK PIN_INT2_IRQHandler | |
PUBWEAK PIN_INT2_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
PIN_INT2_IRQHandler | |
LDR R0, =PIN_INT2_DriverIRQHandler | |
BX R0 | |
PUBWEAK PIN_INT3_IRQHandler | |
PUBWEAK PIN_INT3_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
PIN_INT3_IRQHandler | |
LDR R0, =PIN_INT3_DriverIRQHandler | |
BX R0 | |
PUBWEAK UTICK0_IRQHandler | |
PUBWEAK UTICK0_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
UTICK0_IRQHandler | |
LDR R0, =UTICK0_DriverIRQHandler | |
BX R0 | |
PUBWEAK MRT0_IRQHandler | |
PUBWEAK MRT0_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
MRT0_IRQHandler | |
LDR R0, =MRT0_DriverIRQHandler | |
BX R0 | |
PUBWEAK CTIMER0_IRQHandler | |
PUBWEAK CTIMER0_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
CTIMER0_IRQHandler | |
LDR R0, =CTIMER0_DriverIRQHandler | |
BX R0 | |
PUBWEAK CTIMER1_IRQHandler | |
PUBWEAK CTIMER1_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
CTIMER1_IRQHandler | |
LDR R0, =CTIMER1_DriverIRQHandler | |
BX R0 | |
PUBWEAK SCT0_IRQHandler | |
PUBWEAK SCT0_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
SCT0_IRQHandler | |
LDR R0, =SCT0_DriverIRQHandler | |
BX R0 | |
PUBWEAK CTIMER3_IRQHandler | |
PUBWEAK CTIMER3_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
CTIMER3_IRQHandler | |
LDR R0, =CTIMER3_DriverIRQHandler | |
BX R0 | |
PUBWEAK FLEXCOMM0_IRQHandler | |
PUBWEAK FLEXCOMM0_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
FLEXCOMM0_IRQHandler | |
LDR R0, =FLEXCOMM0_DriverIRQHandler | |
BX R0 | |
PUBWEAK FLEXCOMM1_IRQHandler | |
PUBWEAK FLEXCOMM1_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
FLEXCOMM1_IRQHandler | |
LDR R0, =FLEXCOMM1_DriverIRQHandler | |
BX R0 | |
PUBWEAK FLEXCOMM2_IRQHandler | |
PUBWEAK FLEXCOMM2_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
FLEXCOMM2_IRQHandler | |
LDR R0, =FLEXCOMM2_DriverIRQHandler | |
BX R0 | |
PUBWEAK FLEXCOMM3_IRQHandler | |
PUBWEAK FLEXCOMM3_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
FLEXCOMM3_IRQHandler | |
LDR R0, =FLEXCOMM3_DriverIRQHandler | |
BX R0 | |
PUBWEAK FLEXCOMM4_IRQHandler | |
PUBWEAK FLEXCOMM4_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
FLEXCOMM4_IRQHandler | |
LDR R0, =FLEXCOMM4_DriverIRQHandler | |
BX R0 | |
PUBWEAK FLEXCOMM5_IRQHandler | |
PUBWEAK FLEXCOMM5_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
FLEXCOMM5_IRQHandler | |
LDR R0, =FLEXCOMM5_DriverIRQHandler | |
BX R0 | |
PUBWEAK FLEXCOMM6_IRQHandler | |
PUBWEAK FLEXCOMM6_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
FLEXCOMM6_IRQHandler | |
LDR R0, =FLEXCOMM6_DriverIRQHandler | |
BX R0 | |
PUBWEAK FLEXCOMM7_IRQHandler | |
PUBWEAK FLEXCOMM7_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
FLEXCOMM7_IRQHandler | |
LDR R0, =FLEXCOMM7_DriverIRQHandler | |
BX R0 | |
PUBWEAK ADC0_SEQA_IRQHandler | |
PUBWEAK ADC0_SEQA_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
ADC0_SEQA_IRQHandler | |
LDR R0, =ADC0_SEQA_DriverIRQHandler | |
BX R0 | |
PUBWEAK ADC0_SEQB_IRQHandler | |
PUBWEAK ADC0_SEQB_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
ADC0_SEQB_IRQHandler | |
LDR R0, =ADC0_SEQB_DriverIRQHandler | |
BX R0 | |
PUBWEAK ADC0_THCMP_IRQHandler | |
PUBWEAK ADC0_THCMP_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
ADC0_THCMP_IRQHandler | |
LDR R0, =ADC0_THCMP_DriverIRQHandler | |
BX R0 | |
PUBWEAK Reserved41_IRQHandler | |
PUBWEAK Reserved41_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
Reserved41_IRQHandler | |
LDR R0, =Reserved41_DriverIRQHandler | |
BX R0 | |
PUBWEAK Reserved42_IRQHandler | |
PUBWEAK Reserved42_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
Reserved42_IRQHandler | |
LDR R0, =Reserved42_DriverIRQHandler | |
BX R0 | |
PUBWEAK USB0_NEEDCLK_IRQHandler | |
PUBWEAK USB0_NEEDCLK_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
USB0_NEEDCLK_IRQHandler | |
LDR R0, =USB0_NEEDCLK_DriverIRQHandler | |
BX R0 | |
PUBWEAK USB0_IRQHandler | |
PUBWEAK USB0_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
USB0_IRQHandler | |
LDR R0, =USB0_DriverIRQHandler | |
BX R0 | |
PUBWEAK RTC_IRQHandler | |
PUBWEAK RTC_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
RTC_IRQHandler | |
LDR R0, =RTC_DriverIRQHandler | |
BX R0 | |
PUBWEAK Reserved46_IRQHandler | |
PUBWEAK Reserved46_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
Reserved46_IRQHandler | |
LDR R0, =Reserved46_DriverIRQHandler | |
BX R0 | |
PUBWEAK Reserved47_IRQHandler | |
PUBWEAK Reserved47_DriverIRQHandler | |
SECTION .text:CODE:REORDER:NOROOT(2) | |
Reserved47_IRQHandler | |
LDR R0, =Reserved47_DriverIRQHandler | |
BX R0 | |
WDT_BOD_DriverIRQHandler | |
DMA0_DriverIRQHandler | |
GINT0_DriverIRQHandler | |
GINT1_DriverIRQHandler | |
PIN_INT0_DriverIRQHandler | |
PIN_INT1_DriverIRQHandler | |
PIN_INT2_DriverIRQHandler | |
PIN_INT3_DriverIRQHandler | |
UTICK0_DriverIRQHandler | |
MRT0_DriverIRQHandler | |
CTIMER0_DriverIRQHandler | |
CTIMER1_DriverIRQHandler | |
SCT0_DriverIRQHandler | |
CTIMER3_DriverIRQHandler | |
FLEXCOMM0_DriverIRQHandler | |
FLEXCOMM1_DriverIRQHandler | |
FLEXCOMM2_DriverIRQHandler | |
FLEXCOMM3_DriverIRQHandler | |
FLEXCOMM4_DriverIRQHandler | |
FLEXCOMM5_DriverIRQHandler | |
FLEXCOMM6_DriverIRQHandler | |
FLEXCOMM7_DriverIRQHandler | |
ADC0_SEQA_DriverIRQHandler | |
ADC0_SEQB_DriverIRQHandler | |
ADC0_THCMP_DriverIRQHandler | |
Reserved41_DriverIRQHandler | |
Reserved42_DriverIRQHandler | |
USB0_NEEDCLK_DriverIRQHandler | |
USB0_DriverIRQHandler | |
RTC_DriverIRQHandler | |
Reserved46_DriverIRQHandler | |
Reserved47_DriverIRQHandler | |
DefaultISR | |
B . | |
END |