GPIO意思就是通用输入输出,一些引脚可以通过他们输出高低电平,或者通过它们读入引脚的状态。
对GPIO的操作是对所有硬件的操作最基本的技能。
一、通过寄存器来操作GPIO引脚,一个引脚可以用于输入、输出或者其他的特殊功能,那么一定有寄存器来配置这些功能,
对于输入,就是读取引脚的状态,一定可以从寄存器在中读取到引脚的状态;对于输出,也有相应的寄存器,向寄存器中
写入数据使引脚输出高低电平;其他特殊功能,有另外的寄存器来控制它。
对于S3C2440来说,同样的道理,也会有上面所说的寄存器,GPxCON用于配置引脚的功能的(输入、输出或其他功能),
GPxDAT用于读/写引脚数据;另外GPxUP用于是否使用内部上拉电阻。
1、GPxCON寄存器-配置寄存器
对于S3C2440,除了GPACON特殊外(寄存器每一位对应一个引脚),其它都是寄存器的没2位控制一根引脚:00表示输入,
01表示输出、10表示特殊、11保留不用。
2、GPxDAT寄存器
用于读/写引脚:当引脚被设为输入时,从GPxDAT寄存器读取引脚的状态;当引脚被设为输出时,将数据写入GPxDAT寄存器
相应的引脚会输出相应的该低电平。
3、GPxUP寄存器
某位为1时,相应引脚无内部上拉电阻;某位为0时,相应引脚使用上拉电阻。

上拉电阻、下拉电阻的作用:GPIO为第三态时(相当于无外接芯片),引脚的电平状态有上拉电阻、下拉电阻确定。

二、在开发板上实现LED亮灭及按键控制LED
目标:通过读写GPIO寄存器来驱动LED、获取按键状态。
第一个例子使用汇编编写一个简单的驱动LED的程序,点亮LED首先看原理图是怎么接的,拿到原理图手册

可以看到led被点亮开发板gpio需要低电平,找到对应的开发板gpio。一目了然GPF4为0时LED1亮,1时灭,但是一个GPIO管脚可以是输出也可以是输入,所以,要配置GPIO的功能。

点亮led:
1、配置gpio的功能为输出,2、设置gpio输出高\低
配置输出功能,在数据手册上可以看到一个寄存器GPFCON,GPF4对应的位【9:8】做出相应的配置,管脚的复用
设置寄存器在数据手册上可以看到一个寄存器GPFDAT,【7:0】,当是输出功能时一位对应功能寄存器的一个引脚。这样4位就对应GPF4了。
GPFCON地址0x56000050  GPFDAT地址0x56000054
下面是汇编写的点亮一个LED程序:

led_on.S

.global _start
_start:
LDR R0,= 0x56000050 @R0为GPFCON寄存器,此寄存器用于选择引脚的功能
MOV R1,#0x00000100
STR R1,[R0] @将数值写进寄存器里也就是配置了引脚的相应的功能
LDR R0,= 0x56000054 @R0为GPFDAT寄存器,此寄存器用于设置相应管脚的值,高低电平
MOV R1,#0x00000000 @设置相应管脚输出0电平,可让LED1灯亮
STR R1,[R0] @将数值写进寄存器里也就是设置了引脚的相应的输出电平
MAIN_LOOP:
B MAIN_LOOP @循环

下面是相应的Makefile

led_on.bin : led_on.S
arm-linux-gcc -g -c -o led_on.o led_on.S
arm-linux-ld -Ttext 0x0000000 -g led_on.o -o led_on.elf
arm-linux-objcopy -O binary -S led_on.elf led_on.bin
clean:
rm -f led_on.bin led_on.elf *.o

将生成的bin文件烧到开发板即可点亮LED。

最新文章

  1. YunCart电商网站支付宝接口出现500错误
  2. Group-buy项目总结
  3. thinkjs——session
  4. wpf 前台获取资源文件路径问题
  5. IOS 进度条与手势
  6. BZOJ-1880 Elaxia的路线 SPFA+枚举
  7. 利用SecureCRT上传、下载文件(使用sz与rz命令)
  8. Problem 2195 检查站点(普通树构造)(Vector)
  9. Heritrix源码分析(十五) 各种问题总结(转)
  10. Visual Studio Profiler 跟踪检查每个exe dll 性能 执行时间 CPU占用情况的方法
  11. glDatePicker-2.0 日历插件
  12. Roland钢琴开发中音符值、度、与音名之间的转换算法
  13. qq音乐的歌词接口中例如&#58,&#46的特殊符号编码使用js进行转义
  14. SpringMVC 学习-上传文件分解器 CommonsMultipartResolver 类
  15. mongodb聚合的使用
  16. 使用Myeclipse2015构建SpringMVC项目
  17. Azure基础(二)- 核心云服务 - Azure简介
  18. Linux下C语言的文件操作
  19. JavaScript 之 DOM
  20. 微信支付之JsApi支付

热门文章

  1. js禁止选中(网页复制)
  2. linux 小技巧(磁盘空间搜索)
  3. biz-NewsService
  4. readSerializableObj
  5. windows 10 下使用 binwalk
  6. 使用JS开发桌面端应用程序NW.js-3-开发问题小记
  7. Java文件操作(IO流)
  8. jmeter-Java关于MD5加密方法 以及16位32位互转
  9. PHPCMS修改域名
  10. nyoj_68:三点顺序(计算几何)