;/***************************************************************************** ; * @file: startup_xinc.s ; * @purpose: CMSIS Cortex-M0 Core Device Startup File for the ; * Device xinc. ; *****************************************************************************/ Stack_Size EQU 0x00001000 AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE Stack_Size __initial_sp Heap_Size EQU 0x00000000 AREA HEAP, NOINIT, READWRITE, ALIGN=3 __heap_base Heap_Mem SPACE Heap_Size __heap_limit PRESERVE8 THUMB ; Vector Table Mapped to Address 0 at Reset AREA RESET, DATA, READONLY EXPORT __Vectors EXPORT __Vectors_End EXPORT __Vectors_Size __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler DCD NMI_Handler ; NMI Handler DCD HardFault_Handler ; Hard Fault Handler DCD MemManage_Handler ; MPU Fault Handler DCD BusFault_Handler ; Bus Fault Handler DCD UsageFault_Handler ; Usage Fault Handler DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD SVC_Handler ; SVCall Handler DCD DebugMon_Handler ; Debug Monitor Handler DCD 0 ; Reserved DCD PendSV_Handler ; PendSV Handler DCD SysTick_Handler ; SysTick Handler ; External Interrupts ; ToDo: Add here the vectors for the device specific external interrupts handler DCD BLE_Handler ; 0 DCD DMA_Handler ; 1 DCD CPR_Handler ; 2 DCD GPIO_Handler ; 3 DCD RTC_Handler ; 4 DCD TIMER0_Handler ; 5 DCD TIMER1_Handler ; 6 DCD TIMER2_Handler ; 7 DCD TIMER3_Handler ; 8 DCD WDT_Handler ; 9 DCD I2C_Handler ; 10 DCD UART0_Handler ; 11 DCD UART1_Handler ; 12 DCD SPI0_Handler ; 13 DCD SPI1_Handler ; 14 DCD 0 ; 15 DCD 0 ; 16 DCD GADC_Handler ; 17 DCD PWM_Handler ; 18 DCD AES_Handler ; 19 DCD USB_Handler ; 20 DCD AUDIO_Handler ; 21 DCD RF24G_Handler ; 22 DCD SPI2_Handler ; 23 DCD 0 ; 24 DCD UART2_Handler ; 25 DCD I2S_Handler ; 26 DCD AOTIMER0_Handler ; 27 DCD AOTIMER1_Handler ; 28 DCD CMP_Handler ; 29 DCD FMC_Handler ; 30 DCD CAN_Handler ; 31 __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors AREA |.text|, CODE, READONLY ; Reset Handler Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT SystemInit IMPORT __main LDR r0, =0x4000013C ; remap LDR r1, =0x10000001 STR r1, [r0] LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 ENDP ; Dummy Exception Handlers (infinite loops which can be modified) NMI_Handler PROC EXPORT NMI_Handler [WEAK] B . ENDP HardFault_Handler\ PROC IMPORT HardFault_Handler_c ;函数声明 movs r0, #4 ;判断主栈指针还是进程栈指针 mov r1, lr tst r0, r1 beq hf_used_msp ;如果是主栈指针 mrs r0, psp ;否则是进程栈指针,把进程栈指针地址付给 R0 ldr r1, =HardFault_Handler_c ;跳转到 HardFault 中断程序 bx r1 hf_used_msp mrs r0, msp ;把主栈指针地址赋给 R0 ldr r1, =HardFault_Handler_c bx r1 ;EXPORT HardFault_Handler [WEAK] ;B . ENDP MemManage_Handler\ PROC EXPORT MemManage_Handler [WEAK] B . ENDP BusFault_Handler\ PROC EXPORT BusFault_Handler [WEAK] B . ENDP UsageFault_Handler\ PROC EXPORT UsageFault_Handler [WEAK] B . ENDP SVC_Handler PROC EXPORT SVC_Handler [WEAK] B . ENDP DebugMon_Handler\ PROC EXPORT DebugMon_Handler [WEAK] B . ENDP Default_Handler PROC EXPORT BLE_Handler [WEAK] EXPORT DMA_Handler [WEAK] EXPORT CPR_Handler [WEAK] EXPORT GPIO_Handler [WEAK] EXPORT RTC_Handler [WEAK] EXPORT TIMER0_Handler [WEAK] EXPORT TIMER1_Handler [WEAK] EXPORT TIMER2_Handler [WEAK] EXPORT TIMER3_Handler [WEAK] EXPORT WDT_Handler [WEAK] EXPORT I2C_Handler [WEAK] EXPORT UART0_Handler [WEAK] EXPORT UART1_Handler [WEAK] EXPORT SPI0_Handler [WEAK] EXPORT SPI1_Handler [WEAK] ;EXPORT KBS_Handler [WEAK] ;EXPORT QDEC_Handler [WEAK] EXPORT GADC_Handler [WEAK] EXPORT PWM_Handler [WEAK] EXPORT AES_Handler [WEAK] EXPORT PendSV_Handler [WEAK] EXPORT SysTick_Handler [WEAK] EXPORT USB_Handler [WEAK];20 EXPORT AUDIO_Handler [WEAK];21 EXPORT RF24G_Handler [WEAK];22 EXPORT SPI2_Handler [WEAK];23 ;EXPORT MPU_Handler [WEAK];24 EXPORT UART2_Handler [WEAK];25 EXPORT I2S_Handler [WEAK];26 EXPORT AOTIMER0_Handler [WEAK];27 EXPORT AOTIMER1_Handler [WEAK];28 EXPORT CMP_Handler [WEAK];29 EXPORT FMC_Handler [WEAK];30 EXPORT CAN_Handler [WEAK];31 PendSV_Handler SysTick_Handler BLE_Handler RF24G_Handler DMA_Handler CPR_Handler GPIO_Handler RTC_Handler TIMER0_Handler TIMER1_Handler TIMER2_Handler TIMER3_Handler WDT_Handler I2C_Handler I2S_Handler UART0_Handler UART1_Handler UART2_Handler SPI0_Handler SPI1_Handler SPI2_Handler ;KBS_Handler ;QDEC_Handler GADC_Handler PWM_Handler AUDIO_Handler ;SIM_Handler AES_Handler AOTIMER0_Handler AOTIMER1_Handler CMP_Handler FMC_Handler CAN_Handler USB_Handler B . ENDP ALIGN ; User Initial Stack & Heap IMPORT __use_two_region_memory EXPORT __user_initial_stackheap __user_initial_stackheap LDR R0, = Heap_Mem LDR R1, = (Stack_Mem + Stack_Size) LDR R2, = (Heap_Mem + Heap_Size) LDR R3, = Stack_Mem BX LR ALIGN END