I.MX6U 的 GPIO 一共有 5 组:GPIO1、GPIO2、GPIO3、GPIO4 和 GPIO5,
 GPIO1 有 32 个 IO,

GPIO2 有 22 个 IO,

GPIO3 有 29 个 IO、

GPIO4 有 29 个 IO,

GPIO5有 12 个 IO,

这样一共有 124 个 GPIO

重要寄存器:以GPIO1_IO00举例

IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO00//复用寄存器
IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO00

其中IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO00主要配置IO复用为什么功能,或是IIC或是普通IO或者其它

如图所示:此寄存器的低四位决定IO复用的功能

接下来是IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO00寄存器,先上图

此寄存器低16位需要我们配置

HYS(bit16)用来使能迟滞比较器

IO 作为输入功能的时候有效,用于设置输入接收器的施密特触发器是否使能。如果需要对输入波形进行整形的话可以使
能此位。此位为 0 的时候禁止迟滞比较器,为 1 的时候使能迟滞比较器。

PUS(bit15:14) :选择上拉或下拉电阻阻值

00-100k下拉

01-47K上拉

10-100K上拉

11-22K上拉

PUE(bit13):设置 IO 使用上下拉还是状态保持器

当为 0 的时候使用状态保持器,当为 1 的时候使用上下拉,状态保持器在IO 作为输入的时候才有用,故名思意,就是当外部电路断电以后此 IO 口可以保持住以前的状态。

PKE(bit12) :使能或者禁止上下拉/状态保持器功能

为0 时禁止上下拉/状态保持器,为 1 时使能上下拉和状态保持器。

ODE(bit11):禁止或者使能开路输出

此位为 0 的时候禁止开路输出,当此位为 1 的时候就使能开路输出功能,输出模式有效

(bit10:8):保留

该字段保留

SPEED(bit7:6) :设置 IO 速度

00-低速50M

01-中速100M

10-中速100M

11-高速20M

DSE(bit5:3):设置 IO 的驱动能力

000  输出驱动关闭
001  R0(3.3V 下 R0 是 260Ω,1.8V 下 R0 是 150Ω,接 DDR 的时候是 240Ω)
010  R0/2
011  R0/3
100  R0/4
101  R0/5
110  R0/6
111  R0/7

(bit2:1):保留

该字段保留

SRE(bit0) :设置压摆率

当此位为 0 的时候是低压摆率,当为 1的时候是高压摆率。这里的压摆率就是 IO 电平跳变所需要的时间,比如从 0 到 1 需要多少时间,时间越小波形就越陡,说明压摆率越高;反之,时间越多波形就越缓,压摆率就越低。如
果你的产品要过 EMC 的话那就可以使用小的压摆率,因为波形缓和,如果你当前所使用的 IO
做高速通信的话就可以使用高压摆率。

如果我们要使用IO来点亮一个LED,设置完复用功能和一些电气配置后还要对IO进行输入输出配置,先上图

由图可知当 IO 用作 GPIO 的时候需要设置的寄存器,一共有八个:DR、GDIR、PSR、ICR1、ICR2、EDGE_SEL、IMR 和 ISR。

DR:数据寄存器

此寄存器是 32 位的,一个 GPIO 组最大只有 32 个 IO,因此 DR 寄存器中的每个位都对应一个 GPIO。当 GPIO 被配置为输出功能以后,向指定的位写入数据那么相应的 IO 就会输出相应的高低电平,比如要设置 GPIO1_IO00 输出高电平,那么就应该设置 GPIO1.DR=1。当 GPIO被配置为输入模式以后,此寄存器就保存着对应 IO 的电平值,每个位对对应一个 GPIO,例如,当 GPIO1_IO00 这个引脚接地的话,那么 GPIO1.DR 的 bit0 就是 0。

GDIR:方向寄存器

如果要设置 GPIO 为输入的话就设置相应的位为 0,如果要设置为输出的话就设置为 1。比如要设置 GPIO1_IO00 为输入,那么 GPIO1.GDIR=0;

PSR:状态寄存器

读取相应的位即可获取对应的 GPIO 的状态,也就是 GPIO 的高低电平值。功能和输入状态下的 DR 寄存器一样。

ICR1&ICR2:中断控制寄存器

