📄 head.s
字号:
/* * Name : head.s * Disc : startup code * 2007-08-03 by Qingmin Liu */#include "s3c2410.h"#include "machine.h"@@ start@.text.global _start_start:@@ Exception vector table(physical address = 0x00000000)@@ 0x00 b Reset@ 0x04HandleUndef: b HandleUndef@ 0x08HandleSWI: b HandleSWI@ 0x0cHandlePrefetchAbort: b HandlePrefetchAbort@ 0x10HandleDataAbort: b HandleDataAbort@ 0x14HandleNotUsed: b HandleNotUsed@ 0x18 b HandleIRQ@ 0x1cHandleFIQ: b HandleFIQReset: @ disable watch dog timer mov r0, #WTCON mov r1, #0x0 str r1, [r0] @ memory setup bl memsetup @ copy the 4K code from steppingstone bl copy_myself @ irq mode msr cpsr_c, #0xd2 ldr sp, =IRQ_STACK_BASE @ sys mode msr cpsr_c, #0xdf ldr sp, =SVC_STACK_BASE @ enable irq interrupts msr cpsr_c, #0x5f @ jump to main ldr lr, =stop ldr pc, =mainstop: b stop@@ sub routines@@@ nand flash read@copy_myself: mov r10, lr @ inital mov r1, #NAND_CTL_BASE ldr r2, =0xf830 @ initial value str r2, [r1, #oNFCONF] @ reset nand flash ldr r2, [r1, #oNFCONF] bic r2, r2, #0x800 @ nFCE active str r2, [r1, #oNFCONF] mov r2, #0xff @ reset command strb r2, [r1, #oNFCMD] @ delay mov r3, #0x0a1: subs r3, r3, #1 bne 1b @ wait idle state 2: ldr r2, [r1, #oNFSTAT] tst r2, #0x01 beq 2b ldr r2, [r1, #oNFCONF] orr r2, r2, #0x800 @ nFCE inactive str r2, [r1, #oNFCONF] @ steal from IRQ stack ldr sp, =IRQ_STACK_BASE ldr r0, =MBOOT_RAM_BASE @ nand_read_ll argument 1 mov r1, #0 @ nand_read_ll argument 2 mov r2, #0x20000 @ nand_read_ll argument 3 bl nand_read_ll mov pc, r10@ r1: memory control register base address@ r2: memory control register table address@ r3: r1+13 words(because there is 13 registers)memsetup: mov r1, #MEM_CTL_BASE adrl r2, mem_cfg_val add r3, r1, #13*41: @ write initial values to registers ldr r4, [r2], #4 str r4, [r1], #4 cmp r1, r3 bne 1b mov pc, lr@@ IRQ Interrupt Service Routine@HandleIRQ: sub lr, lr, #4 stmdb sp!, { r0-r12, lr } ldr lr, = int_return ldr pc, = int_handleint_return: ldmia sp!, { r0-r12, pc }^@@ data@.align 4mem_cfg_val: .long vBWSCON @ BWSCON .long vBANKCON0 @ BANKCON0 .long vBANKCON1 @ BANKCON1 .long vBANKCON2 @ BANKCON2 .long vBANKCON3 @ BANKCON3 .long vBANKCON4 @ BANKCON4 .long vBANKCON5 @ BANKCON5 .long vBANKCON6 @ BANKCON6 .long vBANKCON7 @ BANKCON7 .long vREFRESH @ REFRESH .long vBANKSIZE @ BANKSIZE .long vMRSRB6 @ MRSRB6 .long vMRSRB7 @ MRSRB7.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -