嵌入式Linux 测试GPIO控制LED,嵌入式技术之GPIO控制LED工作原理

基本概念:

1.GPIO--通用IO口,通过芯片针脚来控制或读取外设的数据。

2.GPIO口的使用原理,通过设置GPXXCON, GPXXDAT, GPXXPUL等寄存器来设置GPIO口的状态。

原理图:

跟硬件相关的部分,一定要阅读原理图,然后通过查找SoC的用户手册来查找相应的寄存器设置即可。

底板电路图:

6c0ef6ad6b6eaecc8997a593f0377c2a.png

核心板电路图:

9b1744525701555b46dc22b6c9fd92d9.png

可知在OK6410上4个LED灯是通过GPM这一组的GPIO口控制的,分别是GPM0-GPM3四组。

然后打开S3C6410X User's Manual,查找GPM相关的寄存器:

9206530d3c4c6bbcfb4946556481c369.png

通过上面内容找到:

GPMCON 地址 0x7F008820

GPMDAT 地址 0x7F008824

由于LED连接着GPM0-GPM3,所以通过上面的内容可以知道,GPMCON设置的值应该为0x00001111,意思是将GPM0-GPM3设置为输出,这样通过设置GPMDAT[5:0]来控制响应针脚的高低电平,使LED亮或灭。

代码:(以下代码参考了友善之臂Tiny6410的汇编代码,并非原创)

汇编代码:

056b92b118675cb883239955d30fcfeb.gifstart.S

Makefile:

1 led.bin: start.o

2 arm-linux-ld -Ttext 0x50008000 -o led.elf $^

3 arm-linux-objcopy -O binary led.elf led.bin

4 arm-linux-objdump -D led.elf > led_elf.dis

5 %.o : %.S

6 arm-linux-gcc -o $@ $< -c

7

8 %.o : %.c

9 arm-linux-gcc -o $@ $< -c

10

11 clean:

12 rm *.o *.elf *.bin *.dis -rf

然后make,可以得到led.bin,通过tftp下载到开发板中:

e512ec3304bf8e3f5ebb93b59af002f4.png

然后就可以看到OK6410板上的四个LED灯开始一起闪烁。

总结:

1.GPIO口的使用其实是SoC外设控制中最简单的,只要抓住GPIO的几个寄存器,将他们的值设置正确,就可以完成相应的控制功能。

2.一定要学会查看SoC的User's Manual的方法,这样当SoC换成其他品牌时,可以以不变应万变。

3.使用ld来链接.o文件时,一般会指定-Ttext选项,表示该代码会在内存的哪个地址加载,通过查看User's Manual,你可以决定这个地址的范围,如下图,0x50000000-0x6FFFFFFF地址区间映射到DRAM上,所以绝大部分的资料中,S3C6410中的内存地址都是0x5xxxxxxx类似的地址。也有一些0xcxxxxxxx类似的地址,这是打开SoC中的MMU后进行物理地址和虚拟地址映射后的结果,如果打开了MMU,就可以使用0xcxxxxxxx这样的地址,否则无法使用。

a3df319bca8ec1ae130d55871c6eb9ae.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值