基於tiny4412的Linux內核移植 -- PWM子系統學習(七)

来源:http://www.cnblogs.com/pengdonglin137/archive/2016/01/30/5171275.html
-Advertisement-
Play Games


作者信息

作者: 彭東林

郵箱:[email protected]

QQ:405728433

平臺簡介

開發板:tiny4412ADK + S700 + 4GB Flash

要移植的內核版本:Linux-4.4.0 (支持device tree)

u-boot版本:友善之臂自帶的 U-Boot 2010.12 (為支持uImage啟動,做了少許改動)

busybox版本:busybox 1.25

交叉編譯工具鏈: arm-none-linux-gnueabi-gcc

      (gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29))

概述

     Exynos4412一共可以輸出4路PWM(timer0、timer1、timer2、timer3產生的PWM有對應的輸出引腳,timer4沒有對應的引腳),但是在tiny4412上只有兩路PWM引出供片外外設使用,分別來自timer0和timer1,其中timer0輸出的PWM0用於控制底板上的有源蜂鳴器(TMB12A05),timer1產生的PWM1用於控制LCD的背光亮度。

核心板:

image

底板(有源蜂鳴器):

image 

底板(LCD背光):

image

 

下麵我們以用PWM控制蜂鳴器為例學習一下PWM子系統和backlight子系統。

實驗一、用PWM控制板子上的蜂鳴器

 

對應的驅動文件:drivers/pwm/pwm-samsung.c

修改設備樹文件 arch/arm/boot/dts/exynos4412-tiny4412.dts

   1: diff --git a/arch/arm/boot/dts/exynos4412-tiny4412.dts b/arch/arm/boot/dts/exynos4412-tiny4412.dts
   2: index 585cab7..0425200 100644
   3: --- a/arch/arm/boot/dts/exynos4412-tiny4412.dts
   4: +++ b/arch/arm/boot/dts/exynos4412-tiny4412.dts
   5: @@ -123,6 +123,13 @@
   6:      cap-mmc-highspeed;
   7:  };
   8:  
   9: +&pwm {
  10: +    pinctrl-0 = <&pwm0_out &pwm1_out>;
  11: +    pinctrl-names = "default";
  12: +    samsung,pwm-outputs = <0>, <1>;
  13: +    status = "okay";
  14: +};
  15: +
  16:  &serial_0 {
  17:      status = "okay";
  18:  };

其中 pinctrl-0後的參數是為了設置用到的gpio的復用功能,pwm0_out是在arch/arm/boot/dts/exynos4x12-pinctrl.dtsi中定義的:

   1: pwm0_out: pwm0-out {
   2:     samsung,pins = "gpd0-0";
   3:     samsung,pin-function = <2>;
   4:     samsung,pin-pud = <0>;
   5:     samsung,pin-drv = <0>;
   6: };

意思是將gpiod0_0引腳設置的功能復用設置為2,2是什麼意思呢?對於Samsung來說:

image

這裡的2表示設置為TOUT_0,即PWM0的脈衝輸出引腳。同理可以理解pwm1_out的意思。

samsung,pwm_outs後的參數表示只有PWM0和PWM1兩路可以供板級外設使用,解析過程可以參考驅動程式。

其中pwm是在 arch/arm/boot/dts/exynos4.dtsi

   1: pwm: pwm@139D0000 {
   2:     compatible = "samsung,exynos4210-pwm";
   3:     reg = <0x139D0000 0x1000>;
   4:     interrupts = <0 37 0>, <0 38 0>, <0 39 0>, <0 40 0>, <0 41 0>;
   5:     clocks = <&clock CLK_PWM>;
   6:     clock-names = "timers";
   7:     #pwm-cells = <3>;
   8:     status = "disabled";
   9: };

 

測試

重新編譯設備樹:

make dtbs

用新的設備樹鏡像啟動內核

[root@tiny4412 ]# cd /sys/class/pwm/
[root@tiny4412 pwm]# ls
pwmchip0
[root@tiny4412 pwm]# cd pwmchip0/
[root@tiny4412 pwmchip0]# ls
device     export     npwm       power      subsystem  uevent     unexport

在/sys/class/pwm中有註冊的pwmchip0,PWM0-3都對應這個pwmchip0,是調用pwmchip_add函數創建的。

[root@tiny4412 pwmchip0]# ls
device     export     npwm       power      subsystem  uevent     unexport
[root@tiny4412 pwmchip0]# cat npwm 
5
[root@tiny4412 pwmchip0]# echo 0 > export 
[root@tiny4412 pwmchip0]# ls
device     npwm       pwm0       uevent
export     power      subsystem  unexport
[root@tiny4412 pwmchip0]# cd pwm0/
[root@tiny4412 pwm0]# ls
duty_cycle  enable      period      polarity    power       uevent

npwm的意思是Exynos4412支持的pwm通道個數(在驅動里將這個值設置為了5,即將timer4也包含在內了)。蜂鳴器對應的的PWM0,所以我們向export中寫入0,然後就會在當前目錄下產生了一個名為pwm0的新目錄,其中是設置PWM0參數的配置文件。

