【驱动篇】龙芯LS2K0300之PWM设备驱动

实验目的

利用脉冲调制效应(PWM)等效改变输出功率大小控制LED,从而实现呼吸灯效果,需要用到RGB LED模块

模块连接

IO 插针接口上一共集成了两路PWM,分别是PWM2和PWM3,对应GPIO88、GPIO89
在这里插入图片描述

PWM2和PWM3对应Pin3和Pin5引脚,这里使用Pin1和Pin3分别连接LED的GND和R口
在这里插入图片描述

修改设备树

arch/loongarch/boot/dts/loongson/loongson_2k0300.dtsi

pwm2: pwm@0x1611b020 {compatible = "loongson,ls2k-pwm";reg = <0 0x1611b020 0 0xf>;interrupt-parent = <&icu>;interrupts = <17>;#pwm-cells = <2>;clock-frequency = <100000000>;status = "disabled";
};pwm3: pwm@0x1611b030 {compatible = "loongson,ls2k-pwm";reg = <0 0x1611b030 0 0xf>;interrupt-parent = <&icu>;interrupts = <17>;#pwm-cells = <2>;clock-frequency = <100000000>;status = "disabled";
};

arch/loongarch/boot/dts/loongson/2k0300-pinctrl.dtsi

pwm2_pin: pwm2-pin{pwm2_mux_m0: pwm2-mux-m0{loongson,pinmux = <&gpa4 2 2>;loongson,pinmux-funcsel = <PINCTL_FUNCTION1>;};pwm2_mux_m1: pwm2-mux-m1{loongson,pinmux = <&gpa5 8 8>;              	/* pwm2 have two multiplex methods */loongson,pinmux-funcsel = <PINCTL_FUNCTION2>;};
};pwm3_pin: pwm3-pin{pwm3_mux_m0: pwm3-mux-m0{loongson,pinmux = <&gpa4 3 3>;loongson,pinmux-funcsel = <PINCTL_FUNCTION1>;};pwm3_mux_m1: pwm3-mux-m1{							/* pwm3 have two multiplex methods */loongson,pinmux = <&gpa5 9 9>;loongson,pinmux-funcsel = <PINCTL_FUNCTION2>;};
};

arch/loongarch/boot/dts/loongson/loongson_2k0300_pai_99.dts

&pwm2{status = "okay";pinctrl-names = "default";pinctrl-0 = <&pwm2_mux_m1>;
};
&pwm3{status = "okay";pinctrl-names = "default";pinctrl-0 = <&pwm3_mux_m1>;
};

修改完毕后重新编译内核,将内核部署到开发板/boot目录下,重启开发板发现/sys/class/pwm下已经生成两个pwmchip节点

在这里插入图片描述

波形测试

运行测试脚本run.sh,周期和占空比脉冲的时间单位为ns

echo 0 > /sys/class/pwm/pwmchip0/export					# 导出pwm节点
echo 0 > /sys/class/pwm/pwmchip0/pwm0/enable			# 关闭pwm输出
echo 100000 > /sys/class/pwm/pwmchip0/pwm0/period		# 设置pwm周期
echo 50000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle	# 设置占空比脉冲数
echo "normal" > /sys/class/pwm/pwmchip0/pwm0/polarity	# 设置极性,有normal和inversed两种
echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable			# 开启pwm输出

示波器查看PWM2输出波形:生成了10KHz的波形,占空比为50%

在这里插入图片描述

PWM LED模拟呼吸灯效果,为了简单起见就不写C语言代码了

num=10
peroid=100000
max=100000
min=10
flag=0echo $peroid > /sys/class/pwm/pwmchip0/pwm0/periodwhile true
doif [ $flag -eq 0 ]then if [ $num -lt $max ]then  echo 0 > /sys/class/pwm/pwmchip0/pwm0/enable
#			echo $peroid > /sys/class/pwm/pwmchip0/pwm0/periodecho $num > /sys/class/pwm/pwmchip0/pwm0/duty_cycleecho "normal" > /sys/class/pwm/pwmchip0/pwm0/polarityecho 1 > /sys/class/pwm/pwmchip0/pwm0/enablesleep 0.1let num+=10000	elseflag=1fielseif [ $num -gt $min ]then  echo 0 > /sys/class/pwm/pwmchip0/pwm0/enable
#			echo $peroid > /sys/class/pwm/pwmchip0/pwm0/periodecho $num > /sys/class/pwm/pwmchip0/pwm0/duty_cycleecho "normal" > /sys/class/pwm/pwmchip0/pwm0/polarityecho 1 > /sys/class/pwm/pwmchip0/pwm0/enablesleep 0.1let num-=10000elseflag=0fi	fi	
done

