女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux的PWM驅動框架及實現方法

CHANBAEK ? 來源:嵌入式系統研發 ? 作者:ESDev ? 2023-05-14 15:24 ? 次閱讀

1.概述

本文主要講述了Linux的PWM驅動框架、實現方法、驅動添加方法和調試方法。

示例Linux內核版本:6.2.8。

2.原理

PWM是Pulse-Width Modulation的簡稱,中文譯作脈沖寬度調制。 作為一種調制技術,PWM的原理是通過調整周期性波形的高電平時間寬度,從而改變有效信號的占空比,實現對設備的供電控制。 PWM技術的常見應用領域包括屏幕背光亮度調節、電機轉速控制和風扇轉速控制等。

Linux內核支持PWM驅動框架,該驅動框架采用結構體數據類型對PWM控制器和PWM信號進行了抽象,提供了PWM驅動框架核心代碼和sysfs接口代碼。 PWM驅動開發者可以方便地利用該驅動框架,添加特定PWM控制器的驅動程序,并使用sysfs接口進行功能調試。

3.驅動框架及實現方法

3.1驅動框架源碼

PWM驅動框架的主要源碼:

./include/linux/pwm.h //PWM驅動框架頭文件

./drivers/pwm/core.c //PWM驅動框架核心代碼

./drivers/pwm/sysfs.c //PWM驅動框架sysfs接口代碼

3.2驅動框架數據結構

(1)struct pwm_chip結構體,表示PWM控制器。

poYBAGRgi-OAAtMoAAEmE9a1D2c384.png

驅動開發者可以根據需要設計專用的PWM控制器結構體,以struct pwm_chip結構體作為一個成員變量,下面是一個示例,在./drivers/pwm/pwm-ab8500.c驅動中定義。

poYBAGRgjAGAO7tRAAAXvxHCN6c010.png

(2)struct pwm_ops結構體,包括PWM控制器的操作函數。 其中應該由驅動開發者實現的2個基礎函數為apply函數和get_state函數; apply函數用于配置PWM控制器,包括配置PWM信號的使能狀態、周期、占空比、極性等; get_state函數用于在注冊PWM控制器時獲取指定PWM通道信號的初始狀態,包括使能狀態、周期、占空比、極性等。

pYYBAGRgjAyAKgt-AAEsJ-v-fOA964.png

(3)struct pwm_device結構體,表示PWM控制器輸出的PWM信號。

pYYBAGRgjBSAJZMjAAEK8Fcvqps175.png

3.3驅動框架核心函數

(1)pwmchip_add函數。 用于注冊一個新的PWM控制器設備。 在./drivers/pwm/core.c中定義。

poYBAGRgjByAYaalAABNnZd9XME187.png

(2)pwmchip_remove函數。 用于移除一個PWM控制器設備。 在./drivers/pwm/core.c中定義。

pYYBAGRgjCOAHMcnAABijhvKx0A289.png

3.4驅動典型實現方法

(1) 概述

PWM驅動源文件位于./drivers/pwm路徑下,需要驅動開發者添加相應的源文件即可,源文件設計可參考其他廠家的驅動代碼。參考原有代碼的命名風格,可以將新添加的驅動源文件命名為pwm-xx.c,將probe和remove函數分別命名為xx_pwm_probe和xx_pwm_remove,將PWM控制器結構體定義為struct xx_pwm_chip。./drivers/pwm路徑下文件如下。

pYYBAGRgjDyAPI1JAADMoLbs774465.png

(2)apply函數和get_state函數定義

根據PWM控制器手冊,由驅動開發者定義apply函數和get_state函數。

(3)xx_pwm_probe函數定義

xx_pwm_probe函數的實現方法為:首先對PWM控制器結構體struct xx_pwm_chip變量進行初始化,然后調用PWM驅動框架核心函數pwmchip_add注冊一個新的PWM控制器設備。

(4)xx_pwm_remove函數定義

xx_pwm_remove函數的實現方法為:調用PWM驅動框架核心函數pwmchip_remove移除一個PWM控制器設備。

4.驅動添加方法

4.1添加驅動源文件

按3.4節所述方法,編寫驅動源文件pwm-xx.c,添加到./drivers/pwm路徑下。

4.2添加編譯支持

(1)修改./drivers/pwm路徑下的Kconfig文件,添加所添加的PWM驅動配置選項。

(2)修改./drivers/pwm路徑下的Makefile文件,添加pwm-xx.c的編譯選項。

(3)在memuconfig界面,使能所添加的PWM驅動。 配置界面如下所示。

pYYBAGRgjFSAHkR0AAFpqZTALU0166.png

4.3添加PWM控制器設備樹節點

在設備樹添加PWM控制器設備樹節點。 該節點的基本屬性包括兼容性、寄存器和#pwm-cells數量,按需添加中斷、時鐘、復位等屬性。

PWM控制器設備樹設計方法可參考./Documentation/devicetree/bindings/pwm。

下面是PWM控制器設備樹節點的示例。 參考文檔如下:

./Documentation/devicetree/bindings/pwm/nvidia,tegra20-pwm.yaml。

poYBAGRgjGSAeJPUAAB7H1414_w009.png

5.調試方法

使用sysfs接口對PWM驅動進行功能調試,主要調試命令示例如下。

(1)查看PWM控制器節點

ls /sys/class/pwm/pwmchip0

(2)打開指定PWM通道信號

echo n > /sys/class/pwm/pwmchip0/export

//n為通道編號

(3)設置PWM信號周期

echo pvalue > /sys/class/pwm/pwmchip0/pwm0/period

//pvalue為周期值

(4)設置PWM信號占空比

echo dvalue > /sys/class/pwm/pwmchip0/pwm0/duty_cycle

