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

相關文章
相關標籤/搜索