Pinctrl子系统和GPIO子系统

Pinctrl子系统:

借助Princtr子系统来设置一个Pin的复用和电气属性;

pinctrl子系统主要做的工作是:1. 获取设备树中的PIN信息;2.根据获取到的pin信息来设置的Pin的复用功能;3.根据获取到的pin信息去设置pin的电气特性,比如上下拉、速度、驱动等。

打开imx6ull.dtsi: (设备树相关的代码保存在代码被保存在.dts/dtsi后缀文件中)

  1. IOMUXC SNVS控制器:
    在这里插入图片描述
  2. IOMUXC控制器:
    在这里插入图片描述
  3. GPR控制器:
    在这里插入图片描述
    以上三个节点:
    具体信息查看6ULL参考手册。

IOMUXC 具体一个IO 做什么需要打开自己板子对应的设备树进行添加和查看。(alientek-emmc .dts):

如:
在这里插入图片描述

dts文件追加了很多信息如上如图。

  1. 如何添加一个PIN的信息:
    在这里插入图片描述

在pinfunc.h中找到的相应的定义的引脚 (宏)
在这里插入图片描述

#define MX6UL_PAD_UART1_RTS_B__GPIO1_IO19     0x0090 0x031C 0x0000 0x5 0x0

IO19是复用的 ,对应的是

0x0090         0x031C      0x0000      0x5             0x0
<mux_reg     conf_reg    input_reg   mux_mode input_val>

IOMUXC父节点首地址 0x 020e 0000 ,因此UART_RTS_B 这个PIN的Mux寄存器地址就是: + 0X 0090 = OX 020e 0090。

conf_reg  :  0x031C   : 这个寄存器就是电气属性配置地址。

Mux_mode : 5 表示复用为GPIO1_IO19 ,将其写入 0X020e 0090 。

input_val  :偏移是0 ,表示PIN没有input的功能。

注:
传统Pin的配置方式:操作寄存器
①IO复用 eg:IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03
②pin配置电气属性 eg:IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03

  1. PINctl 子系统去驱动

    配置好了在设备树中添加好了,那么一定需要在子系统中进行驱动了。
    Pinctrl 和 GPIO的子系统 就是驱动分离 与 分层思想的产物。

    如何找到6ULL对应的PINCTRL的子系统的驱动。
    通过compatible,此属性是字符串列表。驱动文件里面有一个的描述驱动兼容性的东西,当设备树节点的compatible属性和驱动里面的兼容性字符串匹配一致的时候,那么设备和驱动就匹配了。
    只需要全局看一下设备节点里面的compiable属性的值,看一看哪一个.c文件里面有,那么此.c文件就是驱动文件。
    Pinctrl-im6ull.c

当驱动和设备匹配以后执行probe函数。也就是 platform——driverz这个结构体中probe会去执行。
在这里插入图片描述
在这里插入图片描述

GPIO的使用

当把一个IO复用成GPIO功能的时候,我们就需要使用GPIO子系统。

Imx6ull.dtsi
在这里插入图片描述
查看GPIO的手册。
在这里插入图片描述

如何从设备树中获取要是用的GPIO信息,----of函数。

如:
在这里插入图片描述

驱动中对GPIO的操作函数:
1.of_find_node_by_path 函数通过路径来查找指定的节点,函数原型如下:
inline struct device_node *of_find_node_by_path(const char *path)
2.获取GPIO.of_get_named_gpio函数,返回值就是GPIO编号。
3.请求此编号的GPIO,request函数。
4.设置GPIO,输入还是输出。Gpio_direction_input还是Gpio_direction_output.
5.如果是输入,那么通过GPIO_get_value函数读取GPIO值;如果是输出,通过gpio_set_value设置GPIO值。

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

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

相关文章

【STM32】新建工程

学习来源&#xff1a;[2-2] 新建工程_哔哩哔哩_bilibili 目前STM32的开发主要有基于寄存器的开发方式、基于标准库也就是库函数的方式和基于HAL库的方式。本学习是基于库函数的方式。&#xff08;各种资料去百度云下载&#xff09; 1 建立工程文件夹 Keil中新建工程&#xf…

线程的状态以及状态转移

