Firefly-RK3399 開發(fā)板上有 4 路 PWM 輸出,分別為 PWM0 ~ PWM3,4路 PWM 分別使用在eDP背光、MIPI背光、VDDLOG供電、紅外IR。 本章主要描述如何配置 PWM。
RK3399的 PWM 驅(qū)動為: kernel/drivers/pwm/pwm-rockchip.c
配置 PWM 主要有以下三大步驟:配置 PWM DTS 節(jié)點、配置 PWM 內(nèi)核驅(qū)動、控制 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通道數(shù)。
-
min_period:周期時長最小值。
-
max_period:周期時長最大值。
-
duty_ns:pwm 的占空比激活的時長,單位 ns。
用戶可在其它驅(qū)動文件中使用以上步驟生成的 PWM 節(jié)點。具體方法如下:
(1)、在要使用 PWM 控制的設備驅(qū)動文件中包含以下頭文件:
#include
該頭文件主要包含 PWM 的函數(shù)接口。
(2)、申請 PWM使用
struct pwm_device *pwm_request(int pwm_id, const char *label);
函數(shù)申請 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 函數(shù)
int pwm_enable(struct pwm_device *pwm);
用于使能 PWM,例如:
pwm_enable(pwm0);
(5)控制 PWM 輸出主要使用以下接口函數(shù):
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
通過內(nèi)核豐富的debug接口查看pwm注冊狀態(tài),adb shell或者串口進入android終端 cat /sys/kernel/debug/pwm —注冊是否成功,成功則返回接口名和寄存器地址
-
dts配置文件是否打開對應的pwm。
-
pwm所在的io口是否被其他資源占用,可以根據(jù)報錯的返回值去查看原因。
-
嵌入式主板
+關注
關注
7文章
6084瀏覽量
35154 -
安卓
+關注
關注
5文章
2116瀏覽量
56960 -
可制造性設計
+關注
關注
10文章
2065瀏覽量
15442 -
Firefly
+關注
關注
2文章
538瀏覽量
6963 -
華秋DFM
+關注
關注
20文章
3492瀏覽量
4345
發(fā)布評論請先 登錄
相關推薦
評論