初学JZ2440之GPIO汇编点灯

来源:互联网 发布:php 执行exec 编辑:程序博客网 时间:2024/06/05 05:56

        刚拿到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

0 0