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和门电路的更多相关文章

  1. 嵌入式Llinux学习路线图

    版本 日期 作者 说明 V1 2016.07.29 韦东山 第1版本,Android部分未写 我是1999年上的大学,物理专业.在大一时,我们班里普遍弥漫着对未来的不安,不知道学习了物理后出去能做什么 ...

  2. STM32的GPIO口的输出开漏输出和推挽输出

    本文来自cairang45的博客,讲述了STM32的GPIO口的输出开漏输出和推挽输出, 作者博客:http://blog.ednchina.com/cairang45 本文来自: 高校自动化网(Ww ...

  3. MTK GPIO 一些理解

    基于6575平台: GPIO驱动程序提供了两个接口: (1)内核空间:所提供的GPIO驱动程序,驱动程序可以调用其他函数 (2)用户空间:用户空间的程序可以通过发送IOCTL   /dev/ mtgp ...

  4. 【STM32H7教程】第20章 STM32H7的GPIO应用之无源蜂鸣器

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第20章       STM32H7的GPIO应用之无源蜂鸣器 ...

  5. [转]: stm328种GPIO模式

    [原创]:这段时间开始研究stm32,今天撸着一段代码一直追,追到了GPIO口模式的枚举类型这里,遂去网上查看这8种模式到底是什么,网上一查,看到了一个答案被很多博主转载或者原创,那我也就不重复废话了 ...

  6. 基於tiny4412的Linux內核移植--- 中斷和GPIO學習(3)

    作者 彭東林 pengdonglin137@163.com 平臺 tiny4412 ADK Linux-4.4.4 u-boot使用的U-Boot 2010.12,是友善自帶的,爲支持設備樹和uIma ...

  7. 基於tiny4412的Linux內核移植--- 中斷和GPIO學習(2)

    作者 彭東林 pengdonglin137@163.com 平臺 tiny4412 ADK Linux-4.4.4 u-boot使用的U-Boot 2010.12,是友善自帶的,爲支持設備樹和uIma ...

  8. 基於tiny4412的Linux內核移植--- 中斷和GPIO學習(1)

    作者 彭東林 pengdonglin137@163.com 平臺 tiny4412 ADK Linux-4.4.4 u-boot使用的U-Boot 2010.12,是友善自帶的,爲支持設備樹和uIma ...

  9. STM32f10xxx 之 GPIO口配置

    背景 配置stm32f103使其完成PWM输出的过程中,在配置GPIO口的时候,按照习惯配置GPIO口的speed为50MHZ,突然就意识到,为什么大部分例程习惯配置为50MHZ,而不是其它值,即有了 ...

随机推荐

  1. TP5 发送邮件代码

    发送邮箱邮件方法 /** * 系统邮件发送函数 * @param string $tomail 接收邮件者邮箱 * @param string $name 接收邮件者名称 * @param strin ...

  2. 【CodeBase】PHP检查未知媒体文件的格式

    用法: <?php $filefullpath="F:/test/2awd45wr1e5fef5e5"; echo Format::check($filefullpath,[ ...

  3. 阻止touchslider事件冒泡,防止左右滑动时出发全局滑动事件

    最近适用mui开发一个项目,全局有个侧滑菜单offCanvasSideScroll,首页用了一个touchslider插件来实现行的左右滚动 touchslider的当滚动方向与侧滑菜单滚动方向一致时 ...

  4. js字符串去掉所有空格

    字符串去掉所有空格 "abc 123 def".replace(/\s/g, "") 字符串去掉左右两端空格 " abc 123 def " ...

  5. Linux 面试的一些基础命令

    1.查询服务器负载 (1)uptime [root@oldboy ~]# uptime 20:17:18 up 7:41, 2 users, load average: 0.00, 0.00, 0.0 ...

  6. Python中关于集合的介绍及用法

    一.集合的含义及创建方法 集合(set)是一种无序的并且里面存放不同元素的序列. 集合可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因 ...

  7. A1042 Shuffling Machine (20)

    1042 Shuffling Machine (20)(20 分) Shuffling is a procedure used to randomize a deck of playing cards ...

  8. UVA_10653 公主与王子 #刘汝佳DP题刷完计划

    题意如蓝书66页例题27所示. 这个问题描述了一个LCS的特殊情况——单个字符串内所有元素各不相同. 题目要求输入两个数字串,A,B,要求求出最长公共字串.且数字上限是256*256. 做法:数组A表 ...

  9. VC下如何调用控制台命令以及其他可执行文件

    开始的时候想写一个基于MFC的Wifi开关控制程序,可是不知道VC中如何调用控制台命令,经过网上的学习,发现其实挺挺简单也挺好用.于是制作了一个简单的基于MFC个人助理小软件,可以点击按钮实现Wifi ...

  10. C#环境下使用Windows消息传递字符串数据的研究

    前言: 日前,师兄交给了我一个课题,将一个后台运行的Console程序,修改为WindowsForm程序,并在其界面上增加配置设置,以及运行记录。 原来的Console程序,后台运行的流程在其中一个类 ...