基于6575平台:

GPIO驱动程序提供了两个接口:

(1)内核空间:所提供的GPIO驱动程序,驱动程序可以调用其他函数

(2)用户空间:用户空间的程序可以通过发送IOCTL   /dev/ mtgpio的操作GPIO

  1. GPIO_PIN

枚举所有的GPIO引脚。它将被用于在每个gpio驱动

  1. typedef enum GPIO_PIN
  2. {
  3. GPIO_UNSUPPORTED = -1,
  4. GPIO0  , GPIO1  , GPIO2  , GPIO3  , GPIO4  , GPIO5  , GPIO6  , GPIO7  ,
  5. GPIO8  , GPIO9  , GPIO10 , GPIO11 , GPIO12 , GPIO13 , GPIO14 , GPIO15 ,
  6. GPIO16 , GPIO17 , GPIO18 , GPIO19 , GPIO20 , GPIO21 , GPIO22 , GPIO23 ,
  7. GPIO24 , GPIO25 , GPIO26 , GPIO27 , GPIO28 , GPIO29 , GPIO30 , GPIO31 ,
  8. GPIO32 , GPIO33 , GPIO34 , GPIO35 , GPIO36 , GPIO37 , GPIO38 , GPIO39 ,
  9. GPIO40 , GPIO41 , GPIO42 , GPIO43 , GPIO44 , GPIO45 , GPIO46 , GPIO47 ,
  10. GPIO48 , GPIO49 , GPIO50 , GPIO51 , GPIO52 , GPIO53 , GPIO54 , GPIO55 ,
  11. GPIO56 , GPIO57 , GPIO58 , GPIO59 , GPIO60 , GPIO61 , GPIO62 , GPIO63 ,
  12. GPIO64 , GPIO65 , GPIO66 , GPIO67 , GPIO68 , GPIO69 , GPIO70 , GPIO71 ,
  13. GPIO72 , GPIO73 , GPIO74 , GPIO75 , GPIO76 , GPIO77 , GPIO78 , GPIO79 ,
  14. GPIO80 , GPIO81 , GPIO82 , GPIO83 , GPIO84 , GPIO85 , GPIO86 , GPIO87 ,
  15. GPIO88 , GPIO89 , GPIO90 , GPIO91 , GPIO92 , GPIO93 , GPIO94 , GPIO95 ,
  16. GPIO96 , GPIO97 , GPIO98 , GPIO99 , GPIO100, .............
  17. GPIO_MAX
  18. }GPIO_PIN;

2.GPIO_MODE

每个GPIO引脚支持四种模式,0为GPIO模式。

  1. /* GPIO MODE CONTROL VALUE*/
  2. typedef enum {
  3. GPIO_MODE_UNSUPPORTED = -1,
  4. GPIO_MODE_GPIO  = 0,
  5. GPIO_MODE_00    = 0,
  6. GPIO_MODE_01    = 1,
  7. GPIO_MODE_02    = 2,
  8. GPIO_MODE_03    = 3,
  9. GPIO_MODE_04    = 4,
  10. GPIO_MODE_05    = 5,
  11. GPIO_MODE_06    = 6,
  12. GPIO_MODE_07    = 7,
  13. GPIO_MODE_MAX,
  14. GPIO_MODE_DEFAULT = GPIO_MODE_01,
  15. } GPIO_MODE;

3.GPIO_DIR

在GPIO模式下,每一个GPIO引脚可配置为输入或输出。

  1. /* GPIO DIRECTION */
  2. typedef enum {
  3. GPIO_DIR_UNSUPPORTED = -1,
  4. GPIO_DIR_IN     = 0,
  5. GPIO_DIR_OUT    = 1,
  6. GPIO_DIR_MAX,
  7. GPIO_DIR_DEFAULT = GPIO_DIR_IN,
  8. } GPIO_DIR;

4.GPIO_PULLEN

每个GPIO引脚都可以被配置为上拉使能或拉禁用(pull enable or pull disable)。这取决于设备连接的GPIO引脚。  Q1:pull enable or pull disable?

  1. /* GPIO PULL ENABLE*/
  2. typedef enum {
  3. GPIO_PULL_EN_UNSUPPORTED = -1,
  4. GPIO_PULL_DISABLE = 0,
  5. GPIO_PULL_ENABLE  = 1,
  6. GPIO_PULL_EN_MAX,
  7. GPIO_PULL_EN_DEFAULT = GPIO_PULL_ENABLE,
  8. } GPIO_PULL_EN;

5.GPIO_PULL

After one GPIO pin is configured as pull enable, it could be configured as pull-up or pull-down. It depends on the device connecting to the GPIO pin. (下面都是英文了,翻译太简单了)

  1. /* GPIO PULL-UP/PULL-DOWN*/
  2. typedef enum {
  3. GPIO_PULL_UNSUPPORTED = -1,
  4. GPIO_PULL_DOWN  = 0,
  5. GPIO_PULL_UP    = 1,
  6. GPIO_PULL_MAX,
  7. GPIO_PULL_DEFAULT = GPIO_PULL_DOWN
  8. } GPIO_PULL;

6.GPIO_INVERSION

The GPIO data could be inverted or non-inverted. Q2:inverted or non-inverted ?

  1. /* GPIO INVERSION */
  2. typedef enum {
  3. GPIO_DATA_INV_UNSUPPORTED = -1,
  4. GPIO_DATA_UNINV = 0,
  5. GPIO_DATA_INV   = 1,
  6. GPIO_DATA_INV_MAX,
  7. GPIO_DATA_INV_DEFAULT = GPIO_DATA_UNINV
  8. } GPIO_INVERSION;

7.GPIO_OUT

After one gpio pin is configured as output pin, the output value could be configured as high (one) or low (zero).

  1. /* GPIO OUTPUT */
  2. typedef enum {
  3. GPIO_OUT_UNSUPPORTED = -1,
  4. GPIO_OUT_ZERO = 0,
  5. GPIO_OUT_ONE  = 1,
  6. GPIO_OUT_MAX,
  7. GPIO_OUT_DEFAULT = GPIO_OUT_ZERO,
  8. GPIO_DATA_OUT_DEFAULT = GPIO_OUT_ZERO,  /*compatible with DCT*/
  9. } GPIO_OUT;

8.GPIO_IN

After one gpio pin is configured as input pin, the input value could be configured as high (one) or low (zero).

  1. /* GPIO INPUT */
  2. typedef enum {
  3. GPIO_IN_UNSUPPORTED = -1,
  4. GPIO_IN_ZERO = 0,
  5. GPIO_IN_ONE  = 1,
  6. GPIO_IN_MAX,
  7. } GPIO_IN;

9.GPIO_CLKOUT

There are seven clock output sources inside the chip.

  1. /*CLOCK OUT*/
  2. typedef enum {
  3. CLK_OUT_UNSUPPORTED = -1,
  4. CLK_OUT0,
  5. CLK_OUT1,
  6. CLK_OUT2,
  7. CLK_OUT3,
  8. CLK_OUT4,
  9. CLK_OUT5,
  10. CLK_MAX
  11. }GPIO_CLKOUT;

10.GPIO_CLKSRC

Each clock output source could be configured as the following clock mode.

  1. typedef enum CLK_SRC
  2. {
  3. CLK_SRC_UNSUPPORTED = -1,
  4. CLK_SRC_F32K    = 0x2,
  5. CLK_SRC_F26M    = 0x4,
  6. CLK_SRC_FAXI0   = 0x6,
  7. CLK_SRC_FAXI1   = 0x8,
  8. CLK_SRC_FAXI2,
  9. CLK_SRC_FAXI3,
  10. CLK_SRC_FAXI4,
  11. CLK_SRC_DPI_PIXELPLL,
  12. CLK_SRC_3GPLL_123M,
  13. CLK_SRC_FMM,
  14. CLK_SRC_MAX
  15. }GPIO_CLKSRC;

