写一篇技术美文,裸板测试之点亮GPIO的LED灯

首先拿到一块开发板,就像我现在用的这块TQ2440,arm920t,实在是嵌入式入门的必备之物。本来想移植Uboot,但自从编译成功后一直在板子上跑不起来,于是又转到自己编一个bootloader,后来也因为编译成功而无法运行感到无比头疼,于是只得从最基础的开始测试,首先从GPIO开始。
所需器材:arm开发板一块,jlink一个,当然也可以用jtag。但我的电脑没有并口,于是只能用jlink。

接着是点亮led的一段汇编程序:



.text

.global _start

_start:

LDR   R0,=0x56000010

MOV   R1,#0x00015400

STR   R1,[R0]

LDR   R0,=0x56000014

MOV   R1,#0x00000000

STR   R1,[R0]

MAIN_LOOP:

B     MAIN_LOOP

现在来详细解释一下这些地址,0x56000010,这个为GPBCON寄存器,此寄存器用于选择端口的各引脚功能,接着我们来查手册,

写一篇技术美文,裸板测试之点亮GPIO的LED灯_第1张图片

这里写了GPIO的10个引脚,每2个位决定一个引脚的功能。
这里控制LED灯的是GPB5~GPB8,一共4个LED灯,看手册发现当将该位写为01时为输出!于是我们把所需要的位都写为01.于是打开四盏灯就为0x00015400,注意十六进制和二进制转换。此时十六进制所代表的已经不是“数”,而是状态了。
再看下面,
       LDR   R0,=0x56000014
R0设为GPBDAT寄存器,此寄存器用于读写各引脚的数据,
       MOV   R1,#0x00000000
以上代码表示打开所有LED灯,因为是低电平有效,所以全部置0表示都打开。
这样我们就点亮了所有LED灯。

接着,我们需要写一个makefile(这是在linux下编程!)来让程序编译。
看程序,


LED.bin:LED.S

arm-linux-gcc -g -c -o LED.o LED.S

arm-linux-ld -Ttext 0x00000000 -g LED.o -o LED_elf

arm-linux-objcopy -O binary -S LED_elf LED.bin

clean:

rm -f LED.bin LED_elf *.o

注意,arm-linux-gcc前面必须用一个tab,不能用空格来代替!非常重要,否则无法编译。
还有arm-linux-gcc为交叉编译器,如果连这个也不知道还是买本书看看吧。
不说了,写给自己看的,希望鼓起勇气,勇往直前!



===========================================================

注:本文写于2010-06-28



你可能感兴趣的:(linux,汇编,测试,嵌入式,makefile,编译器)