//dvalue為有效電平寬度值

(5)使能某個PWM通道信號

echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable

(6)禁止某個PWM通道信號

echo 0 > /sys/class/pwm/pwmchip0/pwm0/enable

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 控制器
    +關注

    關注

    114

    文章

    16959

    瀏覽量

    182857
  • 內核
    +關注

    關注

    3

    文章

    1408

    瀏覽量

    41084
  • PWM
    PWM
    +關注

    關注

    116

    文章

    5364

    瀏覽量

    217993
  • Linux
    +關注

    關注

    87

    文章

    11456

    瀏覽量

    212750
  • 驅動框架
    +關注

    關注

    0

    文章

    14

    瀏覽量

    4138
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    LinuxPWM驅動

    本文主要講述了LinuxPWM驅動框架實現方法驅動
    發表于 05-25 09:19 ?836次閱讀
    <b class='flag-5'>Linux</b>之<b class='flag-5'>PWM</b><b class='flag-5'>驅動</b>

    linux驅動框架是什么

    編寫linux驅動先看一下驅動框架是什么樣子的。驅動編寫和應用層編寫有什么區別呢?
    發表于 07-26 08:14

    Linux下的UART驅動框架詳解

    Linux下的UART驅動框架
    發表于 12-22 07:18

    Linux 驅動 = 軟件框架 + 硬件操作

    ??Linux 驅動 = 軟件框架 + 硬件操作??驅動程序依賴于 Linux 內核,你為開發板 A 開發
    發表于 12-17 07:11

    RT-Thread系統的PWM驅動框架設計實現

    PWM驅動框架PWM(脈沖寬度調制)簡單的 PWM 主要兩個參數:頻率占空比一般用在背光燈等要求不高的地方。高級特性不太適合通用
    發表于 05-31 16:28

    嵌入式Linux的USB驅動設計

    本文主要介紹了 Linux 平臺的USB設備驅動開發的一般步驟方法和技巧,通過詳細介紹USB的相關概念和Linux中USB設備驅動程序的數據
    發表于 06-08 17:15 ?49次下載
    嵌入式<b class='flag-5'>Linux</b>的USB<b class='flag-5'>驅動</b>設計

    Linux驅動程序缺陷檢測研究

    Linux驅動程序缺陷檢測框架,以及多性質制導的符號執行方法,支持針對多個缺陷性質的快速缺陷檢測。在LLVM和KLEE的基礎上實現了提出的
    發表于 11-21 15:26 ?9次下載
    <b class='flag-5'>Linux</b><b class='flag-5'>驅動</b>程序缺陷檢測研究

    想要駕馭Linux驅動開發,必須深刻理解Linux總線設備驅動框架

    想要駕馭Linux驅動開發,必須深刻理解Linux總線設備驅動框架。之所以會形成這樣的框架,主要
    的頭像 發表于 03-22 11:08 ?1.1w次閱讀
    想要駕馭<b class='flag-5'>Linux</b><b class='flag-5'>驅動</b>開發,必須深刻理解<b class='flag-5'>Linux</b>總線設備<b class='flag-5'>驅動</b><b class='flag-5'>框架</b>

    Linux DMA Engine框架的介紹

    此會話描述如何從設備驅動程序在Linux中使用DMA。 這包括內存分配,緩存控制和DMA設備控制。 詳細介紹了Linux DMA Engine框架
    的頭像 發表于 11-23 06:29 ?6641次閱讀

    你對Linux總線設備驅動框架是否了解

    Linux的設備驅動模型,或者說,Linux的設備驅動框架,都是同一個意思。應該這樣理解,(Linux
    發表于 05-05 15:13 ?847次閱讀

    如何使用Linux內核實現USB驅動程序框架

    Linux內核提供了完整的USB驅動程序框架。USB總線采用樹形結構,在一條總線上只能有唯一的主機設備。 Linux內核從主機和設備兩個角度觀察USB總線結構。本節介紹
    發表于 11-06 17:59 ?20次下載
    如何使用<b class='flag-5'>Linux</b>內核<b class='flag-5'>實現</b>USB<b class='flag-5'>驅動</b>程序<b class='flag-5'>框架</b>

    嵌入式Linux驅動開發從基礎到框架

    想講好嵌入式Linux驅動開發并不容易,各位業界大神最基礎的字符驅動到中斷并發再到驅動框架、應用層調用。但是總覺得業界寫的書都是點到為止,
    發表于 11-01 16:58 ?15次下載
    嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>驅動</b>開發從基礎到<b class='flag-5'>框架</b>

    看看Linux為相機提供的驅動框架

    ? V4L2 (Video Linux Two),是為支持Linux內核設計的驅動框架驅動框架
    的頭像 發表于 08-07 16:03 ?3701次閱讀
    看看<b class='flag-5'>Linux</b>為相機提供的<b class='flag-5'>驅動</b><b class='flag-5'>框架</b>

    Linux驅動分析之RTC框架

    Linux內核啟動時,它會從RTC中讀取時間與日期,作為基準值。然后通過軟件來維護系統時間和日期。Linux系統中提供了RTC核心層,對于驅動開發者而言,操作起來就變得很簡單了。我們來看看整體
    的頭像 發表于 05-26 15:12 ?1191次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>驅動</b>分析之RTC<b class='flag-5'>框架</b>

    Linux Regmap 驅動框架

    1、regmap 框架結構 regmap 驅動框架如下圖所示: regmap 框架分為三層: ①、底層物理總線:regmap 就是對不同的物理總線進行封裝,目前 regmap 支持的物
    的頭像 發表于 07-06 17:29 ?1357次閱讀
    <b class='flag-5'>Linux</b> Regmap <b class='flag-5'>驅動</b><b class='flag-5'>框架</b>