📄 head.s
字号:
#include "config.h"
#define hanlder(offset) \
sub sp, sp, #4; \
stmfd sp!, {r0}; \
adr r0, evt; \
add r0, r0, #(offset); \
ldr r0, [r0]; \
str r0, [sp, #4]; \
ldmfd sp!, {r0, pc}
.global _start
.global evt
_start:
b reset
b undef
b swi
b pabt
b dabt
b .
b irq
b fiq
evt:
.long 0x00 @ NOT used
.long 0x04
.long 0x08
.long 0x0c
.long 0x10
.long 0x14 @ NOT used
.long 0x18
.long 0x1c
undef:
hanlder(0x4)
swi:
hanlder(0x8)
pabt:
hanlder(0xc)
dabt:
hanlder(0x10)
irq:
hanlder(0x18)
fiq:
hanlder(0x1c)
reset:
@ disable watch dog timer
ldr r0, =WTCON
ldr r1, =0x0
str r1, [r0]
@ adjust locktime
ldr r0, =LOCKTIME
ldr r1, =0x00ffffff
str r1, [r0]
@ PCLK:HCLK:FCLK = 1:2:4
ldr r0, =CLKDIVN
ldr r1, =0x3
str r1, [r0]
@ asynchronous bus mode
mrc p15, 0, r0, c1, c0, 0 @ read ctrl register
orr r0, r0, #0xc0000000 @ Asynchronous
mcr p15, 0, r0, c1, c0, 0 @ write ctrl register
@ CPU clock to 200Mhz
ldr r0, =MPLLCON
ldr r1, =((P_MDIV<<12)|(P_PDIV<<4)|P_SDIV)
str r1, [r0]
@ initialise memory
bl memsetup
ldr sp, =SIZE_BOOT_SRAM
bl main
die:
b die
memsetup:
ldr r1, =BWSCON
adrl r2, mem_cfg_val
add r3, r1, #52
1:
ldr r4, [r2], #4
str r4, [r1], #4
cmp r1, r3
bne 1b
mov pc, lr
@
@ Memory configuration values
@
.align 4
mem_cfg_val:
.long ((B7_ST<<31)+(B7_WS<<30)+(B7_DW<<28)+(B6_ST<<27)+(B6_WS<<26)+(B6_DW<<24)+(B5_ST<<23)+(B5_WS<<22)+(B5_DW<<20)+(B4_ST<<19)+(B4_WS<<18)+(B4_DW<<16)+(B3_ST<<15)+(B3_WS<<14)+(B3_DW<<12)+(B2_ST<<11)+(B2_WS<<10)+(B2_DW<<8)+(B1_ST<<7)+(B1_WS<<6)+(B1_DW<<4)+(B0_DW<<1)+(0)) @BWSCON
.long ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tcah<<4)+(B0_Tacp<<2)+(B0_PMC)) @GCS0
.long ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tcah<<4)+(B1_Tacp<<2)+(B1_PMC)) @GCS1
.long ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tcah<<4)+(B2_Tacp<<2)+(B2_PMC)) @GCS2
.long ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tcah<<4)+(B3_Tacp<<2)+(B3_PMC)) @GCS3
.long ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tcah<<4)+(B4_Tacp<<2)+(B4_PMC)) @GCS4
.long ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tcah<<4)+(B5_Tacp<<2)+(B5_PMC)) @GCS5
#if B6_MT==MT_SDRAM
.long ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN)) @GCS6
#endif /*B6_MT*/
#if B7_MT==MT_SDRAM
.long ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN)) @GCS7
#endif /*B7_MT*/
.long ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Tsrc<<18)+REFCNT) @REFRESH
.long ((BURST_EN<<7)+(SCKE_EN<<5)+(SCLK_EN<<4)+(BK76MAP)) @BANKSIZE @BANKSIZE
.long ((B6_WBL<<9)+(B6_TM<<7)+(B6_CL<<4)+(B6_BT<<3)+(B6_BL)) @MRSRB6
.long ((B7_WBL<<9)+(B7_TM<<7)+(B7_CL<<4)+(B7_BT<<3)+(B7_BL)) @MRSRB7
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -