参考 mini2440用户手册.pdf(个人在P19)能够知道板子上的 LED1~4是由 GPB5~8 控制的。linux
参考 s3c2440A User Manual.pdf (个人在P284)能够看到控制 GPB的3个寄存器 con data up分别在
0x56000010 0x56000014 0x56000018。shell
参考 mini2440原理图.pdf,可见LED不是必须上拉电阻配合才能工做。.net
下面是软件考虑:
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,故编译命令为:code
arm-linux-gcc -g -c -o led.o led.s arm-linux-ld -Ttext 0x00000000 -g led.o -o led.elf
若是硬件设置从 nor 启动,片内地址在0x40000000,故编译命令为:blog
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 会看到rem
Loading section .text, size 0x24 lma 0x0 Start address 0x0, load size 36
硬件上此时0x00000000 是在nGCS0即 nor 控制中的并没有片内ram可用,实际上加载是失败了,c 以后会运行 nor 里的原住程序。get
有了以上准备工做和上一篇《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后重启,恭喜你:随便改改,接着玩吧。
io