实验效果

PWM动态输出效果 + 呼吸灯

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

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

相关文章

期末考试结束,老师该如何私发成绩?

随着期末考试的落幕&#xff0c;校园里又恢复了往日的宁静。然而&#xff0c;对于老师们来说&#xff0c;这并不意味着工作的结束&#xff0c;相反&#xff0c;一系列繁琐的任务才刚刚开始。 成绩单的发放&#xff0c;就是其中一项让人头疼的工作。家长们焦急地等待着孩子的考试…

【Linux】在线求助命令--help,man page , info page

我们知道Linux有很多的命令&#xff0c;那LInux要不要背命令&#xff1f; 答案是背最常用的那些就行了 那有的时候我们想查询一些命令的详细用法该怎么办呢&#xff1f; 这里我给出3种方法 1.--help --help的使用方法很简单啊 要查询的命令 --help 我们看个例子 这里我只…

CRT工具

CRT工具 传输位置设置 打开SFTP alt p 命令 ls&#xff1a;远程机器当前目录内容 lls&#xff1a;传输位置文件的目录内容 pwd&#xff1a;远程机器的当前位置 lpwd&#xff1a;传输位置的位置 get 文件&#xff1a;ftp传输文件 get -r 文件夹&#xff1a;ftp传输文件…

大华DSS user_toLoginPage.action命令执行漏洞

免责声明 本文章仅做网络安全技术研究使用&#xff01;严禁用于非法犯罪行为&#xff0c;请严格遵守国家法律法规&#xff1b;请勿利用文章内的相关技术从事非法测试&#xff0c;如因此产生的一切不良后果与文章作者无关。使用本文所提供的信息或工具即视为同意本免责声明&…

go语言day11 错误 defer(),panic(),recover()

错误&#xff1a; 创建错误 1&#xff09;fmt包下提供的方法 fmt.Errorf(" 格式化字符串信息 " &#xff0c; 空接口类型对象 ) 2&#xff09;errors包下提供的方法 errors.New(" 字符串信息 ") 创建自定义错误 需要实现error接口&#xff0c;而error接口…

JavaSe系列二十七: Java正则表达式

正则表达式 为什么要学习正则表达式再提几个问题解决之道-正则表达式正则表达式基本介绍介绍 正则表达式底层实现实例分析 正则表达式语法基本介绍元字符-转义号 \\\\元字符-字符匹配符元字符-选择匹配符元字符-限定符元字符-定位符分组非贪婪匹配 应用实例对字符串进行如下验证…

学习笔记——动态路由——OSPF聚合(汇总)

十一、OSPF聚合(汇总) 1、路由聚合(汇总) 路由汇总是一种重要的思想&#xff0c;在大型的项目中是必须考虑的一个重点事项。随着网络的规模越来越大&#xff0c;网络中的设备所需维护的路由表项也就会越来越多&#xff0c;路由表的规模也就会逐渐变大&#xff0c;而路由表是需…

React中的useMemo和memo

引言 React是一个声明式的JavaScript库&#xff0c;用于构建用户界面。在开发过程中&#xff0c;性能优化是一个重要的方面。useMemo和memo是React提供的工具&#xff0c;用于帮助开发者避免不必要的渲染和计算&#xff0c;从而提升应用性能。 问题背景 在React应用中&#…

实现antd designable平台的组件拖拽功能

平台&#xff1a;designable设计器 github&#xff1a;designable 目录 1 背景2 技术栈3 组件拖拽和放置3.1 类型定义3.2 拖拽3.3 放置 1 背景 由于业务需求&#xff0c;我们需要实现designable平台的一个简易版的组件拖拽功能。 #mermaid-svg-QrxSDGe9YyGG3LbQ {font-family:…