11.Error
Code

  1. //  Error Code No.
  2. #define RSUCCESS        0
  3. #define ERACCESS        1
  4. #define ERINVAL         2
  5. #define ERWRAPPER       3

Q1:pull
enable or pull disable?

上拉电阻&下拉电阻

下面是转载的~

上拉电阻、下拉电阻的作用在于,当GPIO引脚处于第三态(既不是输出高电平,也不是输出低电平,而是呈高阻态,即相当于没接芯片)时,它的电平状态由上拉电阻、下拉电阻确定。

上拉电阻:

1、当TTL电路驱动COMS电路时,如果TTL电路输出的高电平低于COMS电路的最低高电平(一般为3.5V),这时就需要在TTL的输出端接上拉电阻,以提高输出高电平的值。

***********************************************************************

补充说明:

一:TTL电路;

TTL电路就是TTL电路中流过的电流,TTL是晶体管-晶体管逻辑电路(Transistor-Transistor Logic)的缩写。TTL电路是电流控制器件。

1、标准输出的TTL电路:标准TTL电路为16mA;LS-TTL电路为8mA;S-TTL电路为20mA;ALS-TTL电路为8mA;AS-TTL电路为20mA; 

2、大电流输出的TTL电路:标准TTL电路为48mA;LS-TTL电路为24mA;S-TTL电路为64mA;ALS-TTL电路为24/48mA;AS-TTL电路为48/64mA。 

电平方面:

逻辑电平最小输出高电平VOHmin:2.4V ,输出低电平VOLmax:0.4V。在室温下,一般输出高电平是3.5V 输出低电平是0.2V。最小输入高电平VIHmin:2.0V ,最大输入低电平VILmax:0.8V ;它的噪声容限是0.4V。)

二:COMS电路;

CMOS是: 金属-氧化物-半导体(Metal-Oxide-Semiconductor)结构的晶体管简称MOS晶体管,有P型MOS管和N型MOS管之分。由MOS管构成的集成电路称为MOS集成电路,而由PMOS管和NMOS管共同构成的互补型MOS集成电路 称为 CMOS-IC 。

CMOS集成电路是由P沟道型和N沟道型MOS场效应管构成的互补电路形式。它具有工作电压范围宽,功耗低和噪声容限大等优异特性。

CMOS电路大致可分为两大类型: 

一是标准型4000/4500系列,在此系列中有A型和B型(后缀)之分;4000B/4500B互换性好,符合EIA和JEDEC标准。

二是1986年出现的74HC系列,是用来置换相应的TTL74系列的产品。HC几乎实现了与TTL电路相同的工作速度,弥补了4000/4500系列工作速度慢的不足,HCT系列是最高速的产品。                 

CMOS集成电路的性能特点:

微功耗----CMOS电路的单门静态功耗在毫微瓦(nw)数量级。

高噪声容限----CMOS电路的噪声容限一般在40%电源电压以上。

宽工作电压范围----CMOS电路的电源电压一般为1.5~18伏。

高逻辑摆幅----CMOS电路输出高、低电平的幅度达到全电为VDD,逻辑“0”为VSS。

高输入阻抗----CMOS电路的输入阻抗大于108Ω,一般可达1010Ω。

高扇出能力----CMOS电路的扇出能力大于50。

低输入电容----CMOS电路的输入电容一般不大于5PF。

宽工作温度范围----陶瓷封装的CMOS电路工作温度范围为- 55 0C ~ 125 0C;塑封的CMOS电路为 – 40 0C ~ 85 0C。

*************************************************************************

虽然看了上面的补充,我还是不是很懂~~

2、OC门电路必须加上拉电阻,才能使用。

***********************************************************************

OC门,又称集电极开路(漏极开路)与非门门电路,Open Collector(Open Drain)。为什么引入OC门?

