我用的是扬创的板子,它有4个LED,但是接在哪里,需要通过它的电路图才知道
我的代码:
.globl _start
_start:
ldr r0, =0x56000050
mov r1, #0x00000100
str r1, [r0]
loop1:
ldr r0, =0x56000054
mov r1, #0x00000000 //低电平,使灯亮
str r1, [r0]
bl delay
ldr r1, =0xffffffff //高电平,使灯灭
str r1, [r0]
bl delay
b loop1
delay:
ldr r4, =0x1ffff
delay1:
sub r4, r4, #1
cmp r4, #0x0
bne delay1
mov pc, lr
关键:
1. 找到LED对应的GPIO,请看每块板子的电路图,我发现是GPF4-7(对应4个LED),
2. 使灯灭使用0xffffffff,全1表示高电平,我调试了一会儿才知道。
3. 补充更新:继续调试,发现并不是用所有位进行控制,如果需要让LED4亮,其它熄灭,设置值为0xffffffef,第5位为0,低电平就可以了,如果让LED6,LED7同时亮,设置为0xffffff3f,第7,8位为0就可以了,5,6位为高电平,熄灭。
编译:
/opt/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin/arm-softfloat-linux-gnu-gcc -g -c led.S
/opt/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin/arm-softfloat-linux-gnu-ld -g -Ttext 0x00000000 led.o -o led.elf
/opt/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux-gnu/bin/arm-softfloat-linux-gnu-objcopy -O binary -S led.elf led.bin
生成led.bin后,使用它提供的SJF2440.exe程序通过并口->Jtag烧进Nand Flash,我想SJF2440可以得到从网上,也许三星的网站也会有。
此时,他就像是一个单片机,从0x0的位置执行我的这一段代码,哈哈,我终于明白了单片机的工作原理,当年在学校一直没有学好,本打算再找一本书看看,看来不需要了。现在终于明白了。