实现安卓PWM-LED设备驱动:不写一行代码

news2024/12/27 12:35:37

文章目录

  • 一、前言
  • 二、系列文章
  • 三、准备工作
    • 3.1 查找PWM引脚
    • 3.2 原理图:确认引脚位置
    • 3.3 PWM Controller
  • 四、查阅PWM bindings
  • 五、编写设备树节点
    • 5.1 实现节点:pwm-leds
    • 5.2 测试命令
  • 六、后语

一、前言

在完成了基于GPIO的LED设备驱动的文章后,本文继续介绍基于PWM的LED设备驱动。同样的,站在巨人的肩膀上,不写一行代码……,但工资还是要领……

二、系列文章

1.基于GPIO的LED设备驱动
链接:实现安卓LED设备驱动:不写一行代码

2.基于PWM的LED设备驱动:即本文

三、准备工作

3.1 查找PWM引脚

(1)通过查看Datasheet,结合原理图,姑且选择GPIOZ_6作为实验所用的PWM引脚。

(2)GPIOZ_6在复用为Func4时,可作为PWM_D使用

image

3.2 原理图:确认引脚位置

(1)GPIOZ_6引脚,通过原理图可知,它位于J31插座左边的第7个PIN,即PIN-13

image

3.3 PWM Controller

(1)通过查阅板子的DTS设备树文件,查找PWM_D的控制器

(2)如下所示,控制PWM_D的控制器名为:pwm_cd, 此控制器同时控制了PWM_C和PWM_D

//文件:common\arch\arm\boot\dts\amlogic\mesontl1.dtsi

			pwm_cd: pwm@1a000 {
				compatible = "amlogic,tl1-ee-pwm";
				reg = <0x1a000 0x20>;
				#pwm-cells = <3>;
				clocks = <&xtal>,
						<&xtal>,
						<&xtal>,
						<&xtal>;
				clock-names = "clkin0",
						"clkin1",
						"clkin2",
						"clkin3";
				status = "disabled";
			};


四、查阅PWM bindings

想要站在大神的肩膀上,自然要查看大神遗留的Leds-pwm说明文档,以了解什么样的设备才能与大神的leds-pwm驱动绑定

  • 文件位置:Documentation/devicetree/bindings/leds/leds-pwmtxt
LED connected to PWM

Required properties:
- compatible : should be "pwm-leds".

Each LED is represented as a sub-node of the pwm-leds device.  Each
node's name represents the name of the corresponding LED.

LED sub-node properties:
- pwms : PWM property to point to the PWM device (phandle)/port (id) and to
  specify the period time to be used: <&phandle id period_ns>;
- pwm-names : (optional) Name to be used by the PWM subsystem for the PWM device
  For the pwms and pwm-names property please refer to:
  Documentation/devicetree/bindings/pwm/pwm.txt
- max-brightness : Maximum brightness possible for the LED
- active-low : (optional) For PWMs where the LED is wired to supply
  rather than ground.
- label :  (optional)
  see Documentation/devicetree/bindings/leds/common.txt
- linux,default-trigger :  (optional)
  see Documentation/devicetree/bindings/leds/common.txt

Example:

twl_pwm: pwm {
	/* provides two PWMs (id 0, 1 for PWM1 and PWM2) */
	compatible = "ti,twl6030-pwm";
	#pwm-cells = <2>;
};

twl_pwmled: pwmled {
	/* provides one PWM (id 0 for Charing indicator LED) */
	compatible = "ti,twl6030-pwmled";
	#pwm-cells = <2>;
};

pwmleds {
	compatible = "pwm-leds";
	kpad {
		label = "omap4::keypad";
		pwms = <&twl_pwm 0 7812500>;
		max-brightness = <127>; 
	};

	charging {
		label = "omap4:green:chrg";
		pwms = <&twl_pwmled 0 7812500>;
		max-brightness = <255>;
	};
};

五、编写设备树节点

5.1 实现节点:pwm-leds

	pwmleds {
		status = "okay";
		compatible = "pwm-leds";
			pwm_cd-led {
				//向&pwm_cd控制器传送了3个参数,分别是:1.index=6   2.Period=30541  3.极性=0
				pwms = <&pwm_cd 3 30541 0>;  //GPIOZ-6的index=3,这个具体要查阅datasheet和驱动源码
				max-brightness = <255>; //设置Levels,最大256级调整
			};
	};

