[IMX] 02.GPIO 寄存器
目录
手册对应章节
1.GPIO 复用(引脚功能选择)- IOMUXC_SW_MUX_CTL_PAD_xxx
2.GPIO 电气特性 - IOMUXC_SW_PAD_CTL_PAD_xxx
3.GPIO 数据与控制寄存器
3.1.数据 - DR
3.2.输入/输出选择 - GDIR
3.3.状态 - PSR
3.4.中断触发控制 - ICR
3.5.中断使能 - IMR
3.6.中断状态 - ISR
3.7.边沿中断 - EDGE_SEL
手册对应章节
// GPIO:28 General Purpose Input/Output (GPIO)
// IOMUX:32 IOMUX Controller (IOMUXC)
IMX 提供了多个 GPIO 组,每个 GPIO 组包含多个 GPIO 接口(IO0~IOx),这些接口用于连接 Ethernet、SPI 等
IO 接口可以用于不同的模块,但其数量有限,因此不可避免的需要进行 IO 复用,即多个设备通过 PAD 连接在一个 IO 接口上,IMX 通过 IOMUXC(IOMUX Controller)控制 GPIO 复用
1.GPIO 复用(引脚功能选择)- IOMUXC_SW_MUX_CTL_PAD_xxx
以 GPIO1 组中的 IO03 为例:
IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03 寄存器控制 GPIO1_IO03 引脚的功能复用:
该寄存器包含两个字段,其功能如下:
-
SION[4]:Software Input On,强制引脚功能为 GPIO1_IO03(可通过软件设置,忽略该引脚的功能复用):
-
1:使能,引脚功能强制为 GPIO1_IO03,从而忽略 MUX_MODE 配置的功能复用;
-
0:禁用,引脚功能由 MUX_MODE 字段定义;
-
-
MUX_MODE[3:0]:MUX Mode Select,设置引脚功能:
-
0b0000:ALT0,i2c1 模块的 I2C1_SDA 引脚;
-
0b0001:ALT1,gpt1 模块的 GPT1_COMPARE3 引脚;
-
0b0010:ALT2,usb 模块的 USB_OTG2_OC 引脚;
-
0b0100:ALT4,usdhc1 模块的 USDHC1_CD_B 引脚;
-
0b0101:ALT5,gpio1 模块的 GPIO1_IO03 引脚;
-
0b0110:ALT6,ccm 模块的 CCM_DI0_EXT_CLK 引脚;
-
0b0111:ALT7,src 模块的 SRC_TESTER_ACK 引脚;
-
0b1000:ALT8,uart1 模块的 UART1_RX 引脚;
-
注意:当 SION 位置 1 后,引脚功能会被强行设置为 GPIO1_IO03,此时通过 MUX_MODE 设置引脚功能无效
2.GPIO 电气特性 - IOMUXC_SW_PAD_CTL_PAD_xxx
IOMUXC_SW_PAD_CTL_PAD_xxx 寄存器控制引脚的电气特性,以 IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03 为例:
寄存器中各字段的含义如下:
-
HYS[16]:Hyst. Enable,使能迟滞比较器,当 IO 作为输入功能时有效,用于设置输入接收器的施密特触发器是否使能,如果需要对输入波形进行整形可以使能此位:
-
1:HYS_0_Hysteresis_Disabled,禁用施密特触发器;
-
0:HYS_1_Hysteresis_Enabled,使能施密特触发器;
-
-
PUS[15:14]:Pull Up / Down Config,上拉/下拉电阻设置:
-
00:PUS_0_100K_Ohm_Pull_Down,100K 下拉;
-
01:PUS_1_47K_Ohm_Pull_Up,47K 上拉;
-
10:PUS_2_100K_Ohm_Pull_Up,100K 上拉;
-
11:PUS_3_22K_Ohm_Pull_Up,22K 下拉;
-
-
PUE[13]:Pull / Keep Select,上拉/下拉 or 状态保持器,当 IO 作为输入时,用于设置 IO 使用上拉/下拉还是状态保持器控制引脚:
-
0:PUE_0_Keeper,状态保持器;
-
1:PUE_1_Pull,上拉/下拉;
-
注意:状态保持器在 IO 作为输入时有效,当外部电路断电后此 IO 口可以保持住以前的状态;
-
-
PKE[12]:Pull / Keep Enable,是否使能状态保持器:
-
0:PKE_0_Pull_Keeper_Disabled,禁用;
-
1:PKE_1_Pull_Keeper_Enabled,使能;
-
状态保持器的作用是持续输出设定的电平,而非脉冲信号,例如,引脚配置输出高电平,同时使用了状态保持器,触发引脚输出后,引脚将持续输出高电平,而非一个高电平脉冲;
-
-
ODE[11]:Open Drain Enable,开漏输出使能:
-
0:ODE_0_Open_Drain_Disabled,禁用开漏输出;
-
1:ODE_1_Open_Drain_Enabled,使能开漏输出;
-
-
SPEED[7:6]:Speed,设置 IO 口的速率:
-
00:SPEED_0_low_50MHz_,低速率 50MHz;
-
01:SPEED_1_medium_100MHz_,中等速率 100MHz;
-
10:SPEED_2_medium_100MHz_,中等速率 100MHz;
-
11:SPEED_3_max_200MHz_,高速率 200MHz;
-
-
DSE[5:3]:Drive Strength,设置 IO 口的驱动能力:
-
000:DSE_0_output_driver_disabled_,禁用输出驱动;
-
001:DSE_1_R0_260_Ohm___3_3V__150_Ohm_1_8V__240_Ohm_for_DDR_,3.3V 下 R0 是 260Ω,R0,1.8V 时 R0 为 150Ω,接 DDR 时 R0 为 240Ω;
-
010:DSE_2_R0_2,R0/2;
-
011:DSE_3_R0_3,R0/3;
-
100:DSE_4_R0_4,R0/4;
-
101:DSE_5_R0_5,R0/5;
-
110:DSE_6_R0_6,R0/6;
-
111:DSE_7_R0_7,R0/7;
-
-
SRE[0]:Slew Rate,设置压摆率,压摆率就是 IO 电平跳变所需的时间,比如从 0 到 1 需要多少时间,时间越小波形越陡,说明压摆率越高,反之,时间越大波形越缓,压摆率越低,如果产品要过 EMC 则可以使用较低的压摆率,因为波形缓和,如果使用 IO 做高速通信则可以使用高压摆率:
-
0:SRE_0_Slow_Slew_Rate,低压摆率;
-
1:SRE_1_Fast_Slew_Rate,高压摆率;
-
3.GPIO 数据与控制寄存器
每个 GPIO 组都有对应的数据和控制寄存器,用于操作该 GPIO 组内的每个 GPIO 引脚,以 GPIO1 组为例:
3.1.数据 - DR
其中,GPIOx_DR 寄存器用于控制该 GPIO 组内具体引脚的输出值、以及该 GPIO 组内引脚读取到的输入值:
每个 GPIO 组最多可拥有 32 个引脚,这些引脚可以配置为输入引脚或输出引脚
GPIOx_DR 寄存器的每一位都对应于该 GPIO 组内的一个引脚,当引脚配置为输出模式后,向对应的位写 1 就可以控制该引脚输出高/低电平,当引脚被配置为输入模式后,读取对应的位即可获得该引脚读取到的电平值,例如,要设置 GPIO1_IO03 输出高电平,则需要设置 GPIO1.DR = 0x8,当 GPIO1_IO03 引脚接地的话,则 GPIO1.DR 寄存器 bit-4 的值为 0,若 GPIO1_IO03 配置为输入引脚,则读取 GPIO1.DR 寄存器的 bit-4 即可获取该引脚目前的电平
3.2.输入/输出选择 - GDIR
当 GPIO 组中某个引脚的功能选择为通用 GPIO 后(通过 IOMUX Controller),通过 GPIOx_GDIR 寄存器设置该 GPIO 组中,各引脚为输入模式还是输出模式:
-
0:INPUT,引脚配置为输入引脚;
-
1:OUTPUT,引脚配置为输出引脚;
同样的,GPIOx_GDIR 寄存器中的每一位对应该 GPIO 组内的一个引脚,例如,GPIO1_GDIR 的 bit-4 对应 GPIO1_IO03
3.3.状态 - PSR
GPIOx_PSR 寄存器为只读寄存器,其每个位对应该 GPIO 组内的一个引脚:
读取对应的位即读取该引脚当前的电平状态,其功能与 GPIOx_DR 读取输入引脚的功能一样,其区别在于,GPIOx_PSR 只会在访问该寄存器时才会读取引脚的输入值
3.4.中断触发控制 - ICR
GPIOx_ICR1 寄存器控制 GPIO 组内 0~15 引脚的中断触发信号:
GPIOx_ICR2 寄存器控制 GPIO 组内 16~31 引脚的中断触发信号:
每个引脚对应两个位,控制中断为高/低电平、上升沿/下降沿触发:
-
00:LOW_LEVEL,低电平触发;
-
01:HIGH_LEVEL,高电平触发;
-
10:RISING_EDGE,上升沿触发;
-
11:FALLING_EDGE,下降沿触发;
以 GPIO1_IO15 为例,如果要设置 GPIO1_IO15 为上升沿触发中断,则应该设置 GPIO1.ICR1 = 2 << 30, 如果要设置 GPIO1 的 IO16~31 则需要设置 ICR2 寄存器
3.5.中断使能 - IMR
GPIOx_IMR 寄存器控制对应引脚的中断是否使能:
-
0:MASKED,禁止该引脚触发中断;
-
1:UNMASKED,允许该引脚触发中断;
例如,要使能 GPIO1_IO00 的中断,则应该设置 GPIO1.MIR |= 0x1
3.6.中断状态 - ISR
中断状态寄存器 GPIOx_ISR 指示对应引脚是否产生了中断请求:
例如,如果 GPIO1_ISR 寄存器的 bit-4 为 1,则表示 GPIO1_IO03 产生了中断信号(中断请求)
处理完中断后必须清除中断标志位,清除方法是向 ISR 寄存器中相应的位写 1(即写 1 清零)
3.7.边沿中断 - EDGE_SEL
该寄存器的每一位对应该 GPIO 组内的一个引脚:
对应位置 1 后,该引脚的上升沿和下降沿(双边沿)均会触发中断请求,该寄存器中的设置会覆盖引脚对应的 ICR 寄存器中的设置
相关文章:

[IMX] 02.GPIO 寄存器
目录 手册对应章节 1.GPIO 复用(引脚功能选择)- IOMUXC_SW_MUX_CTL_PAD_xxx 2.GPIO 电气特性 - IOMUXC_SW_PAD_CTL_PAD_xxx 3.GPIO 数据与控制寄存器 3.1.数据 - DR 3.2.输入/输出选择 - GDIR 3.3.状态 - PSR 3.4.中断触发控制 - ICR 3.5.中断使…...

【电子通识】热敏纸的静态发色性能和动态发色性能测试方法
静态发色性能的测定 测定治具 测定静态发色曲线需要使用三个仪器,包括静态发色仪、秒表(分辨力为0.01 s)、反射光密度计(符合 GB/T23649)。 静态发色曲线使用的测试仪为静态发色仪。其结构如下图所示:包括了保湿压板、金属加热板、温度显示器、控制面板。温度能在50℃到…...
Nginx 返回 504 状态码表示 网关超时(Gateway Timeout)原因排查
Nginx 返回 504 状态码表示 网关超时(Gateway Timeout),这意味着 Nginx 作为反向代理服务器,在等待上游服务器(如后端应用服务器、数据库服务器等)响应时,超过了预设的时间限制,最终…...

AIbase推出全球MCP Server集合平台 收录超12万个MCP服务器客户端
2025年,AI领域迎来了一项重要的技术进展——MCP(Model Context Protocol,模型上下文协议)的广泛应用。全球MCP Server集合平台AIbase(https://mcp.aibase.cn/)应运而生,为AI开发者提供了一站式的MCP服务器和客户端整合…...

使用CMake中的configure_file命令自动生成项目版本信息
1 背景 随着实际项目的完善,可维护变的更加重要。在日志中保存项目的版本或是构建信息是一个非常有用的方法。 CMake提供了configure_file()命令,可以帮助开发者在构建项目时,自动生成版本或是构建信息,便于开发者在代码中直接引…...

Linux的进程管理和用户管理
gcc与g的区别 比如有两个文件:main.c mainc.cpp(分别是用C语言和C语言写的)如果要用gcc编译: gcc -o mainc main.c gcc -o mainc mainc.cpp -lstdc表明使用C标准库; 区别一: gcc默认只链接C库&#x…...

【springcloud学习(dalston.sr1)】Eureka服务端集群的搭建(含源代码)(二)
该系列项目整体介绍及源代码请参照前面写的一篇文章【springcloud学习(dalston.sr1)】项目整体介绍(含源代码)(一) 这篇文章主要介绍多个eureka服务端的集群环境是如何搭建的。 (一)eureka的简要说明 Eu…...
【匹配】Needleman–Wunsch
Needleman-Wunsch 文章目录 Needleman-Wunsch1. 算法介绍2. 公式及原理3. 伪代码 1. 算法介绍 背景与目标 Needleman–Wunsch 算法由 Saul B. Needleman 和 Christian D. Wunsch 于1970年提出,是用于生物序列(如蛋白质或 DNA)全局比对&#x…...

崩坏星穹铁道 3.3 版本前瞻活动攻略:在黎明升起时坠落
《崩坏星穹铁道》3.3 版本 “在黎明升起时坠落” 将于 5 月 21 日正式上线。本次版本更新内容丰富,新角色、新地图、新活动和新周本 BOSS 等精彩内容,等待开拓者们前去体验。下面就为大家带来 3.3 版本的前瞻活动攻略。 一、新角色与卡池 1.上半卡池&am…...

OneNote内容太多插入标记卡死的解决办法
OneNote内容太多插入标记卡死的解决办法 针对平板电脑的OneNote用户适合此类情况: 当向电脑导入几百页pdf可以正常使用,唯独插入标记的时候OneNote直接罢工,只能关闭。关闭时还可能会出现0x000000fxxxxx的错误。 注:仅对于平板…...

fpga系列 HDL : Microchip FPGA开发软件 Libero Soc 安装 license申请
启动 注册账号:https://login.microchip.com/申请免费许可:https://www.microchipdirect.com/fpga-software-products C:\Windows\System32>vol驱动器 C 中的卷是 Windows卷的序列号是 ****-****为“D:\Microsemi\License.dat”创建环境变量“LM_LICE…...

极简主义现代商务风格PPT模版6套一组分享下载
现代商务风格PPT模版下载https://pan.quark.cn/s/12fbc52124d9 第一张PPT模版,简约风,橄榄绿背景,黑色竖条装饰,文字有中英文标题和占位符。需要提取关键元素:简约、橄榄绿、对称布局、占位文本的位置。 风格&#…...

解码生命语言:深度学习模型TranslationAI揭示RNA翻译新规则
RNA翻译是基因表达的核心环节,其精确调控依赖于翻译起始位点(TIS)和终止位点(TTS)的准确识别。传统方法依赖于简单的经验规则(如Kozak序列或最长开放阅读框ORF),但忽略了RNA结构、顺…...

重磅发布!OpenAI 推出最新模型 GPT-4.1 系列!
今日凌晨,OpenAI宣布开放全新模型GPT-4.1,并于即日起在ChatGPT中投入使用。 超长上下文与卓越编码能力 GPT-4.1作为OpenAI的最新模型,支持长达100万tokens的上下文,是OpenAI首次发布的长窗口模型。相较于前代,GPT-4.1…...
配置别名路径 @
CRA本身把webpack配置包装到了黑盒里无法直接修改,需要借助一个插件 - craco 1. 路径解析配置(Webpack)-- craco 插件 把 / 解析为 src/ 配置步骤: 1.安装 craco npm i -D craco/craco 2. 项目根目录下创建配置文件 craco.co…...
给视频加一个动画。
为什么要给视频加一个动画? 很完整的视频也就是从短动画开始的。遮盖住LOG用。 C:\Users\Sam\Desktop\desktop\startup\workpython\ocr Lottie.py import subprocessdef run_ffmpeg(cmd):print("Running:", " ".join(cmd))subprocess.run(cm…...

sqli-labs靶场第七关——文件导出注入
一:目标 通过sql注入将php代码写入网站目录,通过这个php文件执行命令 二:确认前置条件 %secure_file_priv% 首先我们需要Mysql是否允许导出文件 先尝试在网页中sql注入,检查导出权限 ?id1)) union select 1,secure_file_pr…...
uniapp 弹窗封装(上、下、左、右、中五个方位)
无脑复制即可!!! <template><view><viewv-if"mask"class"tui-drawer-mask":class"{ tui-drawer-mask_show: visible }":style"{ zIndex: maskZIndex }"tap"handleMaskClick&qu…...

解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs-docker MCP解析
解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs-docker MCP解析 这里面有很重要的原因其中一个很其中一个原因是因为如果你使用docker的方式,你可以在虚拟环境下就类似于这个沙箱的这个机制可以进行隔离。这对于安全,…...
Modern C++(一)基本概念
1、基本概念 1.1、注释 注释在翻译阶段3会被替换为单个空白字符从程序中移除 1.2、名字与标识符 标识符是一个由数字、下划线、大小写字符组成的任意长度序列。有效的标识符首个字符必须是以A-Z、a-z、下划线开头,。有效的标识符其他字符可以是0-9、A-Z、a-z、下…...

OpenCV图像旋转原理及示例
OpenCV计算机视觉开发实践:基于Qt C - 商品搜索 - 京东 图像旋转是数字图像处理的一个非常重要的环节,是图像的几何变换手法之一。图像旋转算法是图像处理的基础算法。在数字图像处理过程中,经常要用到旋转,例如在进行图像扫描时…...
LLM Text2SQL NL2SQL 实战总结
目录 尽量全面的描述表的功能 尽量全面的描述字段的功能 适当放弃意义等价的字段 放弃业务上无用的字段 对于LLM来说,由于它没有什么行业经验,所以我们需要尽可能的给予它恰当的“背景信息”,才能使它更好的工作。所谓恰当,不是越多越好,因为太多的信息会消耗掉LLM的可…...
k8s 中使用 Service 访问时NetworkPolicy不生效问题排查
背景 针对一个服务如下NetworkPolicy, 表示只有n9e命名空间的POD才能访问 k8s-man 服务 kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata:name: k8s-mannamespace: n9elabels:app: k8s-manversion: v1 spec:podSelector:matchLabels:app: k8s-manversion: v1…...

【实战篇】数字化打印——打印部署管理接口开发
前言 前面的章节已经介绍了打印管理模块的主要界面设计,本篇介绍用myBuilder开发界面接口,实现最终的功能。 1. 配置打印应用菜单 首先配置挂载好模块菜单 让菜单点击能访问到对应的页面 2. 打印部署管理数据表详细设计 以下是打印部署管理的数据表字…...

MacOS Python3安装
python一般在Mac上会自带,但是大多都是python2。 python2和python3并不存在上下版本兼容的情况,所以python2和python3可以同时安装在一台设备上,并且python3的一些语法和python2并不互通。 所以在Mac电脑上即使有自带python,想要使…...
磁盘I/O瓶颈排查:面试通关“三部曲”心法
想象一下,你就是线上系统的“交通调度总指挥”,服务器的磁盘是所有数据进出的“核心枢纽港口”。当这个“港口”突然拥堵不堪,卡车(数据请求)排起长龙,进不去也出不来,整个系统的“物流”&#…...

idea启动报错:java: 警告: 源发行版 11 需要目标发行版 11(亲测解决)
引起原因 idea的jdk没有替换干净 1.配置project file–Project Structrue–Project 2.配置Modules-Sources file–Project Structrue–Modules-Sources 改为jdk11 3.配置Modules-Dependencies file–Project Structrue–Modules-Dependencies...
树莓派4 yolo 11l.pt性能优化后的版本
树莓派4 使用 Picamera2 拍摄图像,然后通过 YOLO11l.pt 进行目标检测,并在实时视频流中显示结果。但当前的代码在运行时可能会比较卡顿,主要原因包括: picam2.capture_array() 是一个较慢的操作;YOLO 推理可能耗时较长…...
鸿蒙OSUniApp开发支持多语言的国际化组件#三方框架 #Uniapp
使用UniApp开发支持多语言的国际化组件 在全球化的今天,一个优秀的应用往往需要支持多种语言以满足不同地区用户的需求。本文将详细讲解如何在UniApp框架中实现一套完整的国际化解决方案,从而轻松实现多语言切换功能。 前言 去年接手了一个面向国际市场…...
国产数据库工具突围:SQLynx如何解决Navicat的三大痛点?深度体验报告
引言:Navicat的"中国困境" 当开发者面对达梦数据库的存储过程调试,或是在人大金仓中处理复杂查询时,Navicat突然变得力不从心——这不是个例。 真实痛点:某政务系统迁移至OceanBase后,开发团队发现Navicat无…...