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

📄 init.s

📁 一位大侠写的ARM7DTMI模拟器,功能强大,可以模拟按键,彩色液晶,触摸屏,中断,异常等ARM7内核模块和外设,其中包含了bootloader代码,可以用ADS直接编译,是您没有ARM硬件条件下学习
💻 S
字号:
;;**************************************************************
;;BootLoader for simuCPU,you can only free use it for personal study purpose!
;;www.MShowTec.com for more information.
;;lmjx,Email:limiao@yeah.com,All Right Reserved.
;;**************************************************************
		IMPORT undef
		IMPORT swi
		IMPORT prefetch
		IMPORT data
		IMPORT irq
		IMPORT fiq
		
		
 
        AREA    Init, CODE, READONLY
		CODE32
		GET snds.s
		
        ENTRY

start

	B	reset					; Reset   
	B	undef  					; Undef	
	B	swi						; Software interrupt
	B	prefetch				; Prefetch Abort
	B	data					; Data Abort
	NOP							; Reserved
	B	irq						; Irq
	B	fiq						; Fiq


;Part 1
;***************************************************************
;disable interrupts in CPU and switch to SVC32 mode

reset	

	MRS	r0, cpsr
	BIC	r0, r0, #MASK_MODE
	ORR	r0, r0, #MODE_SVC32
	ORR 	r0, r0, #I_BIT
	ORR 	r0, r0, #F_BIT
	MSR	cpsr_c, r0

	LDR	r2, =ARM7_INTMASK			 ;R2->interrupt controller
	MVN	r1, #0						 ;&FFFFFFFF
	STR	r1, [r2]					 ;disable all interrupt soucres

	LDR	r2, =ARM7_INTPEND			 ;R2->interrupt pend register.
	MOV	r1, #0						 ;&FFFFFFFF
	STR	r1, [r2]					 ;clear all interrupt flags.
	

;Part 2

;	Import some important variables for later use

    IMPORT |Image$$RO$$Base|    
	IMPORT |Image$$RO$$Limit|   
	IMPORT |Image$$RW$$Base|   
	IMPORT |Image$$RW$$Limit| 	
	IMPORT |Image$$ZI$$Base| 	
	IMPORT |Image$$ZI$$Limit| 


;Part 3
;****************************************************************
;Initalize the memory as followa:
;	FLASH			@ 0  ~ 8 M
;	SDRAM			@ 8  ~ 16M

	LDR	r2, =ARM7_MEMMAP			 
	LDR	r1, =0x08080800				;8M flash form address 0x00000000,8M sdram form 0x08000000		 
	STR	r1, [r2]


;Part 4
;***************************************************************
;Self copy from FLASH to SDRAM

;	LDR		r0, =|Image$$RO$$Base|      
;	LDR		r1, =|Image$$RO$$Limit|      
;	LDR		r2, =|Image$$RW$$Base|      
;	LDR		r3, =|Image$$RW$$Limit|  
	 

;	SUB 		r1, r1, r0
;	SUB		r3, r3, r2
;	ADD		r1, r1, r3
	
;	LDR		r2, =0x800000   ;@8M

	
;COPY
;	LDR		r3, [r0], #4
;	STR		r3, [r2], #4
;	SUBS		r1, r1,   #4
;	BNE		COPY


 
;Part 5
****************************************************************
;Remap the memory
; 	FLASH	@ 8 ~ 16M 
; 	SDRAM	@ 0 ~ 8M

  
;	LDR	r2, =ARM7_MEMMAP			 
;	LDR	r1, =0x08000808				;8M flash form address 0x08000000,8M sdram form 0x00000000		 
;	STR	r1, [r2]


;Part 6
;*****************************************************************
; Copy RW & ZI to SDRAM

	LDR r0, =|Image$$RO$$Limit| 	
	LDR r1, =|Image$$RW$$Base| 		
	LDR r3, =|Image$$ZI$$Base| 		

	CMP r0, r1 
	BEQ %F1
 
0 	CMP r1, r3 						; Copy init data
	LDRCC r2, [r0], #4
	STRCC r2, [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

	
;Part 7
;***********************************************************************
	
;Set stack pointer & jump to c function

	; Put the stack base address into R0
	LDR     r0, =0xe00000
	; Add the stack size to get the top of the stack in R0
	ADD	r0,r0,#0x600
    SUB	r0,r0,#4

    ; stack IRQ
    MOV     r3,#2_11010010
    MSR     CPSR_c,r3		
    MOV     r13,r0			

    ; stack  ABORT
    SUB     r0,r0,#0x100
    MOV     r3,#2_11010111
    MSR     CPSR_c,r3		
    MOV     r13,r0			

    ; stack UNDEF 
    SUB     r0,r0,#0x100
    MOV     r3,#2_11011011
    MSR     CPSR_c,r3		
    MOV     r13,r0			

    ; stack FIQ 
    SUB     r0,r0,#0x100
    MOV     r3,#2_11010001
    MSR     CPSR_c,r3		
    MOV     r13,r0			

    ; stack SYSTEM(USER)
    SUB     r0,r0,#0x100
    MOV     r3,#2_11011111
    MSR     CPSR_c,r3		
    MOV     r13,r0		
    
    ; stack SVC
    SUB     r0,r0,#0x100
    MOV     r3,#2_11010011
    MSR     CPSR_c,r3
	MOV	r13,r0
    
    ;enable IRQ & FIQ
    MRS	r0, cpsr
	BIC 	r0, r0, #I_BIT
	BIC 	r0, r0, #F_BIT
	MSR	cpsr_c, r0

	IMPORT	loadkernel
	LDR		pc, =loadkernel


        END

⌨️ 快捷键说明

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