天嵌 ARM开发社区

 找回密码
 注册
查看: 1924|回复: 7

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

[复制链接]
吕氏春秋8266 发表于 2010-11-7 13:31:58 | 显示全部楼层 |阅读模式
我用汇编编写一个跳马灯裸奔程序,完全按教程进行设置,用7下载到SDRAM中完全能正常运行,并通过JLINK调试,其地址从0x30000000运行,但用A命令下载到NAND中就无法运行了,最先以为是地址不一致引起的,故重新设置地址为0x0,但用JLINK调试时全是乱码,下载到NAND中也无法正常运行。我的程序很小,才几百个字节,就是简单设置GPB5-GPB8输出低电平,点亮LED灯,望大侠指点一二。
area Init,code,readonly
        entry
       
GPBCON          EQU  0x56000010     ;Port B control
GPBDAT          EQU  0x56000014     ;Port B data
GPBUP           EQU  0x56000018     ;Pull-up control B

GPFCON      EQU  0x56000050
GPFDAT      EQU  0x56000054

INTMSK           EQU  0x4a000008    ;Interrupt mask control
INTSUBMSK        EQU  0x4a00001c    ;Interrupt sub mask


WTCON         EQU  0x53000000       ;Watch-dog timer mode
WTDAT         EQU  0x53000004       ;Watch-dog timer data
WTCNT         EQU  0x53000008       ;Eatch-dog timer count
       
start
        ldr        r0,=WTCON       ;watch dog disable
        ldr        r1,=0x0
        str        r1,[r0]

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

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

        ldr        r0,=GPBCON
        ldr        r1,=0x15400
        str        r1,[r0]       
       
        ldr        r0,=GPBDAT
        ldr r1,=0x140
        str r1,[r0]
       
loop
    mov r2,#0xf
    ldr r0,=GPFDAT   
    ldr r1,[r0]
   
    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,[r0]
   
    ldr r2,=0x03000000       
loop1
        sub r2,r2,#1
        cmp r2,#0
        bne loop1
       
        ldr r1,=0x1c0        ;led1
        str r1,[r0]

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


    b loop
        end

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 吕氏春秋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版主很好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-6-16 07:29 , Processed in 1.046875 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表