5.2 测试命令

1)进入pwm_cd-led设备目录
:/sys/class/leds/pwm_cd-led # ls
brightness device max_brightness power subsystem trigger uevent
:/sys/class/leds/pwm_cd-led # cat brightness
0
:/sys/class/leds/pwm_cd-led # cat max_brightness
2552)尝试不同LEV的亮度值,值越大则占空比越大(越亮),反正则越小(越暗)
:/sys/class/leds/pwm_cd-led # echo 200 >  brightness
:/sys/class/leds/pwm_cd-led # echo 100 >  brightness
:/sys/class/leds/pwm_cd-led # echo 255 >  brightness
:/sys/class/leds/pwm_cd-led # echo 1 >  brightness
:/sys/class/leds/pwm_cd-led # echo 20 >  brightness
:/sys/class/leds/pwm_cd-led # echo 80 >  brightness
:/sys/class/leds/pwm_cd-led # echo 200 >  brightness
:/sys/class/leds/pwm_cd-led # echo 250 >  brightness
:/sys/class/leds/pwm_cd-led #

六、后语

继续周末爆肝……

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

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

相关文章

软件定义网络SDN(计算机网络-网络层)

目录 软件定义网络SDN 数据平面和控制平面 SDN 最重要的三个特征 控制平面与数据平面分离 SDN 的数据平面 软件定义网络SDN SDN的本质特点是控制平面和数据平面的分离以及网络的可编程性&#xff0c;从而实现了网络流量的灵活控制&#xff0c;方便用户管理和配置网络以及部…

2022(一等奖)B1014基于深度学习与街景图像的城市色彩感知与分析——以深圳市罗湖区为例

小组编号:B1014(一等奖) 作品名称:基于深度学习与街景图像的城市色彩感知与分析——以深圳罗湖区为例 作者单位:深圳大学建筑与城市规划学院 小组成员:吴若楠,曾绿,廖童欣,李丁一祺 指导老师:涂伟 作品视频 ,时长14:53 作品介绍 1 应用背景 城市色彩是指城市外部空…

云服务器安装Tomcat并设置域名解析

文章目录一、操作环境二、安装Tomcat服务器1.上传并解压压缩包2.配置Java环境3.启动Tomcat服务三、设置域名解析一、操作环境 操作系统版本&#xff1a;Ubuntu 20.04 64位 jdk版本&#xff1a;jdk-8u211-linux-x64&#xff08;版本尽量不要太高&#xff09; Tomcat版本&#x…

SpringFrameWork最基本框架场景及其原理

Hook扩展点 Hook钩子是一种编程思想&#xff0c;也是监听者模式的一种实现。在控制中心的执行过程(可理解也模板方法)中&#xff0c;会调用分阶段或者分层次来调用用户注册进来的Hook方法&#xff0c;用来修改或者监听控制中心的逻辑。如果需要将控制中心的内容暴露出来&#…

node.js+uni计算机毕设项目二手物品交易论坛小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

第10章_索引优化与查询优化

第10章_索引优化与查询优化 都有哪些维度可以进行数据库调优?简言之: 索引失效、没有充分利用到索引——索引建立关联查询太多JOIN (设计缺陷或不得已的需求)——SQL优化服务器调优及各个参数设置(缓冲、线程数等)———调整my.cnf。数据过多――分库分表 关于数据库调优的…

C++ 配置opencv 4.5.0开发环境

C++ 配置opencv 4.5.0开发环境 一、安装包下载二、安装过程三、VS环境配置一、安装包下载 这里提供两种下载方法:   1. opencv官网   2. csdn资源下载 二、安装过程 2.1 下载opencv-4.5.0安装包  2.2 双击开始安装,选择要安装目录,点击Extract。  2.3 等待解压完成…

包教包会——Cookie、Session、Token、JWT

前言 最近在做一个登陆注册的功能&#xff0c;这个功能要用到JWT鉴权。提到鉴权又想到自己直接学的Cookie&#xff0c;Session&#xff0c;Token。就想干脆也用一篇文章小小的概括一下。 &#x1f60b;&#x1f60b; 用文章输出这种方式来记录学习过程&#xff0c;并且日后可…

