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

这篇具有很好参考价值的文章主要介绍了Linux 驱动开发基础知识——认识LED驱动程序 (二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 个人名片:

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

🦁作者简介:一名喜欢分享和记录学习的在校大学生
🐯个人主页:妄北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 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

文章介绍:

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

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

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

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

目录:

 

目录

一、硬件知识_LED 原理图

原理图

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

1.GPIO 模块一般结构

2.GPIO 寄存器操作

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

1.IMX6ULL 的 GPIO 操作方法

2. IMX6ULL 的 GPIO 模块结构

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

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

3.GPIO 模块内部 

(1)GPIOx_GDIR:

(2)GPIOx_DR:

(3) GPIOx_PSR:

4.读 GPIO 

6.写 GPIO

三、基于IMX6ULL的LED寄存器操作

1.先看原理图原理图

2.再看芯片手册:使能GPIO5

 3.再看芯片手册:设置GPIO5_3为GPIO

4.再看芯片手册:设置GPIO5_3为输出 

 四、框架图


一、硬件知识_LED 原理图

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

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

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

        第3步 写程序;

原理图

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

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

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

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

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

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

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。 

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

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

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

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

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

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

1.GPIO 模块一般结构

有多组 GPIO,每组有多个 GPIO

使能:电源/时钟

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

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

数值:

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

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

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

2.GPIO 寄存器操作

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

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

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

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

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

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

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

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

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

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

(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);

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

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

1.IMX6ULL 的 GPIO 操作方法

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

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、模块本身

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

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

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

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

00:该 GPIO 模块全程被关闭

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

10:保留

11:该 GPIO 模块全程使能

GPIO2 时钟控制: 

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

 GPIO1、GPIO5 时钟控制:

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

 GPIO3 时钟控制:

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

GPIO4 时钟控制: 

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

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

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

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

 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)

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器 2)设置上下拉电阻等参数

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

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

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

3.GPIO 模块内部 

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

我们暂时只需要关心 3 个寄存器: 

(1)GPIOx_GDIR:

        设置引脚方向,每位对应一个引脚,1-output,0-input

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

(2)GPIOx_DR:

        设置输出引脚的电平,每位对应一个引脚,1-高电平,0-低电平 

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

(3) GPIOx_PSR:

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

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

4.读 GPIO 

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

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

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

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

6.写 GPIO

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

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

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

(4)写 GPIOx_DR 某位的值

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

三、基于IMX6ULL的LED寄存器操作

1.先看原理图原理图

        打开原理图,搜“LED”,如下图所示:

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

        用到了GPIO5中的第3个引脚 ,要想点亮LED,我们需要将GPIO输出低电平

2.再看芯片手册:使能GPIO5

        GPIO5_3属于GPIO5里的第3个引脚。

        怎么使能GPIO5对于IMX6ULLGPIO5默认使能,无需设置。

        CCM_CCGR1地址:0x020C4000 + 0x6C

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

 3.再看芯片手册:设置GPIO5_3为GPIO

IOMUXC_SNVS_SW_MUX_CTL_PAD_SNVS_TAMPER3地址:0x02290000 + 0x14

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

4.再看芯片手册:设置GPIO5_3为输出 

GPIO5_GDIR地址:0x020AC004

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

 四、框架图

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

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

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

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

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器

Linux 驱动开发基础知识——认识LED驱动程序 (二),Linux 驱动开发基础知识,linux,运维,服务器文章来源地址https://www.toymoban.com/news/detail-811124.html