【Unity2D 2022:UI】制作角色血条

一、创建血底UI 1. 创建画布&#xff08;Canvas&#xff09; 2. 在画布上添加血底图像&#xff08;Image&#xff09;子物体 二、编辑血底UI 1. 将血底图片拖入源图像&#xff08;Source Image&#xff09;中 2. 点击设置为图片的原大小&#xff08;Set Native Size&#x…

Java | Leetcode Java题解之第219题存在重复元素II

题目&#xff1a; 题解&#xff1a; class Solution {public boolean containsNearbyDuplicate(int[] nums, int k) {Set<Integer> set new HashSet<Integer>();int length nums.length;for (int i 0; i < length; i) {if (i > k) {set.remove(nums[i - …

# 三 JS的流程控制和函数

三 JS的流程控制和函数 3.1 JS分支结构 if结构 这里的if结构几乎和JAVA中的一样,需要注意的是 if()中的非空字符串会被认为是trueif()中的非零数字会被认为是true 代码 if(false){// 非空字符串 if判断为trueconsole.log(true) }else{console.log(false) } if(){// 长度为0…

GitHub详解:代码托管与协作开发平台

文章目录 一、GitHub简介二、GitHub的核心功能2.1 仓库&#xff08;Repository&#xff09;2.2 版本控制与分支&#xff08;Branch&#xff09;2.3 Pull Request2.4 Issues与Projects2.5 GitHub Actions 三、GitHub的使用方法3.1 注册与登录3.2 创建和管理仓库3.3 使用Git进行代…

【密码学】密码学中的四种攻击方式和两种攻击手段

在密码学中&#xff0c;攻击方式通常指的是密码分析者试图破解加密信息或绕过安全机制的各种策略。根据密码分析者对明文、密文以及加密算法的知识程度&#xff0c;攻击可以分为以下四种基本类型&#xff1a; 一、四种攻击的定义 &#xff08;1&#xff09;唯密文攻击(COA, C…

PCIe驱动开发(2)— 第一个简单驱动编写和测试

PCIe驱动开发&#xff08;2&#xff09;— 第一个简单驱动编写和测试 一、前言 教程参考&#xff1a;02_实战部分_PCIE设备测试 教程参考&#xff1a;03_PCIe设备驱动源码解析 二、驱动编写 新建hello_pcie.c文件 touch hello_pcie.c然后编写内容如下所示&#xff1a; #i…

【持续集成_03课_Jenkins生成Allure报告及Sonar静态扫描】

1、 一、构建之后的配置 1、安装allure插件 安装好之后&#xff0c;可以在这里搜到已经安装的 2、配置allure的allure-commandline 正常配置&#xff0c;是要么在工具里配置&#xff0c;要么在系统里配置 allure-commandline是在工具里进行配置 两种方式进行配置 1&#xff…

原生JavaScript实现录屏功能

1. 前言 使用JavaScript实现浏览器中打开系统录屏功能 示例图: 2. 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><…

LabVIEW机器视觉系统中的图像畸变、校准和矫正

在机器视觉应用中&#xff0c;图像畸变、校准和矫正是确保图像准确性的关键步骤。LabVIEW作为一种强大的图像处理和分析工具&#xff0c;提供了一系列功能来处理这些问题。以下是对图像畸变、校准和矫正的详细介绍。 图像畸变 图像畸变 是指由于摄像镜头的光学特性或拍摄角度问…

算法重新刷题

基础算法 前缀和 一维前缀和 [USACO16JAN] Subsequences Summing to Sevens S - 洛谷 这一题主要是需要结合数学知识来求解&#xff0c; #include <iostream> #include <cstring> #include <cstdio> #include <algorithm>using namespace std;con…

进入防火墙Web管理页面(eNSP USG6000V)和管理员模块

1、进入防火墙Web管理页面 USG系列是华为提供的一款高端防火墙产品&#xff0c;其特点在于提供强大的安全防护能力和灵活的扩展性。 以eNSP中的USG6000为例&#xff1a; MGMT口&#xff08;web管理口&#xff09;&#xff1a;对应设备上的G0/0/0口&#xff0c;上面初始配有一…