mini2440 点灯

参考 mini2440用户手册.pdf(我的在P19)可以知道板子上的 LED1~4是由 GPB5~8 控制的。

参考 s3c2440A User Manual.pdf (我的在P284)可以看到控制 GPB的3个寄存器 con data up分别在
0x56000010 0x56000014 0x56000018。

参考 mini2440原理图.pdf,可见LED不是必须上拉电阻配合才能工作。

下面是软件考虑:
1. 禁掉 watch dog。
2. 设置 GPBcon 的 5~8。
3. 设置 GPBdata 的 5~8。
4. 进入死循环。

.text
.global _start
_start:
    ldr r0, =0x53000000
    ldr r1, =0
    str r1, [r0]            @ disable watch dog
    ldr r0, =0x56000010     @ GPB con
    ldr r1, =0x15400        @ set GPBcon 5~8
    str r1, [r0], #4
    ldr r1, =0              @ all GPBdata pins output 0
    str r1, [r0], #4
_end:
    b _end

编译参数取决于硬件设置,如果硬件设置从 nand 启动,那么片内ram地址在0x0000000,故编译命令为:

arm-linux-gcc -g -c -o led.o led.s
arm-linux-ld -Ttext 0x00000000 -g led.o -o led.elf

如果硬件设置从 nor 启动,片内地址在0x40000000,故编译命令为:

arm-linux-gcc -g -c -o led.o led.s
arm-linux-ld -Ttext 0x40000000 -g led.o -o led.elf

如果编译方式和硬件启动设置不匹配,那么在gdb load 时不会提示错误但作 c 后实际是按硬件设置方式运行的。例如硬件设置nor启动,片内ram在0x40000000但编译却指定 -Ttext 0x00000000,那么 gdb load 会看到

Loading section .text, size 0x24 lma 0x0
Start address 0x0, load size 36

硬件上此时0x00000000 是在nGCS0即 nor 控制中的并无片内ram可用,实际上加载是失败了,c 之后会运行 nor 里的原住程序。

有了以上准备工作和上一篇《mini2440 + jlink 第一步》介绍的 OpenOCD 调试技巧后就可以玩第一个简单程序 -- 点灯了:
1. openocd (已经配置好 jlink.cfg 和 mini2440.cfg)
2. telnet 127.0.0.1 4444    ->  reset halt
3. arm-linux-gdb led.elf    ->  target remote 127.0.0.1:3333    ->  load    -> c
上述 1 2 3 是在3个不同控制台下完成的,-> 代表新一行的开始。如果看见4个LED 都亮了,而且板子没有1s后重启,恭喜你:随便改改,接着玩吧。



你可能感兴趣的:(用户手册,片内ram地址,原理图)