初识Node.js与内置模块

文章目录目标一、初识 Node.js1、回顾与思考&#xff08;1&#xff09;已经掌握了哪些技术&#xff08;2&#xff09;浏览器中的 JavaScript 的组成部分&#xff08;3&#xff09;思考&#xff1a;为什么 JavaScript 可以在浏览器中被执行&#xff08;4&#xff09;思考&#x…

Python图像处理【6】通过哈希查找重复和类似的图像

通过哈希查找重复和类似的图像0. 前言1. 哈希函数2. 使用哈希函数查找重复图像3. 使用感知哈希函数查找相似图像3.1 感知哈希函数3.2 查找相似图像4.3 查找指定目录中的相似图像小结系列链接0. 前言 在本节中&#xff0c;我们将讨论图像搜索中的两个相关问题&#xff0c;即使用…

node.js+uni计算机毕设项目贵州苗族文化展播微信小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

IP多播(计算机网络-网络层)

目录 一对多通信的应用需求 单播 vs 多播 多播路由器&#xff08;Multicast Router&#xff09; IP 多播的一些特点 D 类 IP 地址与以太网多播地址的映射关系 IP多播需要两种协议 互联网组管理协议 IGMP 多播路由选择协议 两种多播路由选择方法 建议的IP多播路由选择协…

后渗透操作(一)

在通过木马或者漏洞获得靶机的远程控制权后接下来就是后渗透的过程了&#xff0c;meterpreter可以看作一个支持多操作平台的高级后门工具&#xff0c;可以实现特权提升、信息攫取、系统监控、跳板攻击与内网拓展等多样化的功能特性。 一、访问文件系统 对于文件系统的访问有如…

腾讯云轻量应用服务器使用Typecho 应用镜像搭建博客!

Typecho 是开源的博客建站平台&#xff0c;具有轻量、高效、稳定等特点&#xff0c;操作界面简洁友好。该镜像基于 CentOS 7.6 64 位操作系统&#xff0c;并已预置 Nginx、PHP、MariaDB 软件。您可以使用它快速搭建博客、企业官网、电商、论坛等各类网站。 操作步骤 登录 轻量…

博士毕业论文答辩PPT的基本要点

博士毕业论文答辩PPT的基本要点 有借鉴和参考价值的地址或链接&#xff1a; 1、https://blog.csdn.net/lwz45698752/article/details/106648720 研究背景及研究意义 研究内容 总结以研究成果 里边的配色、结果展示的方式很值得借鉴&#xff0c;看起来重点突出&#xff0c…

【Pandas入门教程】如何轻松处理时间序列数据

如何轻松处理时间序列数据 来源&#xff1a;Pandas官网&#xff1a;https://pandas.pydata.org/docs/getting_started/intro_tutorials/index.html 笔记托管&#xff1a;https://gitee.com/DingJiaxiong/machine-learning-study 文章目录如何轻松处理时间序列数据导包数据准备【…

RV1126笔记十八:吸烟行为检测及部署<五>

若该文为原创文章,转载请注明原文出处。 ubuntu16.04上搭建转化成RKNN环境并把onnx转成RKNN模型(ubuntu16.04) onnx模型转rknn模型需要用到py3.8,所以搭建环境在转换,下面全部操作都是虚拟机下进行。 注意:转模型用py3.6, 训练用py3.8 一、miniconda安装 1、下载地址…

tensorflow01——安装,结构

从官网安装anaconda 安装tensorflow 注意tensorflow对应特定的python版本如3.6&#xff0c;3.7 直接从官网下载的anaconda会对应下载最新版本的python3.9 所以需要新建一个环境来装我们的tensorflow和它对应的python &#xff08;macbook m2&#xff09; 01创建新的环境命名…

【详细说明】二代身份证号码的组成结构(含校验码算法与行政区划代码)

文章内容&#xff1a;二代身份证号码的组成结构&#xff08;含校验码算法与行政区划代码&#xff09; 关键词组&#xff1a;身份证号码、组成、校验码、行政区划码 使用软件&#xff1a;无 虚拟环境&#xff1a;无 操作系统&#xff1a;Windows 11 【图源中国政府网】 文章目录…

node.js+uni计算机毕设项目广播剧微信小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…