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

📄 init.s

📁 s3c4510B 的一些实验成功的程序,对初学者有很大帮助
💻 S
字号:
;**************************************************************
;	
;	This an simple implementation of  bootloader for S3C4510B
;	Hope it is useful to you.
;	
;	Duyunhai use this program to UART0
;	
;	Enjoy it! 
;
;**************************************************************

LOOPNUM		EQU	0x02
IOPMOD		EQU	0x3FF5000
IOPCON		EQU	0x3FF5004
IOPDATA		EQU	0x3FF5008
TMOD		EQU	0x3FF6000
TDATA0		EQU	0x3FF6004
INTMOD		EQU	0x3FF4000
INTPND		EQU	0x3FF4004
INTMASK		EQU	0x3FF4008
 
        AREA    Init, CODE, READONLY
		CODE32
		GET snds.s
		
        ENTRY
	B		Reset_Handler
	B		.
	B		.
	B		.
	B		.	
	NOP			
	B		IRQ_Handler
	B		.


Reset_Handler

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

	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.
	MVN	r1, #0						 ;&FFFFFFFF
	STR	r1, [r2]					 ;clear all interrupt flags.

;Part 2
;****************************************************************

	LDR	r0, =ARM7_SYSCFG
	LDR	r1, =0xE7FFFF80				;//0x87ffffA0				;config SYSCFG
	STR	r1, [r0] 					;Cache & WB disabled

;Part 3
;***************************************************************
;	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 4
;****************************************************************
;Initalize the memory as followa:
;	FLASH			@ 0  ~ 2 M
;	SDRAM			@ 2  ~ 18M

	LDR	r1, =0x00003000				;//rEXTDBWTH 	
	LDR	r2, =0x04000060				;//rROMCON0  	0M ~ 4M	
	LDR	r3, =rROMCON1				;ROMCON1	@ DISABLED
	LDR	r4, =rROMCON2				;ROMCON1	@ DISABLED
	LDR	r5, =rROMCON3				;ROMCON1	@ DISABLED
	LDR	r6, =rROMCON4				;ROMCON1	@ DISABLED
	LDR	r7, =rROMCON5				;ROMCON1	@ DISABLED
	LDR	r8, =0x14010380				;//rSDRAMCON0 	4M ~ 20M
	LDR	r9, =rSDRAMCON1				;SDRAMCON1 	@ DISABLED
	LDR	r10,=rSDRAMCON2				;SDRAMCON2 	@ DISABLED
	LDR	r11,=rSDRAMCON3				;SDRAMCON3 	@ DISABLED
	LDR	r12,=0xCE3383FD				;//rSREFEXTCON			
	
	LDR	r0, =ARM7_EXTDBWTH 			
	STMIA	r0, {r1-r12}

;Part 5
;***************************************************************
;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, =0x400000			 ;//0x200000   ;@4M
	
COPY
	LDR		r3, [r0], #4
	STR		r3, [r2], #4
	SUBS	r1, r1,   #4
	BNE		COPY
 
;Part 6
****************************************************************
;Remap the memory
; 	FLASH	@ 16 ~ 18M 
; 	SDRAM	@ 0  ~ 16M
  
	LDR	r1, =0x00003000				;//rEXTDBWTH_R 			
	LDR	r2, =0x14040060				;//rROMCON0_R  		16-20M		
	LDR	r3, =rROMCON1_R				;ROMCON1	@ DISABLED
	LDR	r4, =rROMCON2_R				;ROMCON2	@ DISABLED
	LDR	r5, =rROMCON3_R				;ROMCON3	@ DISABLED
	LDR	r6, =rROMCON4_R				;ROMCON4	@ DISABLED
	LDR	r7, =rROMCON5_R				;ROMCON4	@ DISABLED
	LDR	r8, =0x10000380				;//rSDRAMCON0_R		0 -16M
	LDR	r9, =rSDRAMCON1_R			;SDRAMCON1 	@ DISABLED
	LDR	r10,=rSDRAMCON2_R			;SDRAMCON2 	@ DISABLED
	LDR	r11,=rSDRAMCON3_R			;SDRAMCON3 	@ DISABLED
	LDR	r12,=0xCE3383FD				;//rSREFEXTCON_R			

	LDR	r0, =ARM7_EXTDBWTH 			
	STMIA	r0, {r1-r12}

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

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

	CMP r0, r1 
	BEQ %1
 
0 	CMP r1, r3 						; Copy init data
	LDRCC r2, [r0], #4
	STRCC r2, [r1], #4
	BCC %0

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 %2

;Part 8

;***************************	
;LED Display	
;***************************	

	LDR		R1,=IOPMOD
	LDR		R0,=0x3FFFF		;// 输出使能
	STR		R0,[R1]
	
	LDR		R1,=IOPCON
	LDR		R0,=0x40000000	;// 允许TOUT0管脚输出脉冲
	STR		R0,[R1]
	
	LDR		R1,=IOPDATA
	LDR		R0,=0xFE				
	STR		R0,[R1]			;// P0 亮灯  低电平亮灯
	
	LDR     R0,=0x0
LEDDELAY
	ADD		R0,R0,#1
	CMP		R0,#&180000		;// 延时
	BNE		LEDDELAY
	
	LDR		R0,=IOPDATA
	LDR		R1,[R0]
	EOR		R1,R1,#1
	STR		R1,[R0]			;// P0 灭灯
	
;***************************		
;User Stack	
;***************************	
	LDR		R0,=0x3FF0000
	LDR		R1,=0xE7FFFF80
	STR		R1,[R0]
	
	LDR		SP,=0x3FE1000
	
;***************************		
;Interrupt special Registers	
;***************************	
	MRS		R0,CPSR
	BIC     R0,R0,#&80 			;// 修改CPSR的控制位I,允许中断
	MSR		CPSR_c,R0
	
	LDR		R1,=INTMOD
	LDR		R0,=&0
	STR		R0,[R1]
	
	LDR		R1,=INTMASK
	LDR		R0,=&1FFbFF
	STR		R0,[R1]

;***************************	
;Timer0 Special Registers	
;***************************	
	LDR		R1,=TDATA0
    LDR		R0,=0x2FAF07F		;// 定时1秒
	STR		R0,[R1]
	
	LDR		R1,=TMOD
	LDR		R0,=&03				;//=&01
	STR		R0,[R1]
	B		.


;***************************		
;Timer0 Interrupt	
;***************************	
IRQ_Handler
	STMFD	SP!,{R0-R6,LR}
	
	LDR		R1,=INTPND
	LDR		R0,=&400
	STR		R0,[R1]
	
	MRS		R0,CPSR
	BIC     R0,R0,#&80 			;//修改CPSR的控制位I,允许中断
	MSR		CPSR_c,R0
	
	LDR		R0,=IOPDATA
	LDR		R1,[R0]
	EOR		R1,R1,#1
	STR		R1,[R0]
	
	LDMFD	SP!,{R0-R6,LR}
	SUBS	PC,LR,#4

	END

⌨️ 快捷键说明

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