Linux 驱动开发基础知识——认识LED驱动程序 (二)

news2024/10/6 16:23:59

 个人名片:

🦁作者简介:一名喜欢分享和记录学习的在校大学生
🐯个人主页:妄北y

🐧个人QQ:2061314755

🐻个人邮箱:2061314755@qq.com
🦉个人WeChat:Vir2021GKBS
🐼本文由妄北y原创,首发CSDN🎊🎊🎊
🐨座右铭:大多数人想要改造这个世界,但却罕有人想改造自己。

专栏导航:

妄北y系列专栏导航:

C/C++的基础算法:C/C++是一种常用的编程语言,可以用于实现各种算法,这里我们对一些基础算法进行了详细的介绍与分享。🎇🎇🎇

C/C++刷题库:分享一些关于编程的练习基础题,也会后续加入一系列的算法题,分享自己的解题思路和方法。🥰🥰🥰

计算机网络:对计算机网络的基础知识框架有一个简单的学习与认识,对计算机网络中常见的题型进行一个总结与归纳。🍾🍾🍾

QT基础入门学习:对QT的基础图形化页面设计进行了一个简单的学习与认识,利用QT的基础知识进行了翻金币小游戏的制作🤹🤹🤹

Linux基础编程:初步认识什么是Linux,为什么学Linux,安装环境,进行基础命令的学习,入门级的shell编程。🍻🍻🍻

Linux的系统编程+网络编程:IO编程、进程、线程、进程间通讯(包括管道、信号、信号量、共享内存等)网络编程主要就是socket,poll,epoll,以及对TCP/IP的理解,同时要学会高并发式服务器的编写。🙌🙌🙌

Linux应用开发基础开发:分享Linux的基本概念、命令行操作、文件系统、用户和权限管理等,网络编程相关知识,TCP/IP 协议、套接字(Socket)编程等,可以实现网络通信功能。💐💐💐

Linux项目开发:Linux基础知识的实践,做项目是最锻炼能力的一个学习方法,这里我们会学习到一些简单基础的项目开发与应用,而且都是毕业设计级别的哦。🤸🤸🤸


非常期待和您一起在这个小小的互联网世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨ 

文章介绍:

🎉本篇文章对Linux 驱动开发基础知识学习的相关知识进行分享!🥳🥳🥳

当我们学习C 语言的时候,我们会写个 Hello 程序。 那当我们写 ARM 程序,也该有一个简单的程序引领我们入门,这个程序就是点亮 LED。

如果您觉得文章不错,期待你的一键三连哦,你的鼓励是我创作动力的源泉,让我们一起加油,一起奔跑,让我们顶峰相见!!!💪💪💪

🎁感谢大家点赞👍收藏⭐评论✍️

一、硬件知识_LED 原理图

我们怎样去点亮一个 LED 呢?分为三步:

        第1步 看原理图,确定控制 LED 的引脚;

        第2步 看主芯片的芯片手册,确定如何设置控制这个引脚;

        第3步 写程序;

原理图

LED 样子有很多种,像插脚的,贴片的。

        它们长得完全不一样,因此我们在原理图中将它抽象出来。

        点亮 LED 需要通电源,同时为了保护 LED,加个电阻减小电流。

        控制 LED 灯的亮灭,可以手动开关 LED,但在电子系统中,不可能让人来控制开关,通过编程,利用芯片的引脚去控制开关。 

LED 的驱动方式,常见的有四种。

(1)使用引脚输出 3.3V 点亮 LED,输出 0V 熄灭 LED

(2)使用引脚拉低到 0V 点亮 LED,输出 3.3V 熄灭 LED

(3)有的芯片为了省电等原因,其引脚驱动能力不足,这时可以使用三极管驱动

(4)使用引脚输出 1.2V 点亮 LED,输出 0V 熄灭 LED。 使用引脚输出 0V 点亮 LED,输出 1.2V 熄灭 LED。 

        由此,主芯片引脚输出高电平/低电平,即可改变 LED 状态,而无需关注 GPIO 引脚输出的是 3.3V 还是 1.2V。所以简称输出 1 或 0: 

