⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 9263_boot.s

📁 atmel arm 9293的内部Boot ROM部分代码反汇编及解析
💻 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 + -