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

📄 init.s

📁 微型OS引导程序源码微型
💻 S
字号:
;************************************************************************************************;Beijing instittue of technology;File Name:		Init.s;Description:		Init.;Author:			chaisc;Date:			200312-1;SDRAM Configuration:	Use ljg.txt,SDRAM remap to address 0x0~0x100,0000(16MB) ;************************************************************************************************		GET	mem.a	GET	casia1.a	IMPORT  main_entry		;声明要调用的外部文件名字,即main_entry.c	CODE32	AREA    Init,CODE,READONLY	ENTRY 	B       Reset_Handler		        	NOP         	
		NOP                	NOP       
        	NOP       		NOP         	NOP               	NOP       Reset_Handler	;******************************************************	;mask all interrupt;******************************************************	LDR	R1,=0x3ff0000	LDR	R0,=0xE7ffff90		;配置SYSCFG寄存器,内部RAM映射地址不变        STR	R0,[R1]			;不使能cache
	LDR	r0, =0x3FF0000 + 0x3010	LDR	r1, =rEXTDBWTH  	LDR	r2, =rROMCON0    	LDR	r3, =rROMCON1	LDR	r4, =rROMCON2	LDR	r5, =rROMCON3	LDR	r6, =rROMCON4	LDR	r7, =rROMCON5	LDR	r8, =0x14010380	LDR	r9, =rSDRAMCON1	LDR	r10,=rSDRAMCON2	LDR	r11,=rSDRAMCON3	LDR	r12,=rSREFEXTCON	STMIA	r0, {r1-r12}	;启动后第一次配置寄存器,Flash在0~2M,RAM在4~20M	    	ldr	r0, =0x0	ldr	r1, =0x200000			ldr	r2, =0x400000rom2ram_copy_loop	ldr	r3, [r0], #4		;这么简单的拷贝实现方法,但很有效呀	str	r3, [r2], #4		;把0~2M内(即整个Flash)复制到	subs	r1, r1, #4		;从4M处开始的RAM中,为Remap做准备	bne	rom2ram_copy_loop	;数据。注意:这中间包含了Booloader和uclinux代码。全部拷贝了过去。        	LDR	r0, =0x3FF0000 + 0x3010	;呵呵以下是真正的Remap了	LDR	r1, =0x00003002  	;rEXTDBWTH基本不变	LDR	r2, =0x12040060   	;Flash映射到了16M~18M	LDR	r3, =rROMCON1	LDR	r4, =rROMCON2	LDR	r5, =rROMCON3	LDR	r6, =rROMCON4	LDR	r7, =rROMCON5	LDR	r8, =0x10000380		;RAM映射到了0~16M	LDR	r9, =rSDRAMCON1	LDR	r10,=rSDRAMCON2	LDR	r11,=rSDRAMCON3	LDR	r12,=rSREFEXTCON	STMIA	r0, {r1-r12}         LDR    	R1,=0x3ff5000	;呵呵又被我猜对了,下边就是判断         LDR	R0,=0x0			;跳线1决定是加载Linux还是启动Bootloader         STR	R0,[R1]			;把IO设置为输入,读取IO引脚状态到R1中         LDR    	R0,=0x3ff5008    ;             LDR    	R1,[R0]		;         AND    	R1,R1,#0x08	;         CMP    	R1,#0x08         BNE    	Next		;如果P3为第电平则为Bootloader模式         LDR    	R0,=0x10000	;如果为高电平则为Linux模式
         MOV    	PC,R0		;Linux内核存放在0X10000处,即Flash中前64K存放Bootloader;Flash中前64K存放Bootloader,从64K~2M处存放Uclinux。uclinux的入口在0X10000(64K)处
Next	;********************************************************;Initialise system stack for different processor modes
;;Change to Interrupt Mode (IRQ);********************************************************	mov	r0, #0x12	MSR	cpsr_c, r0	mov 	sp,#0x70000		;中断模式的堆栈设在0X70000处
;********************************************************
;Change to Fast Interrupt Mode (FIQ)
;********************************************************	mov	r0,#0x11	MSR	cpsr_c, r0					mov 	sp,#0x7f000		;快速中断模式的堆栈设置在0x7f000
;********************************************************
;Change to Supervisor Mode (SVC)
;********************************************************         mov	r0,#0x13	MSR	cpsr_c, r0					mov 	sp,#0x80000		;管理模式的堆栈设置在0x80000	         LDR	R1,=0x3FF4000		;所有的中断都在中断模式寄存器中设置为IRQ	LDR	R0,=0x0         STR	R0,[R1];注意:此处因为是启动在Bootloader方式下,所以uclinux内核所占的RAM可以被覆盖,上边的各个堆栈可以任意设置 *********************************************************
	IMPORT  	C_Entry    	BL      	C_Entry		;该函数在main_entry.c文件中	B  	.	   	END

⌨️ 快捷键说明

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