bootloader系列三——核心初始化

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/AaricYang/article/details/81840614

arm架构指导手册下载地址:

链接:https://pan.baidu.com/s/1K7wlX3sxNTeJ9Z-tazcVcg 密码:3xii

2440芯片手册下载地址:

链接:https://pan.baidu.com/s/10QXymx0Em3d1XCmf_o2_zA 密码:o69o

ARM920T内核指导手册:

链接:https://pan.baidu.com/s/1mWz7g-xYsPbHAfjkHda2gw 密码:9a0l

1. 设置异常向量表

arm处理器共有7种异常,其对应的向量地址如下表所示(arm架构指导手册第54页)。

.text
.global	_start
_start:
		b	reset						
		ldr	pc, _undefined_instruction	
		ldr	pc, _software_interrupt		
		ldr	pc, _prefetch_abort			
		ldr	pc, _data_abort				
		ldr	pc, _not_used				
		ldr	pc, _irq					
		ldr	pc, _fiq

_undefined_instruction: .word undefined_instruction
_software_interrupt:	.word software_interrupt
_prefetch_abort:	.word prefetch_abort
_data_abort:		.word data_abort
_not_used:		.word not_used
_irq:			.word irq
_fiq:			.word fiq					

undefined_instruction:
		nop

software_interrupt:
		nop

prefetch_abort:
		nop

data_abort:
		nop

not_used:
		nop

irq:
		nop

fiq:
		nop

reset:
		bl set_svc
	        bl disable_watchdog
	        bl disable_interrupt
	        bl disable_mmu

2. svc模式

svc模式对应的编码如下图所示(arm架构指导手册41页)。通过设置状态寄存器,可以改变处理器工作模式。

状态寄存器的介绍如下图(arm架构指导手册49页)。该寄存器的0-4位用来设置处理器工作模式。

set_svc:
		mrs r0, cpsr
		bic r0, r0, #0x1f
		orr r0, r0, #0xd3
		msr cpsr, r0
		mov pc, lr

3. 关闭看门狗

watchdog可以通过WTCON寄存器控制,如下图所示(2440芯片手册462页)。

#define pWTCON 0x53000000
disable_watchdog:
		ldr r0, =pWTCON
		mov r1, #0x0
		str r1, [r0]
		mov pc, lr

4. 关闭中断

中断屏蔽寄存器的介绍如下图所示(2440芯片手册389页)。

disable_interrupt:
	mvn r1, #0x0
	ldr r0, =0x4a000008
	str r1, [r0]
	mov pc, lr

5. 关闭mmu和cache

cache操作寄存器7的介绍如下图(ARM920T内核指导手册43页)。

控制寄存器1的介绍如下图(ARM920T内核指导手册37页),用于禁止mmu和i/d cache。

disable_mmu:
	mcr p15,0,r0,c7,c7,0
	mrc p15,0,r0,c1,c0,0
	bic r0, r0, #0x00000007
	mcr p15,0,r0,c1,c0,0
	mov pc, lr

猜你喜欢

转载自blog.csdn.net/AaricYang/article/details/81840614
今日推荐