|
我用SecureCRT [1] Download u-boot or STEPLDR.nb1 or other bootloader to Nand Flash第一项,下载u-boot到Nand flash,开关拨到Nand重新上电后白屏,led没有亮,SecureCRT输出一个乱码,下面是start.S代码,谁帮我分析一下原因,谢谢了。
- start_code:
- /*
- * set the cpu to SVC32 mode
- */
- mrs r0,cpsr
- bic r0,r0,#0x1f
- orr r0,r0,#0xd3
- msr cpsr,r0
- /*bl coloured_LED_init
- bl red_LED_on*/
- #if defined(CONFIG_AT91RM9200DK) || defined(CONFIG_AT91RM9200EK)
- /*
- * relocate exception table
- */
- ldr r0, =_start
- ldr r1, =0x0
- mov r2, #16
- copyex:
- subs r2, r2, #1
- ldr r3, [r0], #4
- str r3, [r1], #4
- bne copyex
- #endif
- #if defined(CONFIG_S3C2400) || defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440)
- /* turn off the watchdog */
- # if defined(CONFIG_S3C2400)
- # define pWTCON 0x15300000
- # define INTMSK 0x14400008 /* Interupt-Controller base addresses */
- # define CLKDIVN 0x14800014 /* clock divisor register */
- #else
- # define pWTCON 0x53000000
- # define INTMSK 0x4A000008 /* Interupt-Controller base addresses */
- # define INTSUBMSK 0x4A00001C
- # define CLKDIVN 0x4C000014 /* clock divisor register */
- # endif
- ldr r0, =pWTCON
- mov r1, #0x0
- str r1, [r0]
- /*
- * mask all IRQs by setting all bits in the INTMR - default
- */
- mov r1, #0xffffffff
- ldr r0, =INTMSK
- str r1, [r0]
- # if defined(CONFIG_S3C2410)
- ldr r1, =0x3ff
- ldr r0, =INTSUBMSK
- str r1, [r0]
- # endif
- # if defined(CONFIG_S3C2440)
- ldr r1, =0x7fff
- ldr r0, =INTSUBMSK
- str r1, [r0]
- # endif
- #if defined(CONFIG_S3C2440)
- #define MPLLCON 0x4C000004
- #define UPLLCON 0x4C000008
- ldr r0, =CLKDIVN
- mov r1, #5
- str r1, [r0]
- ldr r0, =MPLLCON
- ldr r1, =0x7f021
- str r1, [r0]
- ldr r0, =UPLLCON
- ldr r1, =0x38022
- str r1, [r0]
- #else
- /* FCLK:HCLK:PCLK = 1:2:4 */
- /* default FCLK is 120 MHz ! */
- ldr r0, =CLKDIVN
- mov r1, #3
- str r1, [r0]
- #endif
- #endif /* CONFIG_S3C2400 || CONFIG_S3C2410 || CONFIG_S3C2440 */
- /*
- * we do sys-critical inits only at reboot,
- * not when booting from ram!
- */
- #ifndef CONFIG_SKIP_LOWLEVEL_INIT
- bl cpu_init_crit
- #endif
- #if defined(CONFIG_S3C2440)
- #define GPBCON 0x56000010
- #define GPBDAT 0x56000014
- #define GPBUP 0x56000018
- ldr r0, =GPBUP
- ldr r1, =0x7FF
- str r1, [r0]
- ldr r0, =GPBCON
- ldr r1, =0x154FD
- ldr r1, [r0]
- ldr r0, =GPBDAT
- ldr r1, =0xC0
- str r1, [r0]
- #endif
- /* #define BOOT_FROM_NOR_FLASH 1 */
- #ifdef BOOT_FROM_NOR_FLASH
- #ifndef CONFIG_SKIP_RELOCATE_UBOOT
- relocate: /* relocate U-Boot to RAM */
- adr r0, _start /* r0 <- current position of code */
- ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
- cmp r0, r1 /* don't reloc during debug */
- beq stack_setup
- ldr r2, _armboot_start
- ldr r3, _bss_start
- sub r2, r3, r2 /* r2 <- size of armboot */
- add r2, r0, r2 /* r2 <- source end address */
- copy_loop:
- ldmia r0!, {r3-r10} /* copy from source address [r0] */
- stmia r1!, {r3-r10} /* copy to target address [r1] */
- cmp r0, r2 /* until source end addreee [r2] */
- ble copy_loop
- #endif /* CONFIG_SKIP_RELOCATE_UBOOT */
- #else
- /* boot from Nand flash */
- mov r1, #NAND_CTL_BASE
- ldr r2, =((3<<12)|(7<<8)|(7<<4))
- str r2, [r1, #oNFCONF]
- ldr r2, [r1, #oNFCONF]
- ldr r2, =((1<<4) | 1)
- str r2, [r1, #oNFCONT]
- ldr r2, [r1, #oNFCONT]
- ldr r2, =0x04
- str r2, [r1, #oNFSTAT]
- str r2, [r1, #oNFSTAT]
- mov r2, #0xff
- strb r2, [r1, #oNFCMD]
- mov r3, #0 /* wait */
-
- nand1:
- add r3, r3, #0x1 /* */
- cmp r3, #0xa
- blt nand1
- nand2:
- ldr r2, [r1, #oNFSTAT] /* */
- tst r2, #0x4
- beq nand2
- ldr r2, [r1, #oNFCONT]
- orr r2, r2, #0x2 /* */
- str r2, [r1, #oNFCONT]
-
- /* get ready to call C functions */
- ldr sp, DW_STACK_START
- mov fp, #0
- /* copy U-Boot to RAM */
- ldr r0, =TEXT_BASE /* first parameter for C function */
- mov r1, #0 /* second parameter for C function */
- mov r2, #0x30000 /* the size of u-boot,third param for C function */
- bl nand_read_ll /* Call C function */
- tst r0, #0
- beq ok_nand_read
- bad_nand_read:
- loop2:
- b loop2 /* infinite loop */
- ok_nand_read:
- /* */
- mov r0, #0
- ldr r1, =TEXT_BASE
- mov r2, #0x400 /* 1024*4bytes = 4KB, */
- go_next:
- ldr r3, [r0], #4
- ldr r4, [r1], #4
- teq r3, r4
- bne notmath
- subs r2, r2, #1
- beq stack_setup
- bne go_next
- notmath:
- loop3:
- ldr r0, =GPBUP
- ldr r1, =0x7FF
- str r1, [r0]
- ldr r0, =GPBCON
- ldr r1, =0x154FD
- ldr r1, [r0]
- ldr r0, =GPBDAT
- ldr r1, =0xC0
- str r1, [r0]
- b loop3
- #endif /* CONFIG_S3C2440_NAND_BOOT */
复制代码
|
|