到了这里,关于Linux 驱动开发基础知识——认识LED驱动程序 (二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 开发基础知识-认识Tomcat,Tomcat基础,快速入门Tomcat

    Tomcat 服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。 往细的方面说:Tomcat 是一个 HTTP 服务器。HTTP 协议就是 HTTP 客户端和 HTTP 服务器之间的交互数据的格式

    2024年02月19日
    浏览(97)
  • 1. 驱动开发--基础知识

    该文内容源于朱有鹏老师的课程,按照自己的理解进行汇总,方便查阅。如有侵权,请告知删除。 驱动一词的字面意思 物理上的驱动 硬件中的驱动 linux内核驱动   软件层面的驱动广义上就是指:这一段代码操作硬件去动,所以这一段代码就叫硬件的驱动程序。( 本质上

    2024年02月09日
    浏览(40)
  • Ceph基础知识和基础架构认识

    Ceph是一个可靠地、自动重均衡、自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储、块设备存储和文件系统服务。在虚拟化领域里,比较常用到的是Ceph的块设备存储,比如在OpenStack项目里,Ceph的块设备存储可以对接OpenStack的cinder后端存储、

    2024年02月10日
    浏览(52)
  • 嵌入式Linux裸机开发(一)基础介绍及汇编LED驱动

    现在开始正式在开发板上进行开发,仍然看的是正点原子的资料 使用的是Cortex-A7 点击芯片名字打开介绍,主要参考的手册是: 以及数据手册: 对于一般的STM32来说,IO的表现形式为: 管教名为PA1,管脚的功能在倒数第二列 对于IMX6ULL,IO形式在参考手册里面,且没有上面的表

    2024年02月07日
    浏览(66)
  • PYTHON(一)——认识python、基础知识

    目录 目录 一、为什么要学习python? 二、输出(用Python语言问候世界!) 输出的进阶: 三、认识错误 (BUG) 四、输入 五、变量  名字里是什么: 变量名的命名规则 : 六、什么是赋值运算符 简单的赋值运算符 加法赋值运算符: 减法赋值运算符: 取余赋值运算符 增量运算

    2024年02月09日
    浏览(51)
  • C++ 基础知识 四 ( 认识STL 上篇 )

    Standard Template Library:标准模板库 是一个基于泛型的C++类模板库由Alexander Stepanov于1994年开发 其目的是为了提供一致通用和高效的数据结构和算法,同时不限制用户所处理的数据类型和编程范式。STL的原型最初由Andrew Koenig和其它C++专家小组进行设计并在1995年C++标准委员会的推

    2024年02月03日
    浏览(49)
  • 今天来认识一下无聊的spark和scala基础理知识

    spark: 首先了解什么是spark。 Spark是一种快速、通用、可扩展的大数据分析引擎。 --spark的发展史 spark的主要优点 1.快速 一般情况下,对于迭代次数较多的应用程序,Spark程序在内存中的运行速度是Hadoop MapReduce运行速度的100多倍,在磁盘上的运行速度是Hadoop MapReduce运行速度的

    2024年03月19日
    浏览(45)
  • Linux驱动开发—最详细应用程序调用驱动程序解析

    Linux下进行驱动开发,完全将驱动程序与应用程序隔开,中间通过 C标准库函数 以及 系统调用 完成驱动层和应用层的数据交换。 驱动加载成功以后会在“/dev”目录下生成一个相应的文件,应用程序通过 对“/dev/xxx” (xxx 是具体的驱动文件名字) 的文件进行相应的操作 即可实

    2024年02月16日
    浏览(47)
  • 【计算机基础知识10】解析黑窗口CMD:认识CMD及常见命令

    目录 一、前言 二、CMD的基本知识 三、CMD常见命令分类 1. 文件和目录管理命令 1.1 列出文件和目录:dir 1.2 创建目录:mkdir 1.3 删除目录:rmdir 1.4 复制文件或目录:copy 1.5 移动文件或目录:move 2. 系统信息与配置命令 2.1 显示系统信息:systeminfo 2.2 IP配置相关命令:ipconfig 2.3 进

    2024年02月09日
    浏览(46)
  • 嵌入式Linux驱动开发 02:将驱动程序添加到内核中

    在上一篇文章 《嵌入式Linux驱动开发 01:基础开发与使用》 中我们已经实现了最基础的驱动功能。在那篇文章中我们的驱动代码是独立于内核代码存放的,并且我们的驱动编译后也是一个独立的模块。在实际使用中将驱动代码放在内核代码中,并将驱动编译到内核中也是比较

    2023年04月09日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包