一. 线程的状态 NEW: 线程刚被创建, 但是并未启动. 还没调用start方法.RUNNABLE: 这里没有区分就绪和运行状态. 因为对于Java对象来说, 只能标记为可运行, 至于什么时候运行, 不是JVM来控制的了, 是OS来进行调度的, 而且时间非常短暂, 因此对于Java对象的状态来说, 无法区分.T…

顶级安卓数据恢复工具—— 15 个 Android 数据恢复程序榜单

探索并比较顶级 Android 数据恢复软件&#xff0c;并选择最好的 Android 恢复应用程序来恢复您的宝贵数据&#xff1a; 特别是您的智能手机或 Android 设备可以完成许多繁重的工作&#xff0c;其中最有用的是存储数据。Android 设备可以伪装成照片、视频、电子邮件甚至敏感商业…

蓝桥杯第四场双周赛(1~6)

1、水题 2、模拟题&#xff0c;写个函数即可 #define pb push_back #define x first #define y second #define int long long #define endl \n const LL maxn 4e057; const LL N 5e0510; const LL mod 1e097; const int inf 0x3f3f; const LL llinf 5e18;typedef pair…

flex布局实战之自动填充剩余

案例目标 文字部分自适应并且居中 图中是一个弹窗&#xff0c;我现在使用flex的布局来实现&#xff0c;标题和关闭按钮。因为是uni-app,所以标签是view 。你可以自行替换为 代码 <view class"popup-box"><view class"title"><view class&…

积跬步至千里 || 为循环添加进度条

有时候&#xff0c;我们的Python程序需要运行较长时间&#xff0c;原因是一些环节占用时间太长&#xff08;如for循环&#xff09;。如果我们要观察那些占用时间任务的执行进度&#xff0c;那么有一个进度条能实时的显示任务进度情况的话&#xff0c;将会非常方便。而tqdm库就是…

C语言—二维数组

一、二维数组的创建 int arr[3][4];char arr[3][5];double arr[2][4]; 数组创建&#xff1a;“[ ]”中要给一个常量&#xff0c;不能使用变量 二、二维数组的初始化 int arr[3][4]{1,2,3,4};int arr[3][4]{{1,2},{4,5}};int arr[][4]{{2,3},{4,5}}; 前面的为行&#xff0c…

JavaScript之DOM操作

第一章 API介绍 ​API是一种事先定义好的函数&#xff0c;用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程&#xff0c;而又无需访问源码&#xff0c;或理解内部工作机制的细节。 ​Web API接口&#xff1a;浏览器提供的一系列操作浏览器功能和页面元素的API(BO…

dat文件转换成excel教程

dat文件存在于很多的日用场合&#xff0c;为了更好的去进行办公使用&#xff0c;很多的用户都会将dat文件转换成excel&#xff0c;但是不知道怎么操作的却很多&#xff0c;下面来看看教程吧。 dat文件转换成excel&#xff1a; 1、首先打开excel&#xff0c;然后点击上面的“数…

2023-3年CSDN创作纪念日

机缘 今天开开心心出门去上班&#xff0c;就收到了一个csdn私信&#xff0c;打开一看说是给我惊喜来着&#xff0c;我心想csdn还能给惊喜&#xff1f;以为是有什么奖品或者周边之类的&#xff0c;结果什么也没有&#xff0c;打开就是一份信&#x1f602;。 也挺不错的&#xf…

与Windows 10更新大同小异!一步一步教你如何更新Windows 11

如果你想让你的Windows 11设备获得最佳性能&#xff0c;那么定期更新是至关重要的。即使是最好的电脑如果不更新也会受到影响&#xff0c;因为更新会应用软件调整&#xff0c;帮助你的设备更快、更平稳地运行。它还提高了安全性&#xff0c;意味着你可以从Microsoft的最新功能中…

YOLOv5小目标检测层

目录 一、原理 二、yaml配置文件 一、原理 小目标检测层,就是增加一个检测头,增加一层锚框,用来检测输入图像中像素较小的目标 二、yaml配置文件 # YOLOv5 🚀 by Ultralytics, GPL-3.0 license# Parameters nc: 3 # number of classes depth_multiple: 0.33 # model…