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