GPIO 配置 和 PINCTRL有啥区别
GPIO(通用输入/输出)和 PINCTRL(引脚控制器)是在嵌入式系统中用于管理和控制硬件引脚的关键概念。它们在硬件层面上起着不同的作用。
GPIO配置:
GPIO 是一种通用的硬件接口,用于控制和读取数字信号。每个 GPIO 引脚都可以被配置为输入(读取信号)或输出(控制信号)。GPIO 的配置指的是定义和设置特定引脚的输入或输出功能。配置 GPIO 包括以下方面:
- 设置引脚的输入或输出模式
- 配置引脚的电平(高或低)
- 配置引脚的中断
在设备树中,可以使用类似 gpioX 这样的表示法来描述 GPIO 引脚,其中 X 是引脚的编号。
PINCTRL:
PINCTRL 是一种用于配置和控制引脚的子系统或驱动程序。它负责管理硬件引脚的复用和功能选择。PINCTRL 允许将引脚分配给不同的功能(如 GPIO、I2C、SPI 等),并且可以在运行时动态配置引脚功能。使用 PINCTRL,可以将相同的硬件引脚用于不同的用途。
在设备树中,PINCTRL 可以通过定义 pinctrl 节点和相关属性来进行配置,并指定引脚的不同功能配置。这些属性可能包括引脚编号、输入输出模式、电气特性等。
区别:
GPIO 是用于控制和读取数字信号的通用接口,而 PINCTRL 是管理和配置硬件引脚的子系统。GPIO 配置是指定义和设置引脚的输入或输出功能,而 PINCTRL 可以动态配置引脚的不同功能。GPIO 配置是配置引脚本身的特性,而 PINCTRL 配置是管理引脚的复用和功能选择。两者在硬件层面上起到不同的作用,但通常在设备树中一起使用以定义引脚和功能的配置。
让我们通过一个例子更详细地说明 GPIO 的配置和 PINCTRL 的使用:
假设我们的嵌入式系统有一个具备 GPIO 功能的引脚,我们希望将其配置为输入模式,读取来自外部设备的信号,并在特定条件下触发中断。
GPIO 配置:
在设备树中,我们可以定义以下内容来配置 GPIO 引脚:
gpio_example {compatible = "gpio_example";pinctrl-names = "default";pinctrl-0 = <&pinctrl_gpio>;gpio_pin: gpio-pin {gpio-hog;gpios = <&gpio_controller 0 GPIO_ACTIVE_HIGH>;input;interrupts = <IRQ_NUM IRQ_TYPE_EDGE_BOTH>;};
};
compatible:指定与该 GPIO 相关的设备或驱动程序的兼容性。pinctrl-names和pinctrl-0:指定使用的 PINCTRL 配置集。gpio_pin:定义 GPIO 引脚的节点。gpio-hog:表示将该 GPIO 引脚设置为永久控制模式,以确保其在系统运行时一直被控制。gpios:指定 GPIO 控制器的引用和引脚编号,以及引脚的激活电平。input:将引脚配置为输入模式。interrupts:指定触发中断的相关设置(如中断线号、中断触发类型等)。
以上配置实际上是在设备树中定义了一个 GPIO 控制器 gpio_controller,将其第0号引脚配置为输入,启用中断,以便该引脚可以读取传感器信号并触发中断事件。
PINCTRL 配置:
将 GPIO 引脚配置为特定功能通常需要 PINCTRL 的参与。以下是一个示例 PINCTRL 的设备树配置:
pinctrl_gpio: gpio-pinctrl {gpio-controller;gpios = <&gpio_controller 0 GPIO_ACTIVE_HIGH>;pinctrl_gpio_example: gpio-example-pins {pingroups = <&gpio_example_pins>;};
};gpio_example_pins: gpio_example_pins {pinctrl-0 = <&pinctrl_gpio_example_mode>;
};pinctrl_gpio_example_mode: gpio_example_mode {rockchip,pins = <RK_GPIO4 RK_FUNC_GPIO>;
};
上面的设备树片段定义了一个名为 gpio_controller 的 GPIO 控制器,并将其第0号引脚配置为 GPIO 功能。然后,定义了一个名为 gpio_example_pins 的 PINCTRL 配置集,用于将 GPIO 引脚配置为具体的功能模式。在此示例中,我们将 GPIO 引脚 RK_GPIO4(在 Rockchip 平台上的GPIO编号)配置为 GPIO 功能。
综上所述,以上设备树配置演示了如何通过 GPIO 配置和 PINCTRL 来定义和配置一个 GPIO 引脚,并将其设置为输入模式以读取信号,并通过 PINCTRL 指定其特定功能模式。实际的设备树配置可能因具体的硬件平台和需求而有所不同。
相关文章:
GPIO 配置 和 PINCTRL有啥区别
GPIO(通用输入/输出)和 PINCTRL(引脚控制器)是在嵌入式系统中用于管理和控制硬件引脚的关键概念。它们在硬件层面上起着不同的作用。 GPIO配置: GPIO 是一种通用的硬件接口,用于控制和读取数字信号。每个 …...
GPT法律领域
法律领域 LaWGPT Github: https://github.com/pengxiao-song/LaWGPT 简介:基于中文法律知识的大语言模型。 数据:基于中文裁判文书网公开法律文书数据、司法考试数据等数据集展开,利用Stanford_alpaca、self-instruct方式生成对话问答数据…...
【C++11保姆级教程】Type aliases(类型别名)、alignof and alignas(类型对齐))
文章目录 前言一、类型别名(Type aliases)1.1类型别名是什么?1.2使用方法1.3实际使用1.4优势 二、类型对齐(alignof and alignas)2.1类型对齐的概念2.2类型对齐快速理解2.3具体使用2.4示例代码 总结 前言 在C11标准中…...
地址解析协议-ARP
ARP协议 无论网络层使用何种协议,在实际网络的链路上传输数据帧时,最终必须使用硬件地址 地址解析协议(Address Resolution Protocol,ARP):完成IP地址到MAC地址的映射,每个主机都有一个ARP高速缓…...
Java线程
文章目录 一、Thread类1.1创建线程1.2Thread类中的一些构造方法1.3Thread类中的一些属性1.4线程的终止/打断1.5线程等待1.6获取当前线程的引用1.7休眠当前线程 二、线程的状态 一、Thread类 线程是操作系统的概念,操作系统内核实现了线程这样的机制,系统…...
C语言如何实现DES加密与解密
C语言实现DES加密解密 #include "des.h" //移位表 static Table_size const shiftTable[NumberOfKeys] {1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1}; //E扩展表 static Table_size const eTable[des_key_pc2_standard]{32, 1, 2, 3, 4, 5, 4, 5, 6, …...
【笔记】优先队列(priority_queue/set)
目录 大根堆 小根堆 set(小根堆) 大根堆 题目链接:洛谷 P3243 菜肴制作 题目描述 知名美食家小 A 被邀请至 ATM 大酒店,为其品评菜肴。ATM 酒店为小 A 准备了 n 道菜肴,酒店按照为菜肴预估的质量从高到低给予 1 到…...
看看安森美深力科NSI45090JDT4G 是如何点亮汽车内外照明系统解决方案
关于线性恒流调节器(CCR):是一种用于控制电流的稳定输出。它通常由一个功率晶体管和一个参考电流源组成。CCR的工作原理是通过不断调节功率晶体管的导通时间来维持输出电流的恒定。当输出电流超过设定值时,CCR会减少功率晶体管的导…...
Linux进阶之Shell-sed
基本用法: sed 选项 “指令” 文件 常用选项: -e --它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时使用 -f --后跟保存了sed指令的文件 -i --直接对内容进行修改,不加 i 时默认只是预…...
前端高频面试题 Day02
面试题 var 和 let const 的区别 var 是 ES5 及之前的语法,let const 是 ES6 语法var 和 let 是变量,可修改;const 是常量,不可修改var 有变量提升,let const 没有var 没有块级作用域,let const 有 &…...
MYSQL完全卸载、安装与账号创建、权限控制
一、卸载mysql CentOS 卸载 MySQL 1. 查看安装情况 使用以下命令查看当前安装mysql情况,查找以前是否装有mysql rpm -qa|grep -i mysql这里显示我安装的 MySQL 服务有有: 2. 停止 mysql 服务、删除之前安装的 mysql 删除命令:rpm -e –n…...
get与post如何拼接url与数据的灵活处理,循环的重要性。
get与post拼接url地址不同: let postData {method: "post",data: {op: "/api/setting/maintenanceperiod?period"this.authorizationCode,loadingConfig: {},data: {period:this.authorizationCode}}}; if(this.editData.id){let postData …...
Remote Sensing,2023 | 基于SBL的分布式毫米波相干雷达成像的高效实现
Remote Sensing,2023 | 基于SBL的分布式毫米波相干雷达成像的高效实现 注1:本文系“无线感知论文速递”系列之一,致力于简洁清晰完整地介绍、解读无线感知领域最新的顶会/顶刊论文(包括但不限于 Nature/Science及其子刊; MobiCom, Sigcom, MobiSys, NSDI…...
Android学习之路(5) UI控件之Button (按钮)与 ImageButton (图像按钮)
本节引言: 今天给大家介绍的Android基本控件中的两个按钮控件,Button普通按钮和ImageButton图像按钮; 其实ImageButton和Button的用法基本类似,至于与图片相关的则和后面ImageView相同,所以本节 只对Button进行讲解&am…...
Day 31 C++ STL常用算法(下)
文章目录 常用拷贝和替换算法copy——容器内指定范围的元素拷贝到另一容器中函数原型注意——利用copy算法在拷贝时,目标容器要提前开辟空间示例 replace——将容器内指定范围的第一个旧元素修改为新元素函数原型注意——replace只会替换区间内满足条件的第一个旧元…...
【Android Studio】 win11 安装配置 jdk17 超详细
概述 一个好的安装教程能够帮助开发者完成更便捷、更快速的开发。书山有路勤为径,学海无涯苦作舟。我是秋知叶i、期望每一个阅读了我的文章的开发者都能够有所成长。 一、下载JDK JDK官网 这里下载 JDK17 windows x64 installer 二、安装JDK 双击打开下载的 j…...
IDEA下方工具栏SideBar没有Services解决方法 IDEA配合微服务学习多端口管理打开Services栏方法
问题 微服务学习时,一次要打开多个端口,比如8080给order模块、8081给user模块……这就需要用idea管理多端口。 这时候就可以用到Services栏进行管理。 解决 首先看下方Sidebar没有Services。 打开Services 打开方式一:手动打开 在IDEA中…...
[Vue warn]: Error in render: “SyntaxError: “undefined“ is not valid JSON“
[Vue warn]: Error in render: “SyntaxError: “undefined” is not valid JSON” 这说明出现了undefined这个变量类型,比如JSON.parse()时候会出现,可以先尝试打印JSON.parse()括号中的内容是否是undefined,如果是,那问题的根源…...
ui设计师工作总结及计划范文模板
ui设计师工作总结及计划范文模板【篇一】 白驹过隙,转眼间某某年已近结尾,时间伴随着我们的脚步急驰而去,到了个人工作总结的时候,蓦然回首,才发现过去的一年不还能画上圆满的句号,内心感慨万千,…...
【Kafka】2.在SpringBoot中使用官方原生java版Kafka客户端
目 录 1. 新建一个消息生产者2. 新建一个消息消费者3. 测 试 在开始之前,需要先做点准备工作,用 IDEA 新建一个 Maven 项目,取名 kafka-study,然后删掉它的 src 目录,接着在 pom.xml 里面引入下面的依赖。这个项目的作…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
stm32wle5 lpuart DMA数据不接收
配置波特率9600时,需要使用外部低速晶振...
全面解析数据库:从基础概念到前沿应用
在数字化时代,数据已成为企业和社会发展的核心资产,而数据库作为存储、管理和处理数据的关键工具,在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理,到社交网络的用户数据存储,再到金融行业的交易记录处理&a…...
