【驅動篇】龍芯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.pswp.cn/web/41588.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41588.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41588.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

期末考試結束,老師該如何私發成績?

隨著期末考試的落幕&#xff0c;校園里又恢復了往日的寧靜。然而&#xff0c;對于老師們來說&#xff0c;這并不意味著工作的結束&#xff0c;相反&#xff0c;一系列繁瑣的任務才剛剛開始。 成績單的發放&#xff0c;就是其中一項讓人頭疼的工作。家長們焦急地等待著孩子的考試…

Python程序打包成EXE文件指南

本套課在線學習視頻&#xff08;網盤地址&#xff0c;保存到網盤即可免費觀看&#xff09;&#xff1a; ??https://pan.quark.cn/s/57ba5f313c5b?? 將Python程序打包成可執行文件&#xff08;EXE&#xff09;可以方便用戶在沒有Python環境的計算機上運行程序。本文將詳細…

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

我們知道Linux有很多的命令&#xff0c;那LInux要不要背命令&#xff1f; 答案是背最常用的那些就行了 那有的時候我們想查詢一些命令的詳細用法該怎么辦呢&#xff1f; 這里我給出3種方法 1.--help --help的使用方法很簡單啊 要查詢的命令 --help 我們看個例子 這里我只…

C語言4 運算符

目錄 1. 算術運算符 2. 關系運算符 3. 邏輯運算符 4. 位運算符 5. 賦值運算符 6. 自增和自減運算符 7. 條件運算符&#xff08;三元運算符&#xff09; 8. 逗號運算符 9. sizeof 運算符 10. 取地址和解引用運算符 11.運算符的優先級 1. 算術運算符 (加法)&#xff1…

CRT工具

CRT工具 傳輸位置設置 打開SFTP alt p 命令 ls&#xff1a;遠程機器當前目錄內容 lls&#xff1a;傳輸位置文件的目錄內容 pwd&#xff1a;遠程機器的當前位置 lpwd&#xff1a;傳輸位置的位置 get 文件&#xff1a;ftp傳輸文件 get -r 文件夾&#xff1a;ftp傳輸文件…

如何獲取歌曲id---cloudmusic

X-Requested-With:“XMLHttpRequest”: https://blog.csdn.net/muzico425/article/details/102735413 https://www.runoob.com/xml/xml-http.html https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest 通過該案例主要還是學習一下X-Requested-With:"XMLHtt…

大華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…

設計一個會員卡系統

會員卡系統在現代商業環境中是一個重要的客戶關系管理工具。通過會員卡系統&#xff0c;企業可以有效地增加客戶粘性&#xff0c;提高客戶滿意度&#xff0c;進而提升銷售額。本文將詳細討論如何設計一個全面的會員卡系統&#xff0c;包括會員卡的類型、權益設計、續費規則、升…

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…