在pwm0目錄下:

polarity:接受normal或inversed兩個參數,表示TOUT_0電平翻轉;在exynos4412的用戶手冊的第24節:

image 

period:表示pwm波的周期(單位:納秒);

duty_cycle:在normal模式下,表示一個周期內高電平持續的時間(單位:納秒),所以duty_cycle <= period;在reversed模式下,表示一個周期中低電平持續的時間(單位:納秒);

enable:向其中寫入1表示啟動pwm,寫入0,表示關閉pwm;

更多詳情請參考內核文檔:Documentation/pwm.txt

下麵分享一個判斷tiny4412底板上的蜂鳴器是有源的還是無源的方法:

首先先關閉pwm,即向enable中寫入0;然後向polarity中寫入inversed,如果蜂鳴器開始響,那麼就是有源蜂鳴器,否則就是無源蜂鳴器。原理是:關閉了pwm後,在normal下,TOUT_0輸出低電平,在inversed模式下,TOUT_0輸出高電平。(從tiny4412的原理圖中看到,pwm輸出高電平時,三極體導通,蜂鳴器開始響,有源蜂鳴器的特點是,只要給它一個高電平,就響,而無源的特點是,必須給脈衝才響)

下麵實現一個頻率為1Hz, 占空比為1:9的例子:

[root@tiny4412 ]# cd /sys/class/pwm/pwmchip0/
[root@tiny4412 pwmchip0]# ls
device     export     npwm       power      subsystem  uevent     unexport
[root@tiny4412 pwmchip0]# echo 0 > export 
[root@tiny4412 pwmchip0]# ls
device     npwm       pwm0       uevent
export     power      subsystem  unexport
[root@tiny4412 pwmchip0]# cd pwm0/
[root@tiny4412 pwm0]# ls
duty_cycle  enable      period      polarity    power       uevent
[root@tiny4412 pwm0]# echo normal > polarity 
[root@tiny4412 pwm0]# echo 1000000000 > period 
[root@tiny4412 pwm0]# echo 100000000 > duty_cycle 
[root@tiny4412 pwm0]# echo 1  > enable 
[root@tiny4412 pwm0]#

這裡:1秒 = 1 000 000 000 納秒

向unexport中寫入0,pwm0目錄會被自動刪除。

[root@tiny4412 pwmchip0]# ls
device     npwm       pwm0       uevent
export     power      subsystem  unexport
[root@tiny4412 pwmchip0]# echo 0 > unexport 
[root@tiny4412 pwmchip0]# ls
device     export     npwm       power      subsystem  uevent     unexport

 

未完待續。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 使用<link>標簽引入css文件簡單代碼實例:本章節介紹一下如何利用<link>標簽引入外部css文件。雖然這個非常的簡單,但是很多初學者比較容易忘記它的基本使用格式。下麵就演示一下如何使用此標簽引入外部樣式表:代碼如下: <link rel="stylesheet" type="text/css
  • 獲取table表格指定列的所有單元格的內容:本章節介紹一下如何獲取表格指定列的所有單元格的內容,這可能在一些應用或者說擴展應用中會需要。代碼實例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author"
  • 在SQL SERVER 2005/2008中,如果將有序的記錄插入臨時表,則從臨時表查詢出來的記錄是有序的(不依賴ORDER BY也是有序狀態),但是從SQL SERVER 2012開始,即使插入的記錄集有序,查詢出來的結果變成無序了。需要依賴ORDER BY來或得到一個有序結果。例如下麵例子: S...
  • OLEDB等待事件介紹 OLEDB等待類型是SQL SERVER 資料庫中最常見的幾種等待類型之一。它意味著某個會話(SPID)通過SQL Server Native Client OLEDB Provider發生了調用請求並等待資料庫返回所需的數據。它出現在遠程系統(remote system )...
  • runstats工具是《 oracle database 9i/10g/11g編程藝術 深入資料庫體繫結構》作者寫的一個統計性能工具,能對做同一件事的兩個方法進行比較,得到孰優孰劣的結果。 (看到runstats想到了db2 里有runstats命令收集統計信息) runststs工具主要測量三個要
  • 前言 - 會寫這篇除了是要記錄一下使用的過程之外,也是發現到網路上找來的教學幾乎都是跟其它環境做結合 比較沒有單純利用command進行的流程。也沒有整體觀念的介紹,所以將我所理解的整理分享給大家。 因我對於Git版本控制比較熟悉,這當中會借用一點Git的觀念來做解釋 :) liquibase -
  • 雖然西西不建議大家去用命令刪除資料庫表中的東西,但是這些刪除命令總有用的著的地方。 說到刪除表數據的關鍵字,大家記得最多的可能就是delete了 然而我們做資料庫開發,讀取資料庫數據.對另外的兩兄弟用得就比較少了 現在來介紹另外兩個兄弟,都是刪除表數據的,其實也是很容易理解的 老大------dro
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...