📄 9263_boot.s
字号:
b 0x20 b reset ; 复位向量
b 0x4
b 0x124
b 0xc
b 0x10
b 0x14
b 0x18
b 0x1c
reset mov r13,#0x314000 mov sp, #0x31400 ; 初始化堆栈
ldr r1,0x00000160 ; = #0xfffffc00 ldr r1, =AT91C_BASE_PMC
mov r0,#2 mov r0, #OCSBYPASS
str r0,[r1,#0x20] str r0, [r1, #PMC_MOR] ; 设置主振荡器为旁路模式
mov r4,#0x10000 mov r4, #MAINRDY
mov r0,#0x20 mov r0, #TIMEOUT ; 设置超时时间(注意:现在运行于慢时钟)
loop1 ldr r3,[r1,#0x24] ldr r3, [r1, #PMC_MCFR]
and r3,r4,r3
cmp r3,#0x10000
beq 0x50 beq exclkdetected ; 查看PMC_MCFR,外部时钟输入是否稳定
subs r0,r0,#1
bne 0x38 bne loop1
exclkdetected ldr r4,0x00000164 ; = #0x0000ffff ldr r4, #MANIFMASK
ldr r3,[r1,#0x24] ldr r3, [r1, #PMC_MCFR] ; 读出外部时钟频率
and r3,r4,r3
cmp r3,#0x10
bgt 0x8c bgt clkdetected ; 如果外部时钟频率小于32.768KHz,则
mov r0,#0 mov r0, #MORCLEAR ; 复位主时钟控制器
str r0,[r1,#0x20] str r0, [r1, #PMC_MOR]
ldr r1,0x00000160 ; = #0xfffffc00
ldr r0,0x00000168 ; = #0x00004001
str r0,[r1,#0x20] str r0, [r1, #PMC_MOR] ; 设置主时钟振荡器使能
mov r4,#1 mov r4, #MOSCS
loop2 ldr r3,[r1,#0x68] ldr r3, [r1, #PMC_SR] ; 读取PMC状态
and r3,r4,r3
cmp r3,#1
bne 0x7c bne loop2 ; 循环等待主时钟振荡器稳定
clkdetected mov r0,#1 mov r0, #AT91C_PMC_CSS_MAIN_CLK
str r0,[r1,#0x30] str r0, [r1, #PMC_MCKR] ; 切换芯片时钟到主时钟
mov r4,#8 mov r4, #MCKRDY
loop3 ldr r3,[r1,#0x68] ldr r3, [r1, #PMC_SR] ; 读取PMC状态
and r3,r4,r3
cmp r3,#8
bne 0x98 bne loop3 ; 等待芯片时钟稳定
add r2,pc,#0x2c ; #0xdc ; 开始别的代码
ldmia r2,{r0,r1,r3,r4}
……
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -