吕氏春秋8266 发表于 2010-11-7 13:31:58

SDRM运动正常程序下载NAND不能运行

我用汇编编写一个跳马灯裸奔程序,完全按教程进行设置,用7下载到SDRAM中完全能正常运行,并通过JLINK调试,其地址从0x30000000运行,但用A命令下载到NAND中就无法运行了,最先以为是地址不一致引起的,故重新设置地址为0x0,但用JLINK调试时全是乱码,下载到NAND中也无法正常运行。我的程序很小,才几百个字节,就是简单设置GPB5-GPB8输出低电平,点亮LED灯,望大侠指点一二。
area Init,code,readonly
        entry
       
GPBCON        EQU0x56000010   ;Port B control
GPBDAT        EQU0x56000014   ;Port B data
GPBUP           EQU0x56000018   ;Pull-up control B

GPFCON      EQU0x56000050
GPFDAT      EQU0x56000054

INTMSK           EQU0x4a000008    ;Interrupt mask control
INTSUBMSK        EQU0x4a00001c    ;Interrupt sub mask


WTCON         EQU0x53000000       ;Watch-dog timer mode
WTDAT         EQU0x53000004       ;Watch-dog timer data
WTCNT         EQU0x53000008       ;Eatch-dog timer count
       
start
        ldr        r0,=WTCON       ;watch dog disable
        ldr        r1,=0x0
        str        r1,

        ldr        r0,=INTMSK
        ldr        r1,=0xffffffff;all interrupt disable
        str        r1,

        ldr        r0,=INTSUBMSK
        ldr        r1,=0x7fff                ;all sub interrupt disable
        str        r1,

        ldr        r0,=GPBCON
        ldr        r1,=0x15400
        str        r1,       
       
        ldr        r0,=GPBDAT
        ldr r1,=0x140
        str r1,
       
loop
    mov r2,#0xf
    ldr r0,=GPFDAT   
    ldr r1,
   
    tst r1,#2             ;k1
    andeq r2,r2,#0xe
   
    tst r1,#0x10      ;k2
    andeq r2,r2,#0xd
   
    tst r1,#4         ;k3
    andeq r2,r2,#0xb
   
    tst r1,#1            ;k4
    andeq r2,r2,#7
   
   
   
    mov r1,r2,lsl#5
   
    ldr r0,=GPBDAT
    str r1,
   
    ldr r2,=0x03000000       
loop1
        sub r2,r2,#1
        cmp r2,#0
        bne loop1
       
        ldr r1,=0x1c0      ;led1
        str r1,

       
        ldr r2,=0x03000000       
loop2
        sub r2,r2,#1
        cmp r2,#0
        bne loop2
       
        ldr r1,=0x1a0      ;led2
        str r1,
       
        ldr r2,=0x03000000       
loop3
        sub r2,r2,#1
        cmp r2,#0
        bne loop3
       
        ldr r1,=0x160      ;led3
        str r1,
       
        ldr r2,=0x03000000       
loop4
        sub r2,r2,#1
        cmp r2,#0
        bne loop4
       
        ldr r1,=0x0e0      ;led4
        str r1,
       
        ldr r2,=0x03000000       
loop5
        sub r2,r2,#1
        cmp r2,#0
        bne loop5


    b loop
        end

吕氏春秋8266 发表于 2010-11-7 13:36:07

我看了INIT.S启动代码,对SDRAM和NAND进行了设置,但我的程序远远小于4K,按理说从NAND启动时加载到RAM中运行,不用对它们进行初始化吧!

machoe 发表于 2010-11-7 13:39:16

就是地址的问题,你看一下,其中你的一句 ldr r2,=0x0300000 这句是什么意思,??自己好好想想。
出错就错在这一句上面了。

machoe 发表于 2010-11-7 13:40:25

如果还没有解决,建议你看一下,我写的裸奔教程,在裸奔资料区,

吕氏春秋8266 发表于 2010-11-7 13:55:04

ldr r2,=0x03000000      
loop3
      sub r2,r2,#1
      cmp r2,#0
      bne loop3
是用来设置延时次数的,
而且我看了汇编,是编译成
mov r2,#0x300000
与地址无关呀

吕氏春秋8266 发表于 2010-11-7 14:51:29

问题已解决,原因如下:
用7加载到SDRAM中运行时,由于主频已设,主频比较高,所以流水灯运行正常,但在这个裸奔程序中,没有对频率进行设置,这样的循环时间非常慢,故感觉好象程序没有运行,将ldr r2,=0x3000000改为ldr r2,=0x30000,延时时间变短后,从NAND启动运行正常,将它用7加载SDRAM中运行时,LED灯感觉全亮,应该是时间太短的原因,给人的错觉。谢谢machoe的回复。非常感谢,树立了继续研究下去的信心。

machoe 发表于 2010-11-7 16:00:43

不用客气,互相学习,呵呵。

天嵌_support1 发表于 2010-11-8 11:39:01

:)Machoe版主很好
页: [1]
查看完整版本: SDRM运动正常程序下载NAND不能运行