?? boot.s
字號:
;********************************************************************************************
;*filename: boot.s
;*author: WUER xiao
;*create date: 2005-5-10 16:25
;*description: This file is used for 16 bit NOR FLASH bootloader
;*modify history:
;*misc:
;********************************************************************************************
F_Bit EQU 0x40
Mode_Svc EQU 0x13
import c_entry
AREA BOOTLOADER, CODE, READONLY
ENTRY ; Mark first instruction to execute
;配置16位CSA Nor Flash
ldr r1, =0x11000000 ;THE ADD OF EMIADDR_SMCONF
ldr r2, =0xB91311FF ;cm:8019的片選要使能
str r2, [ r1 ]
ldr r1, =0x11000014 ;THE ADD OF EMIADDR_SMCONF1
ldr r2, =0x01004077
str r2, [ r1 ]
ldr r1, =0x11000018 ;THE ADD OF EMIADDR_SMCONF2
ldr r2, =0x80018500
str r2, [ r1 ]
;配置工作頻率為70MHz
ldr r1, =0x1000100c
ldr r2, =0x17fff
str r2,[r1]
ldr r1, =0x10001014
ldr r2, =0x1
str r2,[r1]
ldr r1, =0x10001000
ldr r2, =0x018000cd
str r2,[r1]
ldr r1, =0x10001004
ldr r2, =0X238
str r2,[r1]
ldr r1, =0x10001004
ldr r2, =0X1238
str r2,[r1]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ldr r1, =0x1000b06c
ldr r2, =0x10
str r2,[r1]
ldr r1, =0x1000b068
ldr r2, =0x0
str r2,[r1]
ldr r1, =0x1000b07c
ldr r2, =0x0
str r2,[r1]
;拷貝kernel代碼到SDram
;將kernel代碼從FlashRom地址0x20001000搬到SDram地址0x30000000
ldr r3, =0x00000000
ldr r1, =0x30000000 ;the address of SDRAM
ldr r2, =0x20001000 ;the address of NorFlash
;LOOP
; ldrb r4, [r2], #1
; strb r4, [r1], #1
; add r3, r3, #1
; cmp r3, #0x60000 ;cm:0x30000為Kernal代碼字節長度
; bne LOOP
;搬運完工
LOOP
ldr r4, [r2], #4
str r4, [r1], #4
add r3, r3, #1
cmp r3, #0x8000 ;0xf000為Kernal代碼字節長度,#0x3C00=0xf000/4
bne LOOP
;搬運完工
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ldr r1, =0x1000b07c
ldr r2, =0xffffffff
str r2,[r1]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;remap操作
;ldr pc, =0x30000020 ;cm: modify pc point
mov r0, r0
mov r0, r0
mov r0, r0
mov r0, r0
REMAP
ldr r1, =0x11000010 ;REMAP 0 ADDRESS TO SDRAM
ldr r2, =0x0000000b
str r2, [r1]
;重新設定PC,開始操作系統啟動
ldr lr, =c_entry
; **********************************************************************
; * Enable the interrupt while staying in the supervisor mode
; **********************************************************************
MOV r0, #Mode_Svc:OR:F_Bit
MSR cpsr_c, r0
; LDR r0, =|Image$$RO$$Base|
; LDR r1, =|Image$$ZI$$Limit|
MOV pc, lr
ldr pc, =0x30000020
mov r0, r0
mov r0, r0
mov r0, r0
mov r0, r0
DEAD
b DEAD
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -