⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 startup.s

📁 web服务器单片机开发
💻 S
字号:
Mode_USR        EQU     0x10
Mode_FIQ        EQU     0x11
Mode_IRQ        EQU     0x12
Mode_SVC        EQU     0x13
Mode_ABT        EQU     0x17
Mode_UND        EQU     0x1B
Mode_SYS        EQU     0x1F ; available on ARM Arch 4 and later

I_Bit           EQU     0x80 ; when I bit is set, IRQ is disabled
F_Bit           EQU     0x40 ; when F bit is set, FIQ is disabled


Len_UND_Stack  EQU   256							;定义各个异常模式的堆栈大小
Len_ABT_Stack  EQU   256
Len_FIQ_Stack  EQU   256
Len_IRQ_Stack  EQU   256
Len_SVC_Stack  EQU   1024
Len_SYS_Stack  EQU   1024


offset_FIQ_Stack   EQU   0
offset_IRQ_Stack   EQU   offset_FIQ_Stack + Len_FIQ_Stack
offset_UND_Stack   EQU   offset_IRQ_Stack + Len_IRQ_Stack
offset_ABT_Stack   EQU   offset_UND_Stack + Len_UND_Stack
offset_SVC_Stack   EQU   offset_ABT_Stack + Len_ABT_Stack
offset_SYS_Stack   EQU   offset_SVC_Stack + Len_SVC_Stack
	
	   
    IMPORT  __main                   			;C库初始化代码 
    IMPORT  BSP_Init                 			;初始化目标板
    EXPORT  Reset
    EXPORT  __user_initial_stackheap

	CODE32
	AREA    vectors,CODE,READONLY
ENTRY

Reset
        LDR     PC, Reset_Addr
        LDR     PC, Undefined_Addr
        LDR     PC, SWI_Addr
        LDR     PC, Prefetch_Addr
        LDR     PC, DataAbort_Addr
        DCD     0xb9205f80						;LPC2000系列独有的特征
        LDR     PC, [PC, #-0xff0]				;获取优先级最高的ISR地址
        LDR     PC, FIQ_Addr

Reset_Addr           	DCD     ResetInit
Undefined_Addr       	DCD     Undefined
SWI_Addr            	DCD     SoftwareInterrupt
Prefetch_Addr        	DCD     PrefetchAbort
DataAbort_Addr       	DCD     DataAbort
Nouse               	DCD     0
IRQ_Addr            	DCD     0
FIQ_Addr            	DCD     FIQ_Handler


Undefined
        B       Undefined
SoftwareInterrupt
		B		SoftwareInterrupt
PrefetchAbort
        B       PrefetchAbort
DataAbort
        B       DataAbort
FIQ_Handler										;快速中断入口点
        B		FIQ_Handler
				
InitStack    
        
		MOV   r1, lr
		LDR   r0, =stack_base
		
		MSR   CPSR_c, #Mode_FIQ|I_Bit|F_Bit
		SUB   sp, r0, #offset_FIQ_Stack
		
		MSR   CPSR_c, #Mode_IRQ|I_Bit|F_Bit
		SUB   sp, r0, #offset_IRQ_Stack
		
		MSR   CPSR_c, #Mode_UND|I_Bit|F_Bit
		SUB   sp, r0, #offset_UND_Stack
		
		MSR   CPSR_c, #Mode_ABT|I_Bit|F_Bit
		SUB   sp, r0, #offset_ABT_Stack
		
		MSR   CPSR_c, #Mode_SVC|I_Bit|F_Bit
		SUB   sp, r0, #offset_SVC_Stack
		
		
		MSR   CPSR_c, #Mode_SYS|I_Bit|F_Bit
		SUB   sp, r0, #offset_SYS_Stack
		
		MOV   pc, r1

ResetInit
    BL      InitStack 							;初始化堆栈            
    BL      BSP_Init 							;初始化目标板        				                                       
    B       __main



__user_initial_stackheap    					;放置堆
    LDR   r0,=heap_base					
    MOV   pc,lr				
        


        AREA    heap, DATA, NOINIT
        EXPORT  heap_base    
heap_base    SPACE   1							;在ZW ZI之后放置,在链接时确定

        AREA    stacks, DATA, NOINIT
        EXPORT  stack_base						;在分散加载文件中定义,栈底为0x40004000
stack_base   SPACE   1

    END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -