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。

嵌入式GPIO接口及操作(一)的更多相关文章

  1. 嵌入式GPIO接口及操作(二)

    目标:C语言实现点亮LED灯 首先是main函数,并不特殊,它是被系统调用来执行的,main函数结束后要返回调用main函数的地址处,那么裸机程序,没有操作系统做这些工作,就要自己写调用main函数的 ...

  2. GPIO接口解析【转】

    本文提供了一个linux下访问GPIO的约定的概述. 这些调用使用gpio_* 命名前缀.没有别的调用会使用这个前缀或是相关的__gpio_*前缀. 转自:http://blog.163.com/w5 ...

  3. 《嵌入式系统原理与接口技术》——嵌入式系统接口应用基础

    本文为我负责编写的电子工业出版社出版的<嵌入式系统原理与接口技术>一书第七章部分,这里整理的仍然是修改稿,供需要的同学参考,本书为普通高等教育"十二五"规划教材,电子信 ...

  4. 玩转X-CTR100 | STM32F4 l GPIO位带操作

    更多塔克创新资讯欢迎登陆[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]       STM32F4位带概念,及位带的GPIO操作实践应用. 原理介 ...

  5. Intel Edison —— 控制GPIO接口,网页显示传感器数值

    前言 原创文章,转载引用务必注明链接. 因为是使用Typora(markdown)写好然后复制到论坛的,推荐直接访问我的网站以获得更好地阅读体验. Intel XDK IoT 开发环境很久之前就上手了 ...

  6. 第13章 GPIO—位带操作

    第13章     GPIO—位带操作 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...

  7. GPIO—位带操作

    GPIO—位带操作本章参考资料:< STM32F4xx 中文参考手册>存储器和总线构架章节. GPIO 章节,< Cortex®-M4 内核编程手册> 2.2.5 Bit-ba ...

  8. iBatis——自动生成DAO层接口提供操作函数(详解)

    iBatis——自动生成DAO层接口提供操作函数(详解) 在使用iBatis进行持久层管理时,发现在使用DAO层的updateByPrimaryKey.updateByPrimaryKeySelect ...

  9. (stm32学习总结)—GPIO位带操作

    本章参考资料:<STM32F10X-中文参考手册>存储器和总线构架章节.GPIO 章节,<CM3 权威指南 CnR2>存储器系统章节. 位带简介 位操作就是可以单独的对一个比特 ...

随机推荐

  1. Spring Boot 快速入门(一)

    简介  相信很多人都接触spring框架很长时间了,每次搭建spring框架的时候都需要配置好多的jar.xml,做很多繁琐重复的配置,稍微不留神就会出现各种各样的问题,每次调试真的是香菇.蓝瘦啊. ...

  2. “HK”的日常之ARP断网攻击

    ARP断网攻击是什么?可以吃吗?如果可以吃它好吃吗? ARP断网攻击就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,攻击者只要持续不断的发出伪造的ARP响 ...

  3. MyBatis-sql映射文件

    Sql映射文件 MyBatis真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL映射的XML文件是相当的简单.当然如果你将它们和对等功能的JDBC代码来比较,你会发现映射文件节省了 ...

  4. Openfire4源码部署到eclipse中并编译

    Openfire4源码部署到eclipse中并编译 概述 Openfire是众所周知的基于xmpp协议的IM开源服务,所有操作,配置,监控,调试等以B/S方式进行展示,非常的方便管理员进行管理.它的强 ...

  5. VS2015 +Qt5 串口工具

    简单的小工具是VS2015 + Qt5.6.1实现的,界面部分是Qt实现,串口是封装的WinAPI,把串口收发模块封装成了个Serialport.dll 供Qt界面调用. 由于VS2015需要CRT运 ...

  6. angular.extend、angular.$watch、angular.bootstrap

    1.angular.extend:依次将第二个参数及后续的参数的第一层属性(不管是简单属性还是对象)拷贝给第一个参数的第一层属性,即如果是对象,则是引用的是同一个对象,并返回第一个参数对象. 直接上代 ...

  7. SQL执行过程中的性能负载点

    一.SQL执行过程 1.用户连接数据库,执行SQL语句: 2.先在内存进行内存读,找到了所需数据就直接交给用户工作空间: 3.内存读失败,也就说在内存中没找到支持SQL所需数据,就进行物理读,也就是到 ...

  8. Akka(12): 分布式运算:Cluster-Singleton-让运算在集群节点中自动转移

    在很多应用场景中都会出现在系统中需要某类Actor的唯一实例(only instance).这个实例在集群环境中可能在任何一个节点上,但保证它是唯一的.Akka的Cluster-Singleton提供 ...

  9. java constructor 在构造子类时,一定会调用到父类的构造方法 “ 私有属性被继承了?”问题

    ” Error:Implicit super constructor Pet() is undefined. Must explicitly invoke another constructor “ ...

  10. Java探秘之神秘的字符串String(二)

    不可变性 String可以说是最常用的类型了,即字符串类型,String是常量(final关键词修饰的),他的值不能被创建后更改,因为字符串是不可被改变的,所以可以被用来共享. Java语言为Stri ...