📄 head.s
字号:
#include "smdk2410.h".global _start_start: b Reset b . b . b . b . b . b IRQ b . b IRQ //------Reset: //禁看门狗 mov r1, #WTCON mov r2, #0x0 str r2, [r1]//CPSR mrs r0, cpsr bic r0, r0,#0x80 msr cpsr_c,r0 //对MPLL 的输出时钟分频,正常工作模式下,FCLK等于MPLL 的输出频率 mov r1, #CLK_CTL_BASE mov r2, #vCLKDIVN //FCLK:HCLK:PCLK=1:2:4 str r2, [r1, #oCLKDIVN] ldr r2, [r1,#oCLKCON] orr r2, r2 ,#(0x1<<14) str r2, [r1, #oCLKCON] mrc p15, 0, r1, c1, c0, 0 //read ctrl register orr r1, r1, #0xc0000000 //Asynchronous mcr p15, 0, r1, c1, c0, 0 //write ctrl register mov r1, #CLK_CTL_BASE ldr r2, =vUPLLCON_48 // SET UPLL 48MHZ str r2, [r1, #oUPLLCON] ldr r2, =vMPLLCON_200 //SET MPLL 200MHZ str r2, [r1, #oMPLLCON] mov sp, #0xc00 //1100 00000000 @ 存储控制寄存器 ldr r1, =0x48000000 adrl r2, mem_cfg_val add r3, r1, #521: ldr r4, [r2], #4 str r4, [r1], #4 cmp r1, r3 bne 1b ldr r0, =GPGCON //set gpgio ldr r1, =vGPGCON str r1, [r0] ldr r0, =GPGUP ldr r1, =vGPGUP str r1, [r0] ldr pc, =Main b .IRQ://没出示化内存前,sp赋值必须在4k范围内,注意不要覆盖前面的代码 mov sp, #0xe00 stmfd sp!,{r0-r12,lr} mov lr,pc ldr pc,=IRQ_IsrUsbd ldmfd sp!,{r0-r12,lr} subs pc,lr,#4 b ..align 4mem_cfg_val: .long 0x2211D110 @ BWSCON:using UB/LB,WAIT enable,data bus 16bit @.long 0x22111110 .long 0x00000700 @ BANK0 .long 0x00000700 @ BANK1 .long 0x00000700 @ BANK2 .long 0x00001F4C @ BANK3:0clk,4clk,14clk,1clk,0clk,6clk,normal @.long .long 0x00000700 @ BANK4 .long 0x00000700 @ BANK5 .long 0x00018005 @ BANK6 .long 0x00018005 @ BANK7 .long 0x008e0459 @ refresh:Enable,Auto Refresh,2 clocks,7 clocks,0x459 .long 0xb1 @ bank size @0xb2 .long 0x30 @ Mode register set register bank6 .long 0x30 @ Mode register set register bank7
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -