1. 程式人生 > >迅為iMX6UL開發板驅動-PWM測試方法

迅為iMX6UL開發板驅動-PWM測試方法

平臺:迅為iMX6UL開發板 
說明:PWM 配置和測試方法
測試中不需要新增額外驅動,是基於系統使用者態的 sysfs,可以使用命令來直接操作底層。








1 iMX6UL的PWM簡介
開啟 iMX6UL 的 datasheet,搜尋 PWM 關鍵詞,如下圖所示。
PWM5-PWM8 的地址如下。










PWM1-PWM4 的地址如下。






可以知道 iMX6UL 最多可以支援 8 路 PWM 輸出,也查出了實體地址。




2 iMX6UL的PWM0測試
所有的 ARM 板,預設情況下背光都是採用的 PWM 來調整的,那麼它的 PWM 時鐘地址
等引數肯定是配置好的,我們可以先使用背光對應 PWM 來做初步的測試。






2.1 硬體簡介
開啟 iMX6UL 的底板原理圖,如下圖所示,可以看到背光使用的 PWM 網路標號是
“BLT_PWM”。








如下圖所示,“BLT_PWM”和“GPIO_8”接到了一起。














在核心板原理圖中搜索“GPIO_8”,可以查到對應的這個網路標號對應的 PAD 為
“GPIO1_IO08”,如下圖所示。






2.2 裝置樹檔案分析和修改
在核心原始碼目錄下,開啟“arch/arm/boot/dts/imx6ul-14x14-evk.dts ”裝置樹檔案,
在其中搜索“GPIO1_IO08”,如下圖所示,管腳已經配置了。






接著搜尋“pinctrl_pwm1”,檢視在哪裡註冊了,如下圖所示,可以看到“pwm1”中
呼叫了。


接著搜尋“pwm1”,可以看到 pwm1 在背光碟機動中呼叫了,這裡仿照下圖,將其註釋
掉。






請注意:如果這裡註釋掉,螢幕將無法使用,如果需要使用螢幕,務必在測試完成之後恢
復原樣。
然後重新編譯裝置樹檔案,燒寫到開發板中。




2.3 pwm0測試
燒寫新的映象之後,在串列埠控制檯中依次輸入以下命令:
echo 0 > sys/class/pwm/pwmchip0/export
echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable
echo 1000000 > /sys/class/pwm/pwmchip0/pwm0/period
echo 500000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle
第一個命令為設定 pwm 輸出,跳出 pwm0 目錄下的節點;
第二個命令為使能 pwm0;
第三個命令為設定週期;
第三個命令為設定佔空比。
最後使用示波器測試下面 R129 電阻,可以看到 pwm 輸出。














3 PWM2分析和測試
PWM1 測試因為核心中肯定將時鐘和 IO 配置好了,我們只需要將背光設備註釋掉就可以
完成測試。本小節介紹 PWM2,更進一步介紹時鐘和 IO 配置以及 PWM2 註冊。
3.1 datasheet和原理圖分析
在 datasheet中,搜尋 PWM2,如下圖所示,可以看到“GPIO1_IO09”這個 pad 可以
被配置為 PWM2。










在核心板原理圖上,搜尋“GPIO1_IO09”,如下圖所示,可知網路標號為
“GPIO_9”。






在底板原理圖中搜索“GPIO_9”,如下圖所示,可以看出它通過 J38 的管腳 5 引出。








通過在原理圖中搜索可以發現這個管腳沒有接到其它裝置上。


3.3 時鐘配置
回到核心原始碼,很明顯在“arch/arm/boot/dts/imx6ul-14x14-evk.dts”裝置樹檔案中
沒有對 PWM1 進行時鐘配置,但是我們在前面測試 PWM1 的時候是能成功的,這表明它一
定在其它地方配置了。
開啟裝置樹檔案,檢視其包含的標頭檔案,如下圖所示,應該是和裝置樹同一目錄目錄下的
“imx6ul.dtsi”。








將其開啟,搜尋“pwm1”,如下圖所示。










如上圖所示,可以看到 pwm1 中引用了實體地址“0208_0000”,引用時鐘 PWM 時鐘
配置“IMX6UL_CLK_PWM1”。在最前面介紹 PWM 的時候,其實有提到實體地址,如下圖
所示,這裡和 datasheet上是一致(肯定一致,不然前面測試一定不行)。










接著看 pwm2,預設定義了,但是沒有將 PWM 時鐘開啟,如下圖所示,將兩個
“IMX6UL_CLK_DUMMY”修改為“IMX6UL_CLK_PWM2”。








至此 PWM2 的時鐘配置完成,其它 PWM 時鐘也可以依照這樣的方式,在這個檔案中打
開時鐘或者新增,新增的話,要注意其中的中斷號,PWM1 為 83,PWM2 為 84,依次類
推,仿照著來就成。


3.4 管腳配置和設備註冊
前一小節介紹了時鐘配置,回到“arch/arm/boot/dts/imx6ul-14x14-evk.dts”裝置樹
檔案,先搜尋“PWM2”和“pwm2”,這裡搜尋 PWM2 是因為有其它 pad 是可能被配置
為 pwm2,如果有配置配置,則巨集定義中一定有 PWM2。搜尋發現“PWM2”和“pwm2”
都沒有。
然後搜尋“GPIO1_IO09”,發現被定義為 SD1 的 reset,直接註釋掉,如下圖所示。








如下圖所示,在 pinctrl_pwm1 後面新增 pinctrl_pwm2,將“GPIO1_IO09”配置為
PWM2 模式。




上圖新增的程式碼如下:
pinctrl_pwm2: pwm2grp {
fsl,pins = <
MX6UL_PAD_GPIO1_IO09__PWM2_OUT 0x110b0
>;
};
接著新增 PWM2 設備註冊的程式碼,如下圖所示。








上圖新增的程式碼如下:
&pwm2 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pwm2>;
status = "okay";
};
至此,時鐘,管腳配置,設備註冊全部完成。
重新編譯燒寫到開發板。




3.5 測試
新的映象燒寫之後,依次使用以下命令:
echo 0 > sys/class/pwm/pwmchip1/export
echo 1 > /sys/class/pwm/pwmchip1/pwm0/enable
echo 1000000 > /sys/class/pwm/pwmchip1/pwm0/period
echo 500000 > /sys/class/pwm/pwmchip1/pwm0/duty_cycle
然後使用示波器測試 J38 的管腳 5,可以觀察到有脈衝波訊號。
剩餘的 6 路 PWM 可以按照本文件介紹的思路實現,使用者如果有需要,可以自行實現。


轉自:http://www.topeetboard.com