Face-RK3399開發板上引出有 2 路 PWM 輸出,分別為:
-
PWM1 LCD_BL_PWM
-
PWM2 VDDLOG供電
本章主要描述如何配置 PWM。
RK3399的 PWM 驅動為: kernel/drivers/pwm/pwm-rockchip.c
配置 PWM 主要有以下三大步驟:配置 PWM DTS 節點、配置 PWM 內核驅動、控制 PWM 設備。
在 DTS 源文件kernel/arch/arm64/boot/dts/rockchip/rk3399-firefly-demo.dtsi 添加 PWM DTS 配置,如下所示:
pwm_demo: pwm_demo { status = "okay"; compatible = "firefly,rk3399-pwm"; pwm_id = <1>; min_period = <0>; max_period = <10000>; duty_ns = <5000>; };
-
pwm_id:需要申請的pwm通道數。
-
min_period:周期時長最小值。
-
max_period:周期時長最大值。
-
duty_ns:pwm 的占空比激活的時長,單位 ns。
用戶可在其它驅動文件中使用以上步驟生成的 PWM 節點。具體方法如下:
(1)、在要使用 PWM 控制的設備驅動文件中包含以下頭文件:
#include
該頭文件主要包含 PWM 的函數接口。
(2)、申請 PWM使用
struct pwm_device *pwm_request(int pwm_id, const char *label);
函數申請 PWM。 例如:
struct pwm_device * pwm1 = NULL;pwm0 = pwm_request(1, “firefly-pwm”);
(3)、配置 PWM使用
int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns);
配置 PWM 的占空比, 例如:
pwm_config(pwm0, 500000, 1000000);
(4)、使能PWM 函數
int pwm_enable(struct pwm_device *pwm);
用于使能 PWM,例如:
pwm_enable(pwm0);
(5)控制 PWM 輸出主要使用以下接口函數:
struct pwm_device *pwm_request(int pwm_id, const char *label);
-
功能:用于申請 pwm
void pwm_free(struct pwm_device *pwm);
-
功能:用于釋放所申請的 pwm
int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns);
-
功能:用于配置 pwm 的占空比
int pwm_enable(struct pwm_device *pwm);
-
功能:使能 pwm
void pwm_disable(struct pwm_device *pwm);
-
功能:禁止 pwm
通過內核豐富的debug接口查看pwm注冊狀態,adb shell或者串口進入android終端 cat /sys/kernel/debug/pwm —注冊是否成功,成功則返回接口名和寄存器地址
-
dts配置文件是否打開對應的pwm。
-
pwm所在的io口是否被其他資源占用,可以根據報錯的返回值去查看原因。
-
嵌入式主板
+關注
關注
7文章
6085瀏覽量
35331 -
安卓
+關注
關注
5文章
2130瀏覽量
57192 -
Firefly
+關注
關注
2文章
538瀏覽量
7043
發布評論請先 登錄
相關推薦
評論