Linux imu6ull驱动- led

news2024/11/25 4:36:39

一、GPIO模块结构

        开始来啃手册了,打开我们的imx6ull手册。本章我们编写的是GPIO的,打开手册的第28章,这一章就有关于IMX6ULL 的 GPIO 模块结构。

mx6ull一共有5 组 GPIO(GPIO1~GPIO5)

GPIO1 有 32 个引脚:GPIO1_IO0~GPIO1_IO31;

GPIO2 有 22 个引脚:GPIO2_IO0~GPIO2_IO21;

GPIO3 有 29 个引脚:GPIO3_IO0~GPIO3_IO28;

GPIO4 有 29 个引脚:GPIO4_IO0~GPIO4_IO28;

GPIO5 有 12 个引脚:GPIO5_IO0~GPIO5_IO11;

往下拉就能看到GPIO配置的寄存器功能框架图。

 

二、寄存器配置分析

        根据上文的模块框图,我们知道GPIO 的控制涉及 4 大模块:CCM、IOMUXC、GPIO 模块本身。

1、CCM

参考资料:芯片手册《Chapter 32: IOMUX Controller (IOMUXC)》

功能:CCM 用于设置是否向 GPIO 模块提供时钟

①GPIOx 要用 CCM_CCGRy 寄存器中的 2 位来决定该组 GPIO 是否使能。哪组

GPIO 用哪个 CCM_CCGR 寄存器来设置。前面框图就有显示,使能对应GPIO组需要配置的寄存器位。

00:该 GPIO 模块全程被关闭

01:该 GPIO 模块在 CPU run mode 情况下是使能的;在 WAIT 或 STOP模式下,关闭

10:保留

11:该 GPIO 模块全程使能

 例如:GPIO1、GPIO5 时钟控制:

2、IOMUXC

参考资料:芯片手册《Chapter 32: IOMUX Controller (IOMUXC)》。

功能:引脚的模式(Mode、功能)

框图:可以看到IOMUXC分为两个部分。对于某个/某组引脚,IOMUXC中有2个寄存器用来设置它:SW_MUX和SW_PAD

(1)SW_MUX(选择功能)。

        对于选择寄存器,里面可以选择直接配置一个端口,也可以直接对一组引脚进行配置,这样子,对于我们有时候需要配置多个引脚,就可以直接配置一整组io。

(1)IOMUXC_SW_MUX_CTL_PAD_PADNAME> :Mux pad xxx,选择某个 pad 的功能。

(2)IOMUXC_SW_MUX_CTL_GRP_GROUP NAME>:Mux grp xxx,选择某组引脚的功能。

某个引脚,或是某组预设的引脚,都有8个可选的模式(alternate (ALT)MUX_MODE)。

比如:

(2)SW_PAD(设置上下拉电阻等参数

        对于设置上下拉电阻等参数寄存器,也是可以选择直接配置一个端口,或者直接对一组引脚进行配置。

(1)IOMUXC_SW_PAD_CTL_PAD_PAD_NAME>:pad pad xxx,设置某个pad的参数。

(2)IOMUXC_SW_PAD_CTL_GRP_GROUP NAME>:pad grp xxx,设置某组引脚的参数。

比如:

3、GPIO 模块

参考资料:芯片手册《Chapter 28​: General Purpose Input/Output (GPIO)

框图如下:

这里面我们需要关心3个寄存器:

(1)GPIOx_GDIR:设置引脚方向。

每位对应一个引脚,1-output,0-input。

(2)GPIOx_DR:设置输出引脚的电平。

每位对应一个引脚,1-高电平,0-低电平

 (3)GPIOx_PSR:读取引脚的电平。

每位对应一个引脚,1-高电平,0-低电平

 

三、GPIO读写寄存器具体分析。

1、读GPIO。

翻译一下,具体步骤为:

(1)设置CCM_CCGRx寄存器中某位使能对应的GPIO模块 // 默认是使能的,上图省略了

(2)设置IOMUX来选择引脚用于GPIO

(3)设置GPIOx_GDIR中某位为0,把该引脚设置为输入功能

(4)读GPIOx_DR或GPIOx_PSR得到某位的值(读GPIOx_DR返回的是GPIOx_PSR的值)

 

2、写GPIO

 

翻译一下:

(1)设置CCM_CCGRx寄存器中某位使能对应的GPIO模块 // 默认是使能的,上图省略了

(2)设置IOMUX来选择引脚用于GPIO

(3)设置GPIOx_GDIR中某位为1,把该引脚设置为输出功能写GPIOx_DR某位的值。

        需要注意的是,你可以设置该引脚的loopback功能,这样就可以从GPIOx_PSR中读到引脚的有实电平;你从GPIOx_DR中读回的只是上次设置的值,它并不能反应引脚的真实电平,比如可能因为硬件故障导致该引脚跟地短路了,你通过设置GPIOx_DR让它输出高电平并不会起效果。

 

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

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

相关文章

Python 的 datetime 模块

目录 简介 一、date类 (一)date 类属性 (二)date 类方法 (三)实例属性 (四)实例的方法 二、time类 (一)time 类属性 (二)tim…

听GPT 讲Rust源代码--library/core/src(2)

题图来自 5 Ways Rust Programming Language Is Used[1] File: rust/library/core/src/iter/adapters/by_ref_sized.rs 在Rust的源代码中,rust/library/core/src/iter/adapters/by_ref_sized.rs 文件实现了 ByRefSized 适配器,该适配器用于创建一个可以以…

基于遗传算法优化的直流电机PID控制器设计

PID控制器是工业控制中常用的一种控制算法,通过不断调节比例、积分和微分部分来实现对系统的稳定控制。然而,在一些复杂系统中,传统的PID参数调节方法可能存在局限性。本文将介绍一种基于遗传算法优化的直流电机PID控制器设计方法&#xff0c…

AIGC:使用bert_vits2实现栩栩如生的个性化语音克隆

1 VITS2模型 1.1 摘要 单阶段文本到语音模型最近被积极研究,其结果优于两阶段管道系统。以往的单阶段模型虽然取得了较大的进展,但在间歇性非自然性、计算效率、对音素转换依赖性强等方面仍有改进的空间。本文提出VITS2,一种单阶段的文本到…

windows下安装es及logstash、kibna

1、安装包下载 elasticsearch https://www.elastic.co/cn/downloads/past-releases#elasticsearch kibana安装包地址: https://www.elastic.co/cn/downloads/past-releases/kibana-8-10-4 logstash安装包地址: https://www.elastic.co/cn/downloads/past…

自适应模糊PID控制器在热交换器温度控制中的应用

热交换器是一种常见的热能传递设备,广泛应用于各个工业领域。对热交换器温度进行有效控制具有重要意义,可以提高能源利用效率和产品质量。然而,受到热传导特性和外部环境变化等因素的影响,热交换器温度控制难度较大。本文提出一种…

带你走进Cflow (三)·控制符号类型分析

目录 ​编辑 1、控制符号类型 1.1 语法类 1.2 符号别名 1.3 GCC 初始化 1、控制符号类型 有人也许注意到了输出中奇怪的现象:函数_exit 丢失了,虽然它在源文件中被printdir 调用了两次。这是因为默认情况下 cflow 忽略所有的一下划线开头的符号…

离线视频ocr识别

sudo apt-get install libleptonica-dev libtesseract-dev sudo apt-get install tesseract-ocr-chi-sim python -m pip install video-ocrwindows安装方法: 下载安装 https://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-w64-setup-5.3.3.20231005.exe 下…

python自动化测试selenium核心技术3种等待方式详解

这篇文章主要为大家介绍了python自动化测试selenium的核心技术三种等待方式示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪 UI自动化测试过程中,可能会出现因测试环境不稳定、网络慢等情况&a…

JavaEE初阶学习:JVM(八股文)

1.JVM 中的内存区域划分 JVM 其实是一个Java进程~ java 进程会从操作系统这里申请一大块内存区域,给java代码使用~ 内存区域进一步划分,给出不同的用途 1.堆 new 出来的对象 (成员变量) 2.栈 维护方法之间的调用关系 (局部变量) 3.方法区(旧) / 元数据区 (新) 放的是类加载之…

K8S容器持续Terminating无法正常关闭(sider-car容器异常,微服务容器正常)

问题 K8S上出现大量持续terminating的Pod,无法通过常规命令删除。需要编写脚本批量强制删除持续temminating的Pod:contribution-xxxxxxx。 解决 获取terminating状态的pod名称的命令: # 获取media命名空间下,名称带contributi…

【论文解读】针对生成任务的多模态图学习

一、简要介绍 多模态学习结合了多种数据模式,拓宽了模型可以利用的数据的类型和复杂性:例如,从纯文本到图像映射对。大多数多模态学习算法专注于建模来自两种模式的简单的一对一数据对,如图像-标题对,或音频文本对。然…

Ubuntu系统使用apt-get管理软件工具

记录一下使用Ubuntu系统的apt-get管理软件工具 先查看一下系统的版本,可以看到这里使用的是Ubuntu20.04版本,版本代号focal rootmyw:~# uname -a Linux myw 5.4.0-70-generic #78-Ubuntu SMP Fri Mar 19 13:29:52 UTC 2021 x86_64 x86_64 x86_64 GNU/L…

NI USRP软件无线设备的特点

NI USRP软件无线设备 NI的USRP(Universal Software Radio Peripheral)设备是RF应用中使用的软件无线(SDR)。NI的USRP收发器可以在多个频段发送和接收RF信号,因此可用于通信工程教育和研究。通过与LabVIEW开发环境相结合,USRP可以实现使用无线信号验证无…

在gitlab中的使用kaniko打造流水线

文章目录 kaniko工具介绍环境说明系统版本组件版本组件部署参考链接 部署harbor下载解压、创建相关目录配置部署 gitlab集成harbor集成项目ci配置最终结果 kaniko工具介绍 kaniko 是一种从容器或 Kubernetes 集群内的 Dockerfile 构建容器镜像的工具。 kaniko 解决了使用 Doc…

云效流水线docker部署 :node.js镜像部署VUE项目

文章目录 引言I 流水线配置1.1 项目dockerfile1.2 Node.js 镜像构建1.3 docker 部署引言 云效流水线配置实现docker 部署微服务项目:https://blog.csdn.net/z929118967/article/details/133687120?spm=1001.2014.3001.5501 配置dockerfile-> 镜像构建->docker部署。 …

GEE:将鼠标变成十字指针,点击获取影像值,显示值到UI中

作者:CSDN @ _养乐多_ 本文记录了在 Google Earth Engine(GEE)开发中,将鼠标变成十字指针,点击获取影像值,显示值到UI中的代码片段。这段代码复制过去修改变量名就可以用了。 效果如下图所示, 文章目录 一、代码片段一、代码片段 使用的时候将 YLDImage 变量换成你屏…

C++结构体定义 创建 赋值 结构体数组 结构体指针 结构体嵌套结构体

结构体是什么&#xff1f; struct是自定义数据类型&#xff0c;是一些类型集合组成的一个类型。结构体的定义方式 #include<iostream> using namespace std;struct Student {string name;int age;int score; };创建结构体变量并赋值 方式一&#xff0c;先创建结构体变…

汽车标定技术(九)--标定常量与#pragma的趣事

目录 1. 不添加#pragma语句 2. 添加#pragma语句 3. 标定量只给flash空间&#xff0c;不给ram指定空间 4. 总结 在之前不会使用overlay机制的时候&#xff0c;我们想要做汽车标定&#xff0c;标定常量编译出来的地址一般都应该是ram的地址&#xff0c;而且在链接文件中都会指…

Django——orm模块创建表关系

django orm中如何创建表关系 1. 表关系分析 表与表之间的关系: 一对多 多对多 一对一 没有关系 判断表关系的方法: 换位思考用4张表举例: 图书表 出版社表 作者表 作者详情表图书和出版社是一对多的关系 外键字段建在多的那一方图书和作者是多对多的关系 需要创建第三张表来…