GPIO和门电路
1. GPIO
1.1 简介
GPIO, General Purpose I/O, 通用输入输出接口, 是最简单的数字输入输出引脚
- 作为输出可以有两种状态: 0和1
- 作为输入,它接收外面输入的数字信号
1.2 功能
GPIO可以用于输入、输出或其他特殊功能
通常通过寄存器配置引脚功能用来选择这些功能
- 输入: 可以通过读取某个寄存器来确定引脚电平的高低; 如读取某个按键是否按下
- 输出: 可以通过写入某个寄存器来让这个引脚输出高电平或者低电平; 如用于控制灯的状态
- 其他特殊功能: 有另外的寄存器来控制它们; 如中断功能, 该引脚即具有输入功能,同时还能中断CPU
1.3 上拉电阻
上拉电阻和NPN三极管、下拉电阻和PNP三极管;上拉/下拉电阻的作用在于确定悬空引脚电平状态
当GPIO引脚处于第三态(即不是输出高电平,也不是输出低电平,而是呈高阻态,即相当于没接芯片)时;它的电平状态由上拉电阻、下拉电阻确定
如上拉电阻,对于输入引脚,可以用于确定电平状态(高、低)
1.4 S3C2410
以S3C2410为例,共有117个I/O端口, 共分为A~H共8组: GPA、GPB、...、GPH
可以通过设置寄存器来确定某个引脚用于输入、输出还是其他特殊功能
相关寄存器有
- GPxCON用于选择引脚功能
- GPxDAT用于读/写引脚数据
- GPxUP用于确定是否使用内部上拉电阻
TIP:不是所有引脚均有上拉电阻
1.4.1 寄存器
GPxCON寄存器:它用于配置(Configure)选择引脚功能。
GPxCON中每两位控制一根引脚:00表示输入、01表示输出、10表示特殊功能、11保留不用。
GPxDAT寄存器:用于读/写引脚
当引脚被设为输入时,读此寄存器可知相应引脚的电平状态是高还是低
当引脚被设为输出时,写此寄存器相应位可以令此引脚输出高电平或是低电平
GPxUP寄存器:某位为1时,相应引脚无内部上拉电阻;为0时,相应引脚使用内部上拉电阻
1.4.2 GPIO引脚的使用
S3C2440引脚的操作有3种:输出高低电平、检测引脚状态、中断
以点亮LED为例,mini2440 LED1-4分别对应GPB5-8
如果要控制这些LED,那么我们首先要把GPBCON寄存器中GPB5-8对应的位设为输出功能
然后写GPBDAT寄存器的相应位,使这4个引脚输出高低电平
一般是低电平有效: 高电平时,对应LED熄灭;低电平时,对应LED点亮
通过下面的代码让GPB5输出低电平,点亮LED1
/*
* 通过S3C2440的datasheet查到GPBCON和GPBDAT寄存器的地址
*/
#define GPBCON (*(volatile unsigned long *) 0x56000010)
#define GPBDAT (*(volatile unsigned long *) 0x56000014)
/*
* 两位控制一个引脚, 那么GPB5就是GPBCON的[11:10]位
* 1左移10位, 则[11:10]为01, 表示GPB5为输出
*/
#define GPB5_OUT (1<<(5*2))GPBCON = GPB5_OUT;
/*
* 1左移5位取反, 那么第5位为0, 即GPB5输出低电平, 点亮LED1
*/
GPBDAT &= ~(1<<5);
2. 门电路
门电路包括 非门、与门、或门、与非门、或非门
GPIO和门电路的更多相关文章
- 嵌入式Llinux学习路线图
版本 日期 作者 说明 V1 2016.07.29 韦东山 第1版本,Android部分未写 我是1999年上的大学,物理专业.在大一时,我们班里普遍弥漫着对未来的不安,不知道学习了物理后出去能做什么 ...
- STM32的GPIO口的输出开漏输出和推挽输出
本文来自cairang45的博客,讲述了STM32的GPIO口的输出开漏输出和推挽输出, 作者博客:http://blog.ednchina.com/cairang45 本文来自: 高校自动化网(Ww ...
- MTK GPIO 一些理解
基于6575平台: GPIO驱动程序提供了两个接口: (1)内核空间:所提供的GPIO驱动程序,驱动程序可以调用其他函数 (2)用户空间:用户空间的程序可以通过发送IOCTL /dev/ mtgp ...
- 【STM32H7教程】第20章 STM32H7的GPIO应用之无源蜂鸣器
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第20章 STM32H7的GPIO应用之无源蜂鸣器 ...
- [转]: stm328种GPIO模式
[原创]:这段时间开始研究stm32,今天撸着一段代码一直追,追到了GPIO口模式的枚举类型这里,遂去网上查看这8种模式到底是什么,网上一查,看到了一个答案被很多博主转载或者原创,那我也就不重复废话了 ...
- 基於tiny4412的Linux內核移植--- 中斷和GPIO學習(3)
作者 彭東林 pengdonglin137@163.com 平臺 tiny4412 ADK Linux-4.4.4 u-boot使用的U-Boot 2010.12,是友善自帶的,爲支持設備樹和uIma ...
- 基於tiny4412的Linux內核移植--- 中斷和GPIO學習(2)
作者 彭東林 pengdonglin137@163.com 平臺 tiny4412 ADK Linux-4.4.4 u-boot使用的U-Boot 2010.12,是友善自帶的,爲支持設備樹和uIma ...
- 基於tiny4412的Linux內核移植--- 中斷和GPIO學習(1)
作者 彭東林 pengdonglin137@163.com 平臺 tiny4412 ADK Linux-4.4.4 u-boot使用的U-Boot 2010.12,是友善自帶的,爲支持設備樹和uIma ...
- STM32f10xxx 之 GPIO口配置
背景 配置stm32f103使其完成PWM输出的过程中,在配置GPIO口的时候,按照习惯配置GPIO口的speed为50MHZ,突然就意识到,为什么大部分例程习惯配置为50MHZ,而不是其它值,即有了 ...
随机推荐
- flock文件锁
linux中的定时任务crontab会定时执行一些脚本,但是脚本的时间往往无法控制,当脚本的执行时间过长,可能会导致上一次任务的脚本还没执行完,下一次任务的脚本又开始执行的问题.这种情况下会出现一些并 ...
- vue插件库
各种vue插件,各种有,总有一款适合你! github地址:https://github.com/opendigg/awesome-github-vue
- 第1章 VMware中安装CentOS7
目录 1.1 下载CentOS7安装包 1.2 VMware中新建虚拟机 1.3 安装操作系统 本章讲解在VMware中安装CentOS虚拟机的步骤.使用的VMware Workstation版本为1 ...
- 学习Pytbon第三天,用户输入
_username ='dream' #定义用户名 _password ='dream123'#定义用户密码username = input("username:")#请输入用户名 ...
- django之路由分发
路由分发决定哪一个路由由哪一个视图函数来处理. 注意:django2.0里的re_path和django1.0里的url除了名字不一样,其他都一样. 简单配置 from django.urls imp ...
- iOS SDK中使用NSXMLParser解析XML(iphone网络篇三)
iOS SDK的NSXMLParser解析XML文档是事件驱动模式的,即采用SAX方式来解析XML格式文档.NSXMLParser在处理XML文档的过程中当遇到一些要素(元素.属性.CDATA块.评论 ...
- java十分钟速懂知识点——NIO
一.引子 nio是java的IO框架里边十分重要的一部分内容,其最核心的就是提供了非阻塞IO的处理方式,最典型的应用场景就是处理网络连接.很多同学提起nio都能说起一二,但是细究其背后的原理.思想往往 ...
- 二叉树遍历(Java实现)
二叉树遍历(Java实现) 主要是二叉树的遍历,包括递归遍历和非递归遍历 import java.util.ArrayDeque; import java.util.ArrayList; impo ...
- 【Luogu P1637】 三元上升子序列
对于每个数$a_i$,易得它对答案的贡献为 它左边比它小的数的个数$\times$它右边比它大的数的个数. 可以离散化后再处理也可以使用动态开点的线段树. 我使用了动态开点的线段树,只有需要用到这个节 ...
- 南邮部分wp
MYSQL 打开robots.txt 鍒お寮€蹇冿紝flag涓嶅湪杩欙紝杩欎釜鏂囦欢鐨勭敤閫斾綘鐪嬪畬浜嗭紵 鍦–TF姣旇禌涓紝杩欎釜鏂囦欢寰€寰€瀛樻斁鐫€鎻愮ず淇℃伅 这一看乱码,放到新建tx ...