逻辑 1-->高电平          逻辑 0-->低电平

二、普适的 GPIO 引脚操作方法 

GPIO: General-purpose input/output,通用的输入输出口

1.GPIO 模块一般结构

有多组 GPIO,每组有多个 GPIO

使能:电源/时钟

模式(Mode):引脚可用于 GPIO 或其他功能

方向:引脚 Mode 设置为 GPIO 时,可以继续设置它是输出引脚,还是输入引脚

数值:

        对于输出引脚,可以设置寄存器让它输出高、低电平

        对于输入引脚,可以读取寄存器得到引脚的当前电平

2.GPIO 寄存器操作

芯片手册一般有相关章节,用来介绍:power/clock

        可以设置对应寄存器使能某个 GPIO 模块(Module)

        有些芯片的 GPIO 是没有使能开关的,即它总是使能

一个引脚可以用于 GPIO、串口、USB 或其他功能

         有对应的寄存器来选择引脚的功能

对于已经设置为 GPIO 功能的引脚,有方向寄存器用来设置它的方向:输出、 输入

对于已经设置为 GPIO 功能的引脚,有数据寄存器用来写、读引脚电平状态 GPIO 寄存器的 2

操作方法:原则:不能影响到其他位

 更高效的办法,对于有些处理器有设置和清除寄存器

(1)直接读写:读出、修改对应位、写入

        要设置 bit n:

val = data_reg;
val = val | (1<<n);
data_reg = val;

        要清除 bit n: 

val = data_reg;
val = val & ~(1<<n);
data_reg = val;

 (2)set-and-clear protocol:

set_reg, clr_reg, data_reg 三个寄存器对应的是同一个物理寄存器

              a) 要设置 bit n:set_reg = (1<<n);

              b) 要清除 bit n:   clr_reg = (1<<n);

三、具体单板的 GPIO 操作方法

1.IMX6ULL 的 GPIO 操作方法

2. IMX6ULL 的 GPIO 模块结构

        有 5 组 GPIO(GPIO1~GPIO5),每组引脚最多有 32 个,但是可能实际上并没有那么多。

        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 的控制涉及 4 大模块:CCM、IOMUXC、GPIO、模块本身

(1)CCM 用于设置是否向 GPIO 模块提供时钟 

        GPIOx 要用 CCM_CCGRy 寄存器中的 2 位来决定该组 GPIO 是否使能。哪组 GPIO 用哪个 CCM_CCGR寄存器来设置,请看上图红框部分,CCM_CCGR 寄存器中某 2 位的取值含义如下:

00:该 GPIO 模块全程被关闭

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

10:保留

11:该 GPIO 模块全程使能

GPIO2 时钟控制: 

 GPIO1、GPIO5 时钟控制:

 GPIO3 时钟控制:

GPIO4 时钟控制: 

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

对于某个/某组引脚,IOMUXC 中有 2 个寄存器用来设置它:

 1).选择功能:

        a) IOMUXC_SW_MUX_CTL_PAD_ <PADNAME>:Mux pad xxx,选择某个 pad 的功能

        b) IOMUXC_SW_MUX_CTL_GRP_<GROUP NAME>:Mux grp xxx,选择某组引脚的功能

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

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

a) IOMUXC_SW_PAD_CTL_PAD_<PAD_NAME>:pad pad xxx,设置某个 pad 的参数

b) IOMUXC_SW_PAD_CTL_GRP_<GROUP NAME>:pad grp xxx,设置某组引脚的参数

 

大佬觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥任务在无形中完成,价值在无形中升华,让我们一起加油吧!🌙🌙🌙

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

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

相关文章

文件处理的重定义,dup2函数

目录 1.了解dup2函数的参数意义 2.举例子了解dup2函数 3.在模拟shell中加入> , >> , < 的指令 4.stdout和stderr的区别 1.了解dup2函数的参数意义 C中系统调用接口中的open-CSDN博客 可以在我上面的博客中了解到&#xff0c;文件其实是被进程以数组的形式存储…