实际使用中,有时需要两个或两个以上与非门的输出端连接在同一条导线上,将这些与非门上的数据(状态电平)用同一条导线输送出去。

因此,需要一种新的与非门电路--OC门来实现“线与逻辑”。

OC门主要用于3个方面:

1、

实现与或非逻辑,用做电平转换,用做驱动器。由于OC门电路的输出管的集电极悬空,使用时需外接一个上拉电阻Rp到电源VCC。OC门使用上拉电阻以输出高电平,此外为了加大输出引脚的驱动能力,上拉电阻阻值的选择原则,从降低功耗及芯片的灌电流能力考虑应当足够大;从确保足够的驱动电流考虑应当足够小。 

2、

线与逻辑,即两个输出端(包括两个以上)直接互连就可以实现“AND”的逻辑功能。在总线传输等实际应用中需要多个门的输出端并联连接使用,而一般TTL门输出端并不能直接并接使用,否则这些门的输出管之间由于低阻抗形成很大的短路电流(灌电流),而烧坏器件。在硬件上,可用OC门或三态门(ST门)来实现。 用OC门实现线与,应同时在输出端口应加一个上拉电阻。

3、

三态门(ST门)主要用在应用于多个门输出共享数据总线,为避免多个门输出同时占用数据总线,这些门的使能信号(EN)中只允许有一个为有效电平(如高电平),由于三态门的输出是推拉式的低阻输出,且不需接上拉(负载)电阻,所以开关速度比OC门快,常用三态门作为输出缓冲器。

***********************************************************************

3、为加大输出引脚的驱动能力,有的单片机管脚上也常使用上拉电阻。

4、在COMS芯片上,为了防止静电造成损坏,不用的管脚不能悬空,一般接上拉电阻产生降低输入阻抗,提供泄荷通路。

5、芯片的管脚加上拉电阻来提高输出电平,从而提高芯片输入信号的噪声容限增强抗干扰能力。

6、提高总线的抗电磁干扰能力。管脚悬空就比较容易接受外界的电磁干扰。

7、长线传输中电阻不匹配容易引起反射波干扰,加上下拉电阻是电阻匹配,有效的抑制反射波干扰。

上拉电阻阻值的选择原则包括:

1、从节约功耗及芯片的灌电流能力考虑应当足够大;电阻大,电流小。

2、从确保足够的驱动电流考虑应当足够小;电阻小,电流大。

3、对于高速电路,过大的上拉电阻可能边沿变平缓。综合考虑

以上三点,通常在1k到10k之间选取。对下拉电阻也有类似道理

对上拉电阻和下拉电阻的选择应结合开关管特性和下级电路的输入特性进行设定,主要需要考虑以下几个因素:

1. 驱动能力与功耗的平衡。以上拉电阻为例,一般地说,上拉电阻越小,驱动能力越强,但功耗越大,设计是应注意两者之间的均衡。

2. 下级电路的驱动需求。同样以上拉电阻为例,当输出高电平时,开关管断开,上拉电阻应适当选择以能够向下级电路提供足够的电流。

3. 高低电平的设定。不同电路的高低电平的门槛电平会有不同,电阻应适当设定以确保能输出正确的电平。以上拉电阻为例,当输出低电平时,开关管导通,上拉电阻和开关管导通电阻分压值应确保在零电平门槛之下。

4. 频率特性。以上拉电阻为例,上拉电阻和开关管漏源级之间的电容和下级电路之间的输入电容会形成RC延迟,电阻越大,延迟越大。上拉电阻的设定应考虑电路在这方面的需求。

下拉电阻的设定的原则和上拉电阻是一样的。

OC门输出高电平时是一个高阻态,其上拉电流要由上拉电阻来提供,设输入端每端口不大于100uA,设输出口驱动电流约500uA,标准工作电压是5V,输入口的高低电平门限为0.8V(低于此值为低电平);2V(高电平门限值)。

选上拉电阻时:

