📄 head.s
字号:
@ Start of executable code .global _start_start:@ Exception vector table (physical address = 0x00000000) b Reset b . b . b . b . b . b . b .@ Start VIVI headReset: @ disable watch dog timer mov r1, #0x53000000 mov r2, #0x0 str r2, [r1] @ disable all interrupts mov r1, #0x4A000000 mov r2, #0xffffffff str r2, [r1, #0x08] ldr r2, =0x7ff str r2, [r1, #0x1C] @ initialize system clocks mov r1, #0x4C000000 mvn r2, #0xff000000 str r2, [r1, #0x00] mov r1, #0x4C000000 mov r2, #0x3 str r2, [r1, #0x14] 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 @ now ,usb clock is 48Mhz ldr r0, =0x4C000000 @ Fin=12MHz, Fout=48MHz ldr r1, =0x78023 str r1, [r0,#0x08] nop nop nop nop ldr r0, = 0x4C000000 @ Fin=12MHz, Fout=48MHz ldr r1, =0x78023 str r1, [r0,#0x08] @ now, CPU clock is 200 Mhz mov r1, #0x4C000000 ldr r2, =0xa1031 str r2, [r1, #0x04] bl memsetup @ All LED on mov r1, #0x56000000 add r1, r1, #0x50 ldr r2,=0x55aa str r2, [r1, #0x0] mov r2, #0xff str r2, [r1, #0x8] mov r2, #0x00 str r2, [r1, #0x4] @ set GPIO for UART mov r1, #0x56000000 add r1, r1, #0x70 ldr r2, =0x16faaa str r2, [r1, #0x0] ldr r2, =0x7ff str r2, [r1, #0x8] bl InitUART mov r0, #'B' bl PrintChar mov r0, #'O' bl PrintChar mov r0, #'O' bl PrintChar mov r0, #'T' bl PrintChar mov r0, #' ' bl PrintChar mov r0, #'O' bl PrintChar mov r0, #'K' bl PrintChar mov r0, #'!' bl PrintChar mov r0, #'\r' bl PrintChar mov r0, #'\n' bl PrintChar die: b diememsetup: @ set memory control registers mov r1, #0x48000000 adrl r2, mem_cfg_val add r3, r1, #521: ldr r4, [r2], #4 str r4, [r1], #4 cmp r1, r3 bne 1b mov pc, lr@ Initialize UART@ r0 = number of UART portInitUART: mov r1, #0x50000000 mov r2, #0x0 str r2, [r1, #0x08] str r2, [r1, #0x0C] mov r2, #0x3 str r2, [r1, #0x00] ldr r2, =0x245 str r2, [r1, #0x04]@ #define UART_BRD ((UART_PCLK / (UART_BAUD_RATE * 16)) - 1) mov r2, #((50700000 / (115200 * 16)) - 1) str r2, [r1, #0x28] mov r3, #1001: sub r3, r3, #0x1 teq r3, #0x0 bne 1b mov pc, lr@ PrintChar : prints the character in R0@ r0 contains the character@ r1 contains base of serial port@ writes ro with XXX, modifies r0,r1,r2@ TODO : write ro with XXX reg to error handlingPrintChar: mov r1, #0x500000001: ldr r2, [r1, #0x10] tst r2, #(1 << 2) beq 1b str r0, [r1, #0x20] mov pc, lr @@ Data Area@@ Memory configuration values.align 4mem_cfg_val: .long 0x2211d110 .long 0x00000700 .long 0x00000700 .long 0x00000700 .long 0x00001f4c .long 0x00000700 .long 0x00000700 .long 0x00018005 .long 0x00018005 .long 0x008e0459 .long 0xb2 .long 0x30 .long 0x30
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -