[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 寄存器中的设置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/83790.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Tomcat 配置 HTTPS 访问全攻略(CentOS 环境)

Tomcat 配置 HTTPS 访问全攻略&#xff08;CentOS 环境&#xff09; 一、环境说明 操作系统&#xff1a;CentOS Tomcat 版本&#xff1a;Apache Tomcat/9.0.105 服务器 IP&#xff1a;192.168.1.35 目标&#xff1a;将 Tomcat 默认的 HTTP 访问升级为 HTTPS&#xff0c;提…

Flink 运维监控与指标采集实战(Prometheus + Grafana 全流程)

一、引言:为什么 Flink 运维监控如此重要? 在实时计算场景中,Flink 作业 724 小时运行,对性能、资源、故障感知、状态变化的实时监控非常关键。没有有效的运维可观测体系: 不知道任务是否在稳定运行 发生问题难以快速定位 无法感知背压、延迟、反压等状态 因此,构建完善…

【prometheus+Grafana篇】基于Prometheus+Grafana实现Oracle数据库的监控与可视化

&#x1f4ab;《博主主页》&#xff1a; &#x1f50e; CSDN主页 &#x1f50e; IF Club社区主页 &#x1f525;《擅长领域》&#xff1a;擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控&#xff1b;并对SQLserver、NoSQL(MongoDB)有了…

【数据仓库面试题合集③】实时数仓建模思路与实践详解

实时数据仓库已经成为各大企业构建核心指标监控与业务实时洞察的基础能力。面试中,关于实时建模的题目频繁出现,尤其聚焦于建模思路、宽表设计、状态管理、乱序处理等方面。本文整理典型题目及答题思路,帮助你应对相关考察。 一、建模原则与数仓分层认知 1. 实时数仓与离线…

鸿蒙PC操作系统:从Linux到自研微内核的蜕变

鸿蒙PC操作系统是否基于Linux内核,需要结合其技术架构、发展阶段和官方声明综合分析。以下从多个角度展开论述: 一、鸿蒙操作系统的多内核架构设计 多内核混合架构 根据资料,鸿蒙操作系统(HarmonyOS)采用分层多内核架构,内核层包含Linux内核、LiteOS-m内核、LiteOS-a内核…

LabVIEW数据库使用说明

介绍LabVIEW如何在数据库中插入记录以及执行 SQL 查询&#xff0c;适用于对数据库进行数据管理和操作的场景。借助 Database Connectivity Toolkit&#xff0c;可便捷地与指定数据库交互。 各 VI 功能详述 左侧 VI 功能概述&#xff1a;实现向数据库表中插入数据的操作。当输入…

【docker】--docker file编写教程

文章目录 构建docker file 镜像常用命令速查表一、基础指令&#xff08;指定镜像和执行命令&#xff09;二、构建上下文管理三、设置镜像内部环境四、容器运行配置五、多阶段构建&#xff08;可选进阶&#xff09; 构建docker file 镜像 # -f 指定dockerfile # -t 镜像名和tag…

WeakAuras Lua Script <BiaoGe>

WeakAuras Lua Script <BiaoGe> 表格拍卖插件WA字符串 表格字符串代码&#xff1a; !WA:2!S3xA3XXXrcoE2VH9l7ZFy)C969PvDpSrRgaeuhljFlUiiSWbxaqXDx(4RDd0vtulB0fMUQMhwMZJsAO5HenLnf1LPSUT4iBrjRzSepL(pS)e2bDdWp5)cBEvzLhrMvvnAkj7zWJeO7mJ8kYiJmYiImYF0b(XR)JR9JRD…

虚幻引擎5-Unreal Engine笔记之什么时候新建GameMode,什么时候新建关卡?

虚幻引擎5-Unreal Engine笔记之什么时候新建GameMode,什么时候新建关卡&#xff1f; code review! 参考笔记&#xff1a; 1.虚幻引擎5-Unreal Engine笔记之GameMode、关卡&#xff08;Level&#xff09; 和 关卡蓝图&#xff08;Level Blueprint&#xff09;的关系 2.虚幻引擎…

开源模型应用落地-模型上下文协议(MCP)-Resource Template-资源模板的使用逻辑(六)

一、前言 在数字化进程加速的今天,如何高效管理动态资源已成为开发者们的核心课题。Resource Template(资源模板)作为Model Context Protocol(MCP)中的关键机制,正通过参数化设计重新定义资源调用的边界——它不仅是静态数据的容器,更是动态上下文生成的引擎。与传统的R…

uniapp小程序获取手机设备安全距离

utils.js let systemInfo null;export const getSystemInfo () > {if (!systemInfo) {systemInfo uni.getSystemInfoSync();// 补充安全区域默认值systemInfo.safeAreaInsets systemInfo.safeAreaInsets || {top: 0,bottom: 0,left: 0,right: 0};// 确保statusBarHei…

【线下沙龙】NineData x Apache Doris x 阿里云联合举办数据库技术Meetup,5月24日深圳见!

5月24日下午&#xff0c;NineData 将联合 Apache Doris、阿里云一起&#xff0c;在深圳举办数据库技术Meetup。本次技术沙龙聚焦「数据实时分析」与「数据同步迁移」 两大核心领域&#xff0c;针对企业数据战略中的痛点&#xff0c;特邀行业资深技术大咖&#xff0c;结合多年技…

企业网站架构部署与优化 --web技术与nginx网站环境部署

一、Web 基础 本节将介绍Web 基础知识,包括域名的概念、DNS 原理、静态网页和动态网页的 相关知识。 1、域名和DNS 1.1、域名的概念 网络是基于TCP/IP 协议进行通信和连接的&#xff0c;每一台主机都有一个唯一的标识(固定的IP 地址),用以区别在网络上成千上万个用户和计算机。…

java实现poi-ooxml导出Excel的功能

文章目录 1. 添加poi-ooxml依赖2. Excel导出工具类3.核心逻辑说明4.扩展建议5.HSSF、XSSF、SXSSF 的核心原则和场景建议&#xff0c;帮助你在不同需求下快速决策&#xff1a; 以下是一个基于 Apache POI 实现的简单、通用的Java导出Excel工具类&#xff0c;代码逻辑清晰且注释详…

Nginx端口telnet不通排查指南

nginx已经配置server及端口20002&#xff0c;telnet不通&#xff1a;telnet 127.0.0.1 20002 Trying 127.0.0.1... telnet: connect to address 127.0.0.1: Connection refused 一、检查 systemctl status nginx.service nginx: [emerg] bind() to 0.0.0.0:20002 failed (13…

【RabbitMQ】消息丢失问题排查与解决

RabbitMQ 消息丢失是一个常见的问题&#xff0c;可能发生在消息的生产、传输、消费或 Broker 端等多个环节。消息丢失的常见原因及对应的解决方案&#xff1a; 一、消息丢失的常见原因 1. 生产端&#xff08;Producer&#xff09;原因 (1) 消息未持久化 原因&#xff1a;生产…

docker默认存储迁移

在容器化场景下默认存储路径为&#xff08;/var/lib/docker&#xff09;大多数平台根目录不支持系统盘扩容&#xff0c;会有空间不足风险隐患&#xff0c;因未配置持久化存储导致容器数据丢失。以迁移Docker存储路径至大容量/data目录说明 一、停止容器 systemctl stop docke…

【Golang笔记02】函数、方法、泛型、接口学习笔记

Golang笔记02&#xff1a;函数、方法、泛型、接口学习笔记 一、进阶学习 1.1、函数 go中的函数使用func关键字进行定义&#xff0c;go程序的入口函数叫做&#xff1a;main&#xff0c;并且必须是属于main包里面。 1.1.1、定义函数 &#xff08;1&#xff09;普通函数 go中…

LLM笔记(九)KV缓存调研

KV 缓存 (Key-Value Cache) 技术详解 KV 缓存&#xff08;Key-Value Cache&#xff09;是在 Transformer 模型&#xff08;尤其是 Decoder-Only 架构或 Encoder-Decoder 架构的 Decoder 部分&#xff09;进行自回归 (auto-regressive) 推理生成序列时&#xff0c;一种至关重要…

【Boost搜索引擎】构建Boost站内搜索引擎实践

目录 1. 搜索引擎的相关宏观原理 2. 正排索引 vs 倒排索引 - 搜索引擎具体原理 3. 编写数据去标签与数据清洗的模块 Parser 去标签 编写parser 用boost枚举文件名 解析html 提取title ​编辑 去标签 构建URL 将解析内容写入文件中 4. 编写建立索引的模块 Index 建…