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 我看了INIT.S启动代码,对SDRAM和NAND进行了设置,但我的程序远远小于4K,按理说从NAND启动时加载到RAM中运行,不用对它们进行初始化吧! 就是地址的问题,你看一下,其中你的一句 ldr r2,=0x0300000 这句是什么意思,??自己好好想想。
出错就错在这一句上面了。 如果还没有解决,建议你看一下,我写的裸奔教程,在裸奔资料区, ldr r2,=0x03000000
loop3
sub r2,r2,#1
cmp r2,#0
bne loop3
是用来设置延时次数的,
而且我看了汇编,是编译成
mov r2,#0x300000
与地址无关呀 问题已解决,原因如下:
用7加载到SDRAM中运行时,由于主频已设,主频比较高,所以流水灯运行正常,但在这个裸奔程序中,没有对频率进行设置,这样的循环时间非常慢,故感觉好象程序没有运行,将ldr r2,=0x3000000改为ldr r2,=0x30000,延时时间变短后,从NAND启动运行正常,将它用7加载SDRAM中运行时,LED灯感觉全亮,应该是时间太短的原因,给人的错觉。谢谢machoe的回复。非常感谢,树立了继续研究下去的信心。 不用客气,互相学习,呵呵。 :)Machoe版主很好
页:
[1]