刚拿到JZ2440开发板熟悉了它的程序烧录之后,我想大家的做法肯定都差不多,肯定是准备自己的编程之旅了,当然第一个实验肯定不能少了伟大 “点灯实验”。
点亮LED非常简单,为了养成良好的学习习惯,还是一步一步来。
第一步:查看硬件连接图(不管是什么板子,这个硬件原理图肯定是你的板子厂商提供给你的)
从我的原理图中可以看出,我所用的开发板外接了三个LED灯,分别连接到GPF4、GPF5、GPF6管脚,并且当GPIO(通用输入输出口)输出低电平时LED灯被点亮,输出高电平时LED熄灭。
第二步:查看芯片手册,获取相关寄存器的配置,这个芯片手册是由你所用的开发板上的Soc(CPU芯片)的生产厂商提供的,我的JZ2440开发板用的是S3C2440芯片,它是由三星公司基于ARM920T核设计的。
根据第一步的查找结果,我去芯片手册上查到GPF相关的配置寄存器如下:
从上面的信息中很容易得出GPF4/5/6要设置为输出口功能时GPFCON 控制寄存器bit[13:8]的值需要设置为:010101;点亮/熄灭三盏灯时需要设置GPFDAT寄存器bit[6:4]的值为:000、111;GPFUP上拉寄存器不要想配置。
第三步编写汇编程序:gpio_led.s
.text
.global _start
_start:
@关看门狗(对应地址是0x53000000),不然系统会不停的复位
ldr r0, =0x53000000
mov r1, #0x0
str r1, [r0]
@点亮三盏led灯
ldr r0, =0x56000050
mov r1, #0x00001500@bit[13:8]=010101
str r1, [r0]
ldr r0, =0x56000054
mov r1, #0x00000000@bit[6:4]=000
str r1, [r0]
MAIN_LOOP:b MAIN_LOOP
第四步编写编译链接程序Makefile
CFLAG = -Wall
gpio_led.bin : gpio_led.s
#编译但不链接
arm-linux-gcc $(CFLAG) -g -o gpio_led.o -c gpio_led.s
#指定链接地址为0x00000000,生成elf格式镜像
arm-linux-ld -Ttext 0x00000000 -g gpio_led.o -o gpio_led_elf
#去除elf格式信息
arm-linux-objcopy -O binary -S gpio_led_elf gpio_led.bin
clean:
rm -rf gpio_led.bin gpio_led_elf *.o