空间解析几何在激光雷达的定位和测距中的应用

空间解析几何是一种数学工具&#xff0c;用于描述和分析空间中的几何关系。空间解析几何在激光雷达的定位和测距中起着重要的作用&#xff0c;在激光雷达的定位和测距中&#xff0c;空间解析几何可以帮助我们理解和计算激光雷达与目标物体之间的几何关系&#xff0c;通过描述和…

k8s的包管理工具helm

Helm是什么? 之前的这篇文章介绍了一开始接触k8s的时候接触到的几个命令工具 kubectl&kubelet&rancher&helm&kubeadm这几个命令行工具是什么关系&#xff1f;-CSDN博客 Helm 是一个用于管理和部署 Kubernetes 应用程序的包管理工具。它允许用户定义、安装和…

protobuf-Java使用.md

protobuf 环境配置 1、安装编译器 下载地址 直接解压缩。 2、配置环境变量 环境变量Path 中增加安装目录的路径 3、检查是否配置成功 protoc Usage: protoc [OPTION] PROTO_FILES Parse PROTO_FILES and generate output based on the options given:-IPATH, --proto_pa…

关于程序员的未来的这件事情,我是这么看的!

关于程序员的未来在哪里&#xff1f;很多想做程序员以及已经入坑的程序员都想知道&#xff0c;我作为一名工龄超过12年的资深大龄程序员&#xff0c;我其实也想知道&#xff0c;我也没办法确定程序员的未来在哪里。 或者我也不知道&#xff0c;为什么互联网当初招聘那么多的程…

10 Hadoop的安全模式及权限介绍

1、HDFS工作流程 启动NameNode&#xff0c;NameNode加载fsimage到内存&#xff0c;对内存数据执行edits log日志中的事务操作。文件系统元数据内存镜像加载完毕&#xff0c;进行fsimage和edits log日志的合并&#xff0c;并创建新的fsimage文件和一个空的edits log日志文件。N…

跟着cherno手搓游戏引擎【8】按键和鼠标的KeyCode

自定义KeyCode 先把glfw3.h里的KeyCode的定义抄到咱这里来。 在YOTO下创建KeyCode.h: #pragma once#ifdef YT_PLATFORM_WINDOWS///从glfw3中拿的 #define YT_KEY_SPACE 32 #define YT_KEY_APOSTROPHE 39 /* */ #define YT_KEY_COMMA 44…

node.js项目express的初始化

目录 1.初始化项目2.配置跨域3.开始编写API3.1准备3.2路由处理函数router_make下的user.js3.3路由模块router下的user.js3.4入口文件app.js里面去新增这段代码3.5启动项目进行测试 &#x1f44d; 点赞&#xff0c;你的认可是我创作的动力&#xff01; ⭐️ 收藏&#xff0c;你…

如何在浏览器上设置 VPN 网络虚拟专用网络

如何在DT浏览器上设置 VPN 网络 虚拟专用网络&#xff08;VPN&#xff09;是一种用公用网络架设专用网络的技术。如何在DT浏览器上设置 VPN 呢&#xff0c;先下载DT浏览器&#xff0c;建议在官方网站下载最新版&#xff0c;安装&#xff0c;在DT浏览器首页点更多&#xff0c;网…

Excel·VBA合并工作簿2

其他合并工作簿的方法&#xff0c;见之前的文章《ExcelVBA合并工作簿》 目录 8&#xff0c;合并文件夹下所有工作簿中所有工作表&#xff0c;按表头汇总举例 8&#xff0c;合并文件夹下所有工作簿中所有工作表&#xff0c;按表头汇总 与之前的文章《ExcelVBA合并工作簿&#x…

3.postman动态参数、文件上传及断言

