|  | 
 
| 我用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 */
 
 | 
 |