mini2440 点灯

参考 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

相关文章
相关标签/搜索