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. 门电路

门电路包括 非门、与门、或门、与非门、或非门

最新文章

  1. Linux vim编辑器使用详解
  2. vim备忘
  3. JS案例之5——移动端触屏滑动
  4. TokuDB的特点验证
  5. 该不该将变量设为 null ?
  6. Table of Contents - CXF
  7. QSplashScreen开机画面(不断的repaint)
  8. TControl.WMLButtonUp的inherited的作用——是为了给子类控件新的处理消息的机会
  9. PHP安全编程:会话数据注入 比会话劫持更强大的攻击(转)
  10. Walls and Gates 解答
  11. kvm 虚拟化的使用
  12. 将DedeCMS从子目录移动到根目录的方法
  13. h5页面实战——与andriod和ios的交互
  14. linux下配置docker和splash(图文)
  15. python setattr
  16. 20155318 《网络攻防》 Exp8 Web基础
  17. oracle系统表v$session、v$sql字段说明
  18. thinkphp3.2 实现点击图片或文字进入内容页
  19. RF安装
  20. noip2012 P1081 开车旅行

热门文章

  1. Openstack搭建(流水账)
  2. jQuery的三种写法
  3. 分享 php array_column 函数 无法在低版本支持的 修改
  4. pandas知识点(处理缺失数据)
  5. Jin Ge Jin Qu hao UVA - 12563 01背包
  6. 水题:HDU-1088-Write a simple HTML Browser(模拟题)
  7. #3 working with data stored in files &amp;&amp; securing your application (PART II)
  8. 1250 Fibonacci数列(矩阵乘法快速幂)
  9. MySQL之索引(四)
  10. Python中bisect的使用方法