i.MX6UL IO分析
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分析相关推荐
- Linux系统IO分析工具之iotop常用参数介绍
Linux系统IO分析工具之iotop常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在一般运维工作中经常会遇到这么一个场景,服务器的IO负载很高(iostat中的 ...
- io分析神器blktrace
一.概述 [许久之前就用过blktrace,现整理如下] 从linux 一个完整的IO入手分析: 一个I/O请求进入block layer之后,可能会经历下面的过程: Remap: 可能被DM(Dev ...
- 字节流转化为文件流_JAVA IO分析一:File类、字节流、字符流、字节字符转换流...
因为工作事宜,又有一段时间没有写博客了,趁着今天不是很忙开始IO之路:IO往往是我们忽略但是却又非常重要的部分,在这个讲究人机交互体验的年代,IO问题渐渐成了核心问题. 一.File类 在讲解File ...
- linux io分析工具,io性能分析工具-iostat
linux-io性能分析 iostat (input/output statistics) 是一个linux系统监视工具,它可以用于收集并展示操作系统存储的输入.输出统计.它经常用于识别存储设备(本地 ...
- Oracle数据库性能分析管理-IO分析
本文原题<ORACLE数据库服务器IO高的分析方案和案例探讨> 目录: ** 1 IO异常繁忙,超出HBA卡端口流程上限,导致卡壳 ** 慧眼识珠--服务器磁盘这么繁忙,到底是谁干的? 谨 ...
- linux io 分析,Linux 下的I/O性能分析 iotop
Linux下的IO统计工具如iostat, nmon等大多数是只能统计到per设备的读写情况, 如果你想知道每个进程是如何使用IO的就比较麻烦. 当然如果你会systemtap, 或者blktrace ...
- linux命令查看iotop,Linux系统IO分析工具之iotop参数详解(查看IO占用)
简介: iotop – simple top-like I/O monitor iotop是一个用来监视磁盘I/O使用状况的 top 类工具,可监测到哪一个程序使用的磁盘IO的信息(requires ...
- Linux系统IO分析工具之iotop
iotop是一款开源.免费的用来监控磁盘I/O使用状况的类似top命令的工具,iotop可以监控进程的I/O信息.它是Python语言编写的,与iostat工具比较,iostat是系统级别的IO监控, ...
- java nio Selector (新IO)分析
Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件.这样,一个单独的线程可以管理多个channel,从而管理多个网络连接. 为什么 ...
- 面试官:磁盘 IO 变高,你怎么分析?
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 工具准备: iotop: http://guichaz.f ...
最新文章
- android资源加载失败,Unity2017,打成安卓包之后加载资源失败
- 【视频】vue $watch监控数据的变化
- shell脚本开发总结
- Android Studio开发版(debug)和发布版(release)获取SHA1和MD5和SHA256的最原始方法
- NetBeans 7.4 Beta提示警告无效的异常处理
- Hadoop MapReduce概念学习系列之MPI和MapReduce(十三)
- 强一致性、弱一致性、最终一致性
- python确定样本量(总体比例)
- ckpt模型转换为tf serving的saved model格式
- 桃李春风一杯酒,江湖夜雨十年灯。—第三十五天
- 瀚高数据库不定时停库
- 使用 requireJS 的shim参数 解决插件jequery 插件问题
- IO summery
- abs、fabs 用法
- 投资是一个非常专业的领域,亏钱容易赚钱难
- 一道题讲懂SQL盲注 / [第一章 web入门]SQL注入-2
- 网络路由交换 -- 静态路由 和 缺省路由
- 测试软件安装可以用影子系统吗,什么是影子系统? 影子系统安装使用图文教程...
- 多序列比对要多久时间_ClustalW----多序列比对分析(一)
- 关于html5的标签整理合集(二)