📄 boot.s
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Copyright (c) 2006 by RockOS.
;; All rights reserved.
;;
;; This software is supported by Rock Software Workroom.
;;
;; Any bugs please contact the author with e-mail or QQ:
;; E-mail : baobaoba520@yahoo.com.cn
;; QQ : 59681888
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;File name : 44b_boot.s
;;Description : main entry point for s3c44b0x cpu when powered on
;; :
;; :
;; :
;; :
;;Auther : sunxinqiu
;;History :
;; 2006-3-15 first release.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
include ..\inc\44b.inc
IMPORT Main
AREA __ROM_Entry,CODE,READONLY
ENTRY
EXPORT reset
reset
b ResetHandler
b UndefHandler
b SwiHandler
b PabortHandler
b DabortHandler
b .
b IrqHandler
b FiqHandler
UndefHandler
SwiHandler
PabortHandler
DabortHandler
IrqHandler
FiqHandler
b .
ResetHandler
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; disable all interrupts by set I_bit and F_bit in PSR
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
msr CPSR_c, #(SVC_MODE|NO_INT)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; disable watchdog
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ldr r0,=rWTCON
ldr r1,=0x0
str r1,[r0]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Init PLL clock
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ldr r0,=rLOCKTIME ;PLL lock time when CPU wakes up from SL_IDLE or STOP mode
ldr r1,=0xfff
str r1,[r0]
ldr r0,=rPLLCON ;PLL
ldr r1,=((M_DIV<<12)+(P_DIV<<4)+S_DIV)
str r1,[r0]
ldr r0,=rCLKCON
ldr r1,=0x7ff8 ;;All unit block CLK enable
str r1,[r0]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Init memory controller
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ldr r0,=SMRDATA ;; memory control config data
ldmia r0,{r1-r13}
ldr r0,=0x01c80000 ;BWSCON Address
stmia r0,{r1-r13}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Move RW/ZI data from flash area to RAM area.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LDR r0, =|Image$$RO$$Limit|; Get pointer to ROM data
LDR r1, =|Image$$RW$$Base| ; and RAM copy
LDR r3, =|Image$$ZI$$Base| ; Zero init base => top of
;; for RW area
CMP r0, r1
BEQ %1
0 CMP r1, r3
LDRCC r2, [r0], #4
STRCC r2, [r1], #4
BCC %0
;; for ZI area
1 LDR r1, =|Image$$ZI$$Limit|
MOV r2, #0
2 CMP r3, r1
STRCC R2, [r3], #4
BCC %2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Init stack for each mode.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
msr cpsr_cxsf, #(FIQ_MODE|NO_INT) ;;FIQ Mode
ldr sp, =FiqStack
add sp, sp, #4096
msr cpsr_cxsf, #(IRQ_MODE|NO_INT) ;;IRQ Mode
ldr sp, =IrqStack
add sp, sp, #4096
msr cpsr_cxsf, #(SVC_MODE|NO_INT) ;;SVC Mode
ldr sp, =SvcStack
add sp, sp, #4096
msr cpsr_cxsf, #(ABORT_MODE|NO_INT) ;;Abort Mode
ldr sp, =AbortStack
add sp, sp, #4096
msr cpsr_cxsf, #(UNDEF_MODE|NO_INT) ;;Undef Mode
ldr sp, =UndefStack
add sp, sp, #4096
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Back to SVC mode and enter C code.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
msr cpsr_cxsf, #SVC_MODE|NO_INT
b Main
SMRDATA
DCD 0x11111100 ;;BWSCON
DCD 0x00000600 ;;BANKCON0
DCD 0x00007ffc ;;BANKCON1
DCD 0x00007ffc ;;BANKCON2
DCD 0x00007ffc ;;BANKCON3
DCD 0x00007ffc ;;BANKCON4
DCD 0x00007ffc ;;BANKCON5
DCD 0x00018000 ;;BANKCON6
DCD 0x00018000 ;;BANKCON7
DCD 0x0086060e ;;REFRESH
DCD 0x00000010 ;;BANKSIZE
DCD 0x00000020 ;;MRSRB6
DCD 0x00000020 ;;MRSRB7
AREA __mode_stack, DATA, READWRITE
UserStack % 0 ;; stack for User/System mode.
FiqStack % 4096 ;; stack for FIQ mode.
IrqStack % 4096 ;; stack for IRQ mode.
SvcStack % 4096 ;; stack for SVC mode.
AbortStack % 4096 ;; stack for Abort mode.
UndefStack % 4096 ;; stack for Undef mode.
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -