📄 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 + -