500uA x 8.4K= 4.2即选大于8.4K时输出端能下拉至0.8V以下,此为最小阻值,再小就拉不下来了。如果输出口驱动电流较大,则阻值可减小,保证下拉时能低于0.8V即可。

当输出高电平时,忽略管子的漏电流,两输入口需200uA

200uA x15K=3V即上拉电阻压降为3V,输出口可达到2V,此阻值为最大阻值,再大就拉不到2V了。选10K可用。COMS门的可参考74HC系列



设计时管子的漏电流不可忽略,IO口实际电流在不同电平下也是不同的,上述仅仅是原理,一句话概括为:输出高电平时要喂饱后面的输入口,输出低电平不要把输出口喂撑了(否则多余的电流喂给了级联的输入口,高于低电平门限值就不可靠了)

在数字电路中不用的输入脚都要接固定电平,通过1k电阻接高电平或接地。

1. 电阻作用:

l 接电组就是为了防止输入端悬空

l 减弱外部电流对芯片产生的干扰

l 保护cmos内的保护二极管,一般电流不大于10mA

l 上拉和下拉、限流

l 1. 改变电平的电位,常用在TTL-CMOS匹配

2. 在引脚悬空时有确定的状态

3.增加高电平输出时的驱动能力。

4、为OC门提供电流

l 那要看输出口驱动的是什么器件,如果该器件需要高电压的话,而输出口的输出电压又不够,就需要加上拉电阻。

如果有上拉电阻那它的端口在默认值为高电平你要控制它必须用低电平才能控制如三态门电路三极管的集电极,或二极管正极去控制把上拉电阻的电流拉下来成为低电平。反之,

l 尤其用在接口电路中,为了得到确定的电平,一般采用这种方法,以保证正确的电路状态,以免发生意外,比如,在电机控制中,逆变桥上下桥臂不能直通,如果它们都用同一个单片机来驱动,必须设置初始状态.防止直通!

2、定义:

l 上拉就是将不确定的信号通过一个电阻嵌位在高电平!电阻同时起限流作用!下拉同理!

l 上拉是对器件注入电流,下拉是输出电流

l 弱强只是上拉电阻的阻值不同,没有什么严格区分

l 对于非集电极(或漏极)开路输出型电路(如普通门电路)提升电流和电压的能力是有限的,上拉电阻的功能主要是为集电极开路输出型电路输出电流通道。

3、为什么要使用拉电阻:

l 一般作单键触发使用时,如果IC本身没有内接电阻,为了使单键维持在不被触发的状态或是触发后回到原状态,必须在IC外部另接一电阻。

l 数字电路有三种状态:高电平、低电平、和高阻状态,有些应用场合不希望出现高阻状态,可以通过上拉电阻或下拉电阻的方式使处于稳定状态,具体视设计要求而定!

l 一般说的是I/O端口,有的可以设置,有的不可以设置,有的是内置,有的是需要外接,I/O端口的输出类似与一个三极管的C,当C接通过一个电阻和电源连接在一起的时候,该电阻成为上C拉电阻,也就是说,如果该端口正常时为高电平,C通过一个电阻和地连接在一起的时候,该电阻称为下拉电阻,使该端口平时为低电平,作用吗:

比如:当一个接有上拉电阻的端口设为输如状态时,他的常态就为高电平,用于检测低电平的输入。



l 上拉电阻是用来解决总线驱动能力不足时提供电流的。一般说法是拉电流,下拉电阻是用来吸收电流的,也就是你同学说的灌电流。

看了一大堆,

总结了一下:

上拉是一个电阻接到一个电压,其实就是增强了IO的驱动能力;

下拉是一个电阻接到地,保证IO口是低电平;

MTK GPIO 一些理解的更多相关文章

  1. 【STM32】STM32 GPIO模式理解

    stm32的GPIO的配置模式有好几种,包括: 1. 模拟输入: 2. 浮空输入: 3. 上拉输入: 4. 下拉输入: 5. 开漏输出: 6. 推挽输出: 7. 复用开漏输出: 8. 复用推挽输出 如 ...

  2. STM32F4 输入输出(GPIO)模式理解

    stm32的GPIO的配置模式有好几种,包括: 1. 模拟输入: 2. 浮空输入: 3. 上拉输入: 4. 下拉输入: 5. 开漏输出: 6. 推挽输出: 7. 复用开漏输出: 8. 复用推挽输出   ...

  3. mtk GPIO口

    http://blog.csdn.net/mcgrady_tracy/article/details/39320691 mt6582多达168个GPIO口,当然这些GPIO口是复用的,注意lk和Lin ...

  4. MTK GPIO 新增变量配置

    主要涉及的文件: 1.需要配置preloader ,lk ,kernel vendor GPIO_YuSu.cmp文件增加IO别名: 2.需要配置preloader ,lk ,kernel vendo ...

  5. STM32入门系列-GPIO结构

    已经了解了STM32 GPIO的基本概念及引脚分类.现在来看下STM32 GPIO内部的结构是怎样的.IO端口位的基本结构如下图所示. 从图中可以看出GPIO内部结构还是比较复杂的,只要将这张GPIO ...

  6. MTK Android Driver:GPIO

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2JrODYxMTEw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...

  7. 7.STM32中GPIO理解

    端口概述 在STM32中,每个I/O端口可以由软件配置成为输入/输出模式.复位期间或刚复位后,I/O端口被配置成浮空输入模式.所有的GPIO引脚有一个内部弱上拉和弱下拉,当配置为输入时, 它们可以被激 ...

  8. [转]: stm328种GPIO模式

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

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

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

随机推荐

  1. Android线性布局

    线性布局 LinearLayout 是一个视图组,用于使所有子视图在单个方向(垂直或水平)保持对齐. 您可以使用 android:orientation 属性指定布局方向. LinearLayout ...

  2. SublimeText3解决中文乱码

    1)安装Sublime Package Control.     在Sublime Text 3上用Ctrl+-打开控制台并在里面输入以下代码,Sublime Text 2就会自动安装Package ...

  3. 剑指Offer--图的操作

    剑指Offer–图的操作 前言   企业笔试过程中会涉及到数据结构的方方面面,现将有关图的深度优先搜索与广度优先搜索进行整理归纳,方便日后查阅.   在已做过的笔试题目中,可用DFS解决的题目有: & ...

  4. Java中循环声明变量方法

    Java循环声明变量 之前想这样做,但是网上一直搜索不到,下面是我的方式 项目中 // 得到需要查询外表的数量,然后分别创建缓存,插入数据多的时候如果编码在缓存里面,就不需要再去查询数据库了.key: ...

  5. Linux下which、whereis、locate、find 命令查找文件

     转自:http://blog.csdn.net/gh320/article/details/17411743 我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索 ...

  6. 【shell点滴】参数变量

    参数变量故名思议就是用来操作输入参数的变量,知道用户输入了哪些参数,才可以进行相应的处理. 参数变量 作用 $1,$2- 取第几个参数的意思 $* 取出所有的参数,解析参数的分割符环境变量 IFS 来 ...

  7. Linux2.6内核--抢占

    [摘要]本文首先介绍非抢占式内核(Non-Preemptive Kernel)和可抢占式内核(Preemptive Kernel)的区别.接着分析Linux下有两种抢占:用户态抢占(User Pree ...

  8. Java-IO之超类InputStream

    InputStream是以字节为单位的输出流,通过以下框架图可以看到InputStream是所有以字节输入流类的公共父类: 基于JDK8的InputStream类源码: public abstract ...

  9. UNIX环境高级编程——信号(API)

    一.信号在内核中的表示     实际执行信号的处理动作称为信号递达(Delivery),信号从产生到递达之间的状态,称为信号未决(Pending).进程可以选择阻塞(Block)某个信号.被阻塞的信号 ...

  10. Java:函数

    import java.util.Scanner; public class HelloWorld { public static void main(String[] args){ Scanner ...