bootloader系列三——核心初始化

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章