完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
RK3288 PWM的使用介绍和实例
一、rk3288 一共有4个pwm口,基地址如下。 pwm0: pwm@ff680000 { compatible = "rockchip,rk3288-pwm"; reg = <0x0 0xff680000 0x0 0x10>; #pwm-cells = <3>; pinctrl-names = "default"; pinctrl-0 = <&pwm0_pin>; clocks = <&cru PCLK_PWM>; clock-names = "pwm"; status = "disabled"; }; pwm1: pwm@ff680010 { compatible = "rockchip,rk3288-pwm"; reg = <0x0 0xff680010 0x0 0x10>; #pwm-cells = <3>; pinctrl-names = "active"; pinctrl-0 = <&pwm1_pin>; clocks = <&cru PCLK_PWM>; clock-names = "pwm"; status = "disabled"; }; pwm2: pwm@ff680020 { compatible = "rockchip,rk3288-pwm"; reg = <0x0 0xff680020 0x0 0x10>; #pwm-cells = <3>; pinctrl-names = "active"; pinctrl-0 = <&pwm2_pin>; clocks = <&cru PCLK_PWM>; clock-names = "pwm"; status = "disabled"; }; pwm3: pwm@ff680030 { compatible = "rockchip,rk3288-pwm"; reg = <0x0 0xff680030 0x0 0x10>; #pwm-cells = <3>; pinctrl-names = "active"; pinctrl-0 = <&pwm3_pin>; clocks = <&cru PCLK_PWM>; clock-names = "pwm"; status = "disabled"; }; 二、pwm驱动在kerneldriverspwmpwm-rockchip.c 三、查看当前PWM设备 cat /sys/kernel/debug/pwm ,目前我的机子有三个pwm正在打开。 xxx:/ # cat /sys/kernel/debug/pwm platform/ff680030.pwm, 1 PWM device pwm-0 ((null) ): period: 0 ns duty: 0 ns polarity: inverse platform/ff680020.pwm, 1 PWM device pwm-0 ((null) ): period: 0 ns duty: 0 ns polarity: inverse platform/ff680010.pwm, 1 PWM device pwm-0 (backlight ): requested enabled period: 1000000 ns duty: 723313 ns polarity: normal xxx:/ # 四、linux 驱动 控制 PWM 步骤。 1、在要使用 PWM 控制的设备驱动文件中包含以下头文件: #include 2、申请 PWM 使用 struct pwm_device *pwm_request(int pwm_id, const char *label); 函数申请 PWM。例如: struct pwm_device * pwm0 = NULL;pwm0 = pwm_request(0, “backlight-pwm”); 参数 pwm_id 表示要申请 PWM 的通道,label 为该 PWM 所取的标签。 3、配置 PWM 使用 int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns); 配置 PWM 的占空比,例如: pwm_config(pwm0, 500000, 1000000); 参数 pwm 为前一步骤申请的 pwm_device。duty_ns 为占空比激活的时长,单位为 ns。period_ns 为 PWM 周期,单位为 ns。 4、使能PWM函数 int pwm_enable(struct pwm_device *pwm); 用于使能 PWM,例如: pwm_enable(pwm0); 参数 pwm 为要使能的 pwm_device。 5、控制 PWM 输出主要使用以下接口函数: struct pwm_device *pwm_request(int pwm_id, const char *label); 功能:用于申请 pwm 参数: pwm_id:要申请的 pwm 通道。 label: 为该申请的 pwm 所取的标签。 void pwm_free(struct pwm_device *pwm); 功能:用于释放所申请的 pwm 参数: pwm:所要释放的 pwm 结构体 int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns); 功能:用于配置 pwm 的占空比 参数: pwm: 所要配置的 pwm duty_ns:pwm 的占空比激活的时长,单位 ns period_ns:pwm 占空比周期,单位 ns int pwm_enable(struct pwm_device *pwm); 功能:使能 pwm 参数: pwm:要使能的 pwm void pwm_disable(struct pwm_device *pwm); 功能:禁止 pwm 参数: pwm:要禁止的 pwm 五、实际验证C代码 六、adb上打开pwm1和pwm2,会看到对应的gpio会被pwm占用。 七、最后测量对应的pin是否有波形了,很好的方波,周期和频率都对应,测试ok。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
基于米尔瑞芯微RK3576核心板/开发板的人脸疲劳检测应用方案
569 浏览 0 评论
839 浏览 1 评论
737 浏览 1 评论
1957 浏览 1 评论
3204 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 10:12 , Processed in 0.590615 second(s), Total 40, Slave 34 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号