初学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
- 初学JZ2440之GPIO汇编点灯
- JZ2440点灯程序
- JZ2440:GPIO
- 02-JZ2440裸机学习之GPIO实验
- bb black gpio点灯
- jz2440裸板开发之GPIO:实现流水灯
- jz2440裸板开发之GPIO:用按键控制led
- stm32初学之GPIO寄存器
- 初学汇编之笔记!
- JZ2440 arm 调用C的点灯程序
- 6410之点灯程序的反汇编代码分析
- stm32 汇编点灯程序
- 初学JZ2440之编译最小根文件系统(上)
- 初学56F8366之GPIO口操作
- STM32初学之GPIO八种模式
- 初学汇编之Debug命令
- JZ440 arm汇编点灯程序
- jz2440裸板开发之GPIO:点亮一个led灯(1)
- java关键字之this
- exit
- 【组合&元素和问题】4Sum
- LabView 随机产生10000个不大于10000的非负整数,求没有出现的那些数
- BFS——Knight Moves
- 初学JZ2440之GPIO汇编点灯
- NYOJ-71 独木舟上的旅行
- java centos 6-64位 jdk1.7 安装及环境变量配置
- 合唱队形
- 教你如何迅速秒杀掉:99%的海量数据处理面试题
- iOS study Day14-浅复制
- VC维度
- 已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定元素上的 MaxReceivedMessageSize 属性。
- sys登陆Oracle时Insufficient Privilege