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

📄 init.s

📁 很多的经典的嵌入式例子 自己去看吧
💻 S
字号:
	AREA Init,CODE,READONLY

;Pre-defined constants
USERMODE EQU 0x10
FIQMODE EQU 0x11
IRQMODE EQU 0x12
SVCMODE EQU 0x13
ABORTMODE EQU 0x17
UNDEFMODE EQU 0x1b
MODEMASK EQU 0x1f
NOINT EQU 0xc0
HAVEINT	EQU	0x00


RAM_Limit       EQU     0x400000          	; For unexpanded W90N740 board

UND_Stack		EQU		RAM_Limit
Abort_Stack		EQU		RAM_Limit-256
IRQ_Stack       EQU     RAM_Limit-512       ; followed by IRQ stack
FIQ_Stack       EQU     RAM_Limit-768       ; followed by IRQ stack
SVC_Stack       EQU     RAM_Limit-1024      ; SVC stack at top of memory
; add FIQ_Stack, ABT_Stack, UNDEF_Stack here if you need them
USR_Stack       EQU     0x3f8000	       ; followed by USR(SYS) stack


	KEEP

	ENTRY
	EXPORT	Reset_Handler
    ;****************************************************
    ;*	Initialize stacks				* 
    ;****************************************************
Reset_Handler

    mrs	    r0,cpsr
    bic	    r0,r0,#MODEMASK
    orr	    r1,r0,#UNDEFMODE|NOINT
    msr	    cpsr_cxsf,r1			;UndefMode
    ldr	    sp,=UND_Stack
	
    orr	    r1,r0,#ABORTMODE|NOINT
    msr	    cpsr_cxsf,r1 	    	;AbortMode
    ldr	    sp,=Abort_Stack

    orr	    r1,r0,#IRQMODE|NOINT
    msr	    cpsr_cxsf,r1 	    	;IRQMode
    ldr	    sp,=IRQ_Stack
	
    orr	    r1,r0,#FIQMODE|NOINT
    msr	    cpsr_cxsf,r1 	    	;FIQMode
    ldr	    sp,=FIQ_Stack

    orr	    r1,r0,#SVCMODE|NOINT
    msr	    cpsr_cxsf,r1 	    	;SVCMode
    ldr	    sp,=SVC_Stack
    
    mrs	    r0,cpsr
    bic	    r0,r0,#0xC0
    msr	    cpsr_cxsf,r0 	    	;SVCMode


 ;   orr	    r1,r0,#USERMODE
 ;   bic     r1,r1,#0xc0
 ;   msr	    cpsr_cxsf,r1 	    	;USRMode
 ;   ldr	    sp,=USR_Stack

    ;********************************************************
    ;*	Copy and paste RW data/zero initialized data	    *
    ;********************************************************
;    orr	    r1,r0,#USERMODE
;    bic     r1,r1,#0xc0
;    msr	    cpsr_c,r1 	    	;USRMode

    ;********************************************************
    ;*	Copy and paste RW data/zero initialized data	    *
    ;********************************************************
	IMPORT |Image$$RO$$Limit| 	; End of ROM code
	IMPORT |Image$$RW$$Base| 	; Base of RAM to initialise
	IMPORT |Image$$ZI$$Base| 	; Base and limit of area
	IMPORT |Image$$ZI$$Limit| 	; to zero initialise
	
	IMPORT main 			; The main entry of mon program

    LDR	    r0, =|Image$$RO$$Limit|	; pointer to ROM data
    LDR	    r1, =|Image$$RW$$Base|	;            RAM copy
    LDR	    r3, =|Image$$ZI$$Base|	
	;Zero init base => top of initialised data
			
    CMP	    r0, r1	    ; Check that they are different
    BEQ	    %F1
0		
    CMP	    r1, r3	    ; Copy init data
    LDRCC   r2, [r0], #4    ;--> LDRCC r2, [r0] + ADD r0, r0, #4		 
    STRCC   r2, [r1], #4    ;--> STRCC r2, [r1] + ADD r1, r1, #4
    BCC	    %B0
1		
    LDR	    r1, =|Image$$ZI$$Limit| ; Top of zero init segment
    MOV	    r2, #0
2		
    CMP	    r3, r1	    ; Zero init
    STRCC   r2, [r3], #4
    BCC	    %B2

;        MSR     CPSR_c, #USERMODE ; No interrupts
;        LDR     SP, =USR_Stack


	BL	main	    ; jump to C program
	B	.						
	
	
;	ALIGN

;	AREA RamData, DATA, READWRITE
	
;
;	^	(0x400000-0x600)	;
				
;UserStack	#	256	;c1(c7)ffa00
;SVCStack	#	256	;c1(c7)ffb00
;UndefStack	#	256	;c1(c7)ffc00
;AbortStack	#	256	;c1(c7)ffd00
;IRQStack	#	256	;c1(c7)ffe00
;FIQStack	#	0	;c1(c7)fff00

	END

⌨️ 快捷键说明

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