当前位置: 首页 > news >正文

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-namespinctrl-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 指定其特定功能模式。实际的设备树配置可能因具体的硬件平台和需求而有所不同。

http://www.lryc.cn/news/127070.html

相关文章:

  • GPT法律领域
  • 【C++11保姆级教程】Type aliases(类型别名)、alignof and alignas(类型对齐))
  • 地址解析协议-ARP
  • Java线程
  • C语言如何实现DES加密与解密
  • 【笔记】优先队列(priority_queue/set)
  • 看看安森美深力科NSI45090JDT4G 是如何点亮汽车内外照明系统解决方案
  • Linux进阶之Shell-sed
  • 前端高频面试题 Day02
  • MYSQL完全卸载、安装与账号创建、权限控制
  • get与post如何拼接url与数据的灵活处理,循环的重要性。
  • Remote Sensing,2023 | 基于SBL的分布式毫米波相干雷达成像的高效实现
  • Android学习之路(5) UI控件之Button (按钮)与 ImageButton (图像按钮)
  • Day 31 C++ STL常用算法(下)
  • 【Android Studio】 win11 安装配置 jdk17 超详细
  • IDEA下方工具栏SideBar没有Services解决方法 IDEA配合微服务学习多端口管理打开Services栏方法
  • [Vue warn]: Error in render: “SyntaxError: “undefined“ is not valid JSON“
  • ui设计师工作总结及计划范文模板
  • 【Kafka】2.在SpringBoot中使用官方原生java版Kafka客户端
  • 使用腾讯云轻量服务器Matomo应用模板建网站流量统计系统
  • clickhouse-监控配置
  • C++11并发与多线程笔记(5)互斥量概念、用法、死锁演示及解决详解
  • 华为云classroom赋能--Devstar使应用开发无需从零开始
  • 软件的数据回滚
  • git clone使用https协议报错OpenSSL SSL_read: Connection was reset, errno 10054
  • 化繁为简,使用Hibernate Validator实现参数校验
  • 【Qt】多线程
  • 腾讯云GPU服务器GN7实例NVIDIA T4 GPU卡
  • 3. 爬取自己CSDN博客列表(自动方式)(分页查询)(网站反爬虫策略,需要在代码中添加合适的请求头User-Agent,否则response返回空)
  • 利用HTTP代理实现请求路由