一、postman内置动态参数以及自定义的动态参数 postman内置动态参数&#xff1a; {{$timestamp}} 生成当前时间的时间戳 {{$randomint}} 生成0-1000之间的随机数 {{$guid}} 生成随机guid字符串 自定义动态参数&#xff1a; 在请求中pre-req页面下 //手动的获得时间戳 var…

Java - 深入四大限流算法:原理、实现与应用

文章目录 Pre概述简单计数器原理实现测试优缺点 滑动窗口算法原理实现测试优缺点 漏桶算法原理实现测试优缺点 令牌桶算法原理实现测试优缺点 小结 Pre 深入理解分布式技术 - 限流 并发编程-25 高并发处理手段之消息队列思路 应用拆分思路 应用限流思路 SpringBoot - 优雅…

Spring Cloud中使用Dubbo

简介 Dubbo是一款高性能、轻量级的开源Java RPC框架&#xff0c;主要用于构建大型分布式系统。提供了三大核心能力&#xff1a;面向接口的远程方法调用&#xff0c;智能容错和负载均衡&#xff0c;以及服务自动注册和发现。 Dubbo框架主要由以下组件构成&#xff1a;Provider…

Qt打包成为exe遇到的问题及其解决方法

Qt打包成为exe遇到的问题及其解决方法 文章目录 Qt打包成为exe遇到的问题及其解决方法0. 前言1. 使用Release编译工程2. 利用windeployqt工具来找出和复制依赖项3. 解决 Qt Location /Qt Positioning is not installed4. 利用Enigma virtual box打包 .exe程序5. dependency wal…

C++从小白到初级工程师【个人学习笔记】

目录 1.背景2.基础二维数组概念二维数组定义方式 二维数组数组名称概念例子 1.背景 C作为能和计算机硬件打交道的语言&#xff0c;在计算机世界中具有重要意义。在Android 应用层的JNI开发中&#xff0c;Android framework层、驱动层、kernel层均使用广泛。 相应的&#xff0c…

无法找到mfc100.dll的解决方法分享,如何快速修复mfc100.dll文件

在日常使用电脑时&#xff0c;我们可能会碰到一些系统错误提示&#xff0c;比如“无法找到mfc100.dll”的信息。这种错误通常会阻碍代码的执行或某些应用程序的启动。为了帮助您解决这一问题&#xff0c;本文将深入探讨其成因&#xff0c;并提供几种不同的mfc100.dll解决方案。…

Pycharm Terminal 无法激活conda环境

1.问题 Failed to activate conda environment. Please open Anaconda prompt, and run conda init powershell there. 这导致我们无法在Pycharm中使用conda命令 2.解决办法 修改为第二个&#xff0c;然后重启Terminal 再打开时发现已经是当前的conda环境

68. redis计数与限流中incr+expire的坑以及解决办法(Lua+TTL)

文章目录 一、简介二、代码演进第一版代码&#xff08;存在bug隐患&#xff09;第二版代码&#xff08;几乎无隐患&#xff09;第三版代码(完美无瑕&#xff09; 一、简介 在日常工作中&#xff0c;经常会遇到对某种操作进行频次控制或者统计次数的需求&#xff0c;此时常用的…

一起来看看,C++11标准,那些超实用的新特性有哪些?

C11标准是 ISO/IEC 14882:2011 - Information technology -- Programming languages -- C 的简称&#xff0c;也称为C0x。它由国际标准化组织&#xff08;ISO&#xff09;和国际电工委员会&#xff08;IEC&#xff09;旗下的C标准委员会&#xff08;ISO/IEC JTC1/SC22/WG21&…

基于华为MRS3.2.0实时Flink消费Kafka落盘至HDFS的Hive外部表的调度方案

文章目录 1 Kafka1.1 Kerberos安全模式的认证与环境准备1.2 创建一个测试主题1.3 消费主题的接收测试 2 Flink1.1 Kerberos安全模式的认证与环境准备1.2 Flink任务的开发 3 HDFS与Hive3.1 Shell脚本的编写思路3.2 脚本测试方法 4 DolphinScheduler 该需求为实时接收对手Topic&a…