ICR1和ICR2这两个寄存器,都是中断控制寄存器,ICR1用于配置低16个GPIO,ICR2 用于配置高 16 个 GPIO

00-高电平触发中断

01-低电平触发中断

10-上升沿触发中断

11-下降沿触发中断

以GPIO1_IO15为例,如果要设置GPIO1_IO15为上升沿触发中断,那么GPIO1.ICR1=2<<(15*2),
如果要设置 GPIO1 的 IO16~31 的话就需要设置 ICR2 寄存器了

 IMR:中断屏蔽寄存器

如果使能某个 GPIO 的中断,那么设置相应的位为 1 即可,反之,如果要禁止中断,那么就设置相应的位为 0 即可。例如,要使能 GPIO1_IO00 的中断,那么就可以设置 GPIO1.MIR=1 即可。

ISR:中断状态寄存器

只要某个 GPIO 的中断发生,那么ISR 中相应的位就会被置 1。所以,我们可以通过读取 ISR 寄存器来判断 GPIO 中断是否发生,相当于 ISR 中的这些位就是中断标志位。当我们处理完中断以后,必须清除中断标志位,清除方法就是向 ISR 中相应的位写 1,也就是写 1 清零。

 EDGE_SEL:边沿选择寄存器

EDGE_SEL 寄存器用来设置边沿中断,这个寄存器会覆盖 ICR1 和 ICR2 的设置,同样是一个 GPIO 对应一个位。如果相应的位被置 1,那么就相当与设置了对应的 GPIO 是上升沿和下降沿(双边沿)触发。例如,我们设置 GPIO1.EDGE_SEL=1,那么就表示 GPIO1_IO01 是双边沿触发中断,无论 GFPIO1_CR1 的设置为多少,都是双边沿触发。

配置完输入输出寄存器后还需要使能相应的时钟

CMM 有 CCM_CCGR0~CCM_CCGR6 这 7 个寄存器,这 7 个寄存器控制着 I.MX6U 的所有外设时钟开关,我们以 CCM_CCGR0 为例来看一下如何禁止或使能一个外设的时钟,CCM_CCGR0 结构体如图 8.1.6.1 所示:

CCM_CCGR0 是个 32 为寄存器,其中每 2 位控制一个外设的时钟,比如 bit31:30 控制着
GPIO2 的外设时钟,两个位就有 4 中操作方式。

00  所有模式下都关闭外设时钟。
01  只有在运行模式下打开外设时钟,等待模式和停止模式下均关闭外设时钟。
10  未使用(保留)。
11  除了停止模式以外,其他所有模式下时钟都打开。

如果我们要打开 GPIO2 的外设时钟,那么只需要设置CCM_CCGR0 的 bit31 和 bit30 都为 1 即可,也就是 CCM_CCGR0=3 << 30。反之,如果要关闭GPIO2 的 外 设 时 钟 , 那 就 设 置 CCM_CCGR0 的 bit31 和 bit30 都 为 0 即 可 也就是CCM_CCGR0=0 << 30。CCM_CCGR0~CCM_CCGR6 这 7 个寄存器操作都是类似的,只是不同的寄存器对应不同的外
设时钟而已。

总结一下,要将 I.MX6U 的 IO 作为 GPIO 使用,我们需要一下
几步:
①、使能 GPIO 对应的时钟。
②、设置寄存器 IOMUXC_SW_MUX_CTL_PAD_XX_XX,设置 IO 的复用功能,使其复用
为 GPIO 功能。
③、设置寄存器 IOMUXC_SW_PAD_CTL_PAD_XX_XX,设置 IO 的上下拉、速度等等。
④、第②步已经将 IO 复用为了 GPIO 功能,所以需要配置 GPIO,设置输/输出、是否使用
中断、默认输出电平等。

i.MX6UL IO分析相关推荐

  1. Linux系统IO分析工具之iotop常用参数介绍

      Linux系统IO分析工具之iotop常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在一般运维工作中经常会遇到这么一个场景,服务器的IO负载很高(iostat中的 ...

  2. io分析神器blktrace

    一.概述 [许久之前就用过blktrace,现整理如下] 从linux 一个完整的IO入手分析: 一个I/O请求进入block layer之后,可能会经历下面的过程: Remap: 可能被DM(Dev ...

  3. 字节流转化为文件流_JAVA IO分析一:File类、字节流、字符流、字节字符转换流...

    因为工作事宜,又有一段时间没有写博客了,趁着今天不是很忙开始IO之路:IO往往是我们忽略但是却又非常重要的部分,在这个讲究人机交互体验的年代,IO问题渐渐成了核心问题. 一.File类 在讲解File ...

  4. linux io分析工具,io性能分析工具-iostat

    linux-io性能分析 iostat (input/output statistics) 是一个linux系统监视工具,它可以用于收集并展示操作系统存储的输入.输出统计.它经常用于识别存储设备(本地 ...

  5. Oracle数据库性能分析管理-IO分析

    本文原题<ORACLE数据库服务器IO高的分析方案和案例探讨> 目录: ** 1 IO异常繁忙,超出HBA卡端口流程上限,导致卡壳 ** 慧眼识珠--服务器磁盘这么繁忙,到底是谁干的? 谨 ...

  6. linux io 分析,Linux 下的I/O性能分析 iotop

    Linux下的IO统计工具如iostat, nmon等大多数是只能统计到per设备的读写情况, 如果你想知道每个进程是如何使用IO的就比较麻烦. 当然如果你会systemtap, 或者blktrace ...

  7. linux命令查看iotop,Linux系统IO分析工具之iotop参数详解(查看IO占用)

    简介: iotop – simple top-like I/O monitor iotop是一个用来监视磁盘I/O使用状况的 top 类工具,可监测到哪一个程序使用的磁盘IO的信息(requires ...

  8. Linux系统IO分析工具之iotop

    iotop是一款开源.免费的用来监控磁盘I/O使用状况的类似top命令的工具,iotop可以监控进程的I/O信息.它是Python语言编写的,与iostat工具比较,iostat是系统级别的IO监控, ...

  9. java nio Selector (新IO)分析

    Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件.这样,一个单独的线程可以管理多个channel,从而管理多个网络连接. 为什么 ...

  10. 面试官:磁盘 IO 变高,你怎么分析?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 工具准备: iotop: http://guichaz.f ...

最新文章

  1. android资源加载失败,Unity2017,打成安卓包之后加载资源失败
  2. 【视频】vue $watch监控数据的变化
  3. shell脚本开发总结
  4. Android Studio开发版(debug)和发布版(release)获取SHA1和MD5和SHA256的最原始方法
  5. NetBeans 7.4 Beta提示警告无效的异常处理
  6. Hadoop MapReduce概念学习系列之MPI和MapReduce(十三)
  7. 强一致性、弱一致性、最终一致性
  8. python确定样本量(总体比例)
  9. ckpt模型转换为tf serving的saved model格式
  10. 桃李春风一杯酒,江湖夜雨十年灯。—第三十五天
  11. 瀚高数据库不定时停库
  12. 使用 requireJS 的shim参数 解决插件jequery 插件问题
  13. IO summery
  14. abs、fabs 用法
  15. 投资是一个非常专业的领域,亏钱容易赚钱难
  16. 一道题讲懂SQL盲注 / [第一章 web入门]SQL注入-2
  17. 网络路由交换 -- 静态路由 和 缺省路由
  18. 测试软件安装可以用影子系统吗,什么是影子系统? 影子系统安装使用图文教程...
  19. 多序列比对要多久时间_ClustalW----多序列比对分析(一)
  20. 关于html5的标签整理合集(二)

热门文章

  1. 30字的完美个人简历
  2. 知识图谱研究最新综述论文: 表示学习、知识获取与应用
  3. 【安全狐】CVE-2015-5254_ActiveMQ反序列化漏洞复现
  4. 飞鱼星 VW1900 路由器怎么样 问题太多 bug集锦
  5. CSP 201903-2 二十四点 python (python有如神助)
  6. 如何在线免费将MP4转换成MP3格式音乐
  7. VS2019使用Mini-Filter
  8. 语音转文字,msg版,pyttsx3库
  9. win10下安装Ubuntu16.04双系统 (gtx1050ti)(联想legion)
  10. 问卷调查报告html,问卷调查报告格式优秀范文