0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Firefly-RK3288PWM输出介绍

firefly 来源:firefly 作者:firefly 2019-11-25 10:31 次阅读
PWM 使用
前言

Firefly-RK3288 开发板上有 4 路 PWM 输出,分别为 PWM0 ~ PWM3, 本章主要描述如何配置 PWM。 Firefly-RK3288 的 PWM 驱动为:

kernel/drivers/pwm/pwm-rockchip.c
数据结构
pwm_device结构体
struct pwm_device { const char *label; unsigned long flags; unsigned int hwpwm; unsigned int pwm;//pwm通道 struct pwm_chip *chip; void *chip_data; unsigned int period; /* in nanoseconds */ };
pwm_chip结构体

该结构体是抽象的 PWM 控制器

struct pwm_chip { struct device *dev; //提供 PWM 的设备 struct list_head list; //内部使用的节点列表 const struct pwm_ops *ops; // PWM 控制器的回调函数 int base; //该设备所控制的第一个 PWM 的号码 unsigned int npwm; //该设备所控制的 PWM struct pwm_device *pwms; struct pwm_device * (*of_xlate)(struct pwm_chip *pc,const struct of_phandle_args *args); unsigned int of_pwm_n_cells; bool can_sleep; };
配置步骤

配置 PWM 主要有以下三大步骤:配置 PWM DTS 节点、配置 PWM 内核驱动、控制 PWM 设备。

配置 PWM DTS节点

在 kernel/arch/arm/boot/dts/rk3288.dtsi 定义了以下 PWM 节点,如下所示:

pwm1: pwm@ff680010 { compatible = "rockchip,rk-pwm"; reg = ; #pwm-cells = ; pinctrl-names = "default"; pinctrl-0 = ; clocks = ; clock-names = "pclk_pwm"; status = "okay"; };

注:ff680010为 PWM1 寄存器的地址。 要使用 pwm1, 只需在 kernel/arch/arm/boot/dts/firefly-rk3288.dts 加入:

&pwm0 { status = "okay"; };
配置 PWM 内核驱动

PWM 驱动位于文件 kernel/drivers/pwm/pwm-rockchip.c。 修改该文件的如下代码:

static const struct of_device_id rk_pwm_of_match[] = { { .compatible = "rockchip,pwm", .data = &rk_pwm_data_v1,}, { .compatible = "rockchip,rk-pwm", .data = &rk_pwm_data_v2,}, { .compatible = "rockchip,vop-pwm", .data = &rk_pwm_data_v3,}, { } };

把之前步骤中的 compatible = “rockchip,rk-pwm” 添加到如上代码中。

控制 PWM 设备

用户可在其它驱动文件中使用以上步骤生成的 PWM 节点。具体方法如下:

1、在要使用 PWM 控制的设备驱动文件中包含以下头文件:

#include

该头文件主要包含 PWM 的函数接口。

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。

控制 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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10992

    浏览量

    206744
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6064

    浏览量

    34618
  • Firefly
    +关注

    关注

    2

    文章

    534

    浏览量

    6757
收藏 人收藏

    评论

    相关推荐

    firefly RK3399上没有pwm输出端口是哪个?

    问题描述及复现步骤:firefly RK3399 上没有pwm输出端口是哪个?说是有四路,但没有标识,如何确定pwm
    发表于 03-29 13:43

    Firefly-RK3288用户指南

    电脑。Firefly-RK3288 除了可以当作电视盒子,微型电脑使用,还适用于多种的领域。Firefly-RK3288 板级支持红外、蓝牙 4.0、双频 WIFI、4K*2K 高清输出,及丰富的外围扩展接口,可以满足
    发表于 10-10 07:35

    firefly双屏互动简介

    基于Firefly-RK3288高性能开源平台,可以做双屏互动功能,Firefly-RK3288同时接MIPI
    的头像 发表于 11-01 15:31 1295次阅读
    <b class='flag-5'>firefly</b>双屏互动简介

    Firefly-RK3288--教程

    Firefly-RK3288 的标准套装包含以下配件:   Firefly-RK3288 主板一块   WiFi 天线   亚克力
    的头像 发表于 11-11 16:04 4063次阅读
    <b class='flag-5'>Firefly-RK3288</b>--教程

    Firefly-RK3399--PWM介绍

    Firefly-RK3399 开发板上有 4 路 PWM 输出,分别为 PWM0 ~ PWM3,4路 P
    的头像 发表于 11-22 10:08 5121次阅读
    <b class='flag-5'>Firefly-RK3399--PWM</b><b class='flag-5'>介绍</b>

    Firefly-RK3288--外壳

    外壳 Firefly-RK3288 CAD图
    的头像 发表于 11-25 10:14 950次阅读
    <b class='flag-5'>Firefly-RK3288</b>--外壳

    Firefly-RK3288开发板介绍

    Firefly-RK3288 开发板内置 5 路 UART,分别为 uart0,uart1,uart2,uart3,uart4。 uart0 为 uart_bt,用于蓝牙传输。
    的头像 发表于 11-25 10:27 2610次阅读
    <b class='flag-5'>Firefly-RK3288</b>开发板<b class='flag-5'>介绍</b>

    Firefly-RK3288 LED介绍

    Firefly-RK3288 开发板上有 2 个 LED 灯
    的头像 发表于 11-25 10:39 2237次阅读
    <b class='flag-5'>Firefly-RK3288</b> LED<b class='flag-5'>介绍</b>

    Firefly-RK3288--IR主板介绍

    Firefly-RK3288/Firefly-RK3288-Reload开发板上使用红外收发传感器 IR (在 USB OTG 接口和音频接口之间)实现遥控功能。
    的头像 发表于 11-26 17:10 2491次阅读
    <b class='flag-5'>Firefly-RK3288</b>--IR主板<b class='flag-5'>介绍</b>

    Firefly-RK3288--I2C主板的使用介绍

    Firefly-RK3288 开发板上有 6 个片上 I2C 控制器。本文主要描述如何在该开发板上配置 I2C。
    的头像 发表于 11-26 17:00 2427次阅读
    <b class='flag-5'>Firefly-RK3288</b>--I2C主板的使用<b class='flag-5'>介绍</b>

    Firefly-RK3288--DVP开发板介绍

    Firefly-RK3288-Reload 开发板带有一个 DVP 摄像头接口。 本文以 OV5640 摄像头为例,讲解在该开发板上的配置过程。
    的头像 发表于 11-26 17:19 4586次阅读
    <b class='flag-5'>Firefly-RK3288</b>--DVP开发板<b class='flag-5'>介绍</b>

    Firefly-RK3288ADB主板介绍

    Firefly-RK3288/Firefly-RK3288-Reload 默认是打开USB调试选项。如果需要在关闭或打开USB调试选项,可以 在设置-关于设备-版本号(点击7次后),然后返回到上一层,可以看到
    的头像 发表于 10-28 19:22 1831次阅读
    <b class='flag-5'>Firefly-RK3288</b>ADB主板<b class='flag-5'>介绍</b>

    Firefly-RK3288主板启动教程

    RK3288 有灵活的启动方式。一般情况下,除非硬件损坏,Firefly-RK3288 开发板是不会变砖的。
    的头像 发表于 11-27 09:14 5540次阅读
    <b class='flag-5'>Firefly-RK3288</b>主板启动教程

    Firefly-RK3128主板PWM输出介绍

    Firefly-RK3128 开发板上有 4 路 PWM 输出,分别为 PWM0 ~ PWM3
    的头像 发表于 11-28 16:56 1992次阅读
    <b class='flag-5'>Firefly-RK</b>3128主板<b class='flag-5'>PWM</b><b class='flag-5'>输出</b><b class='flag-5'>介绍</b>

    Firefly-RK3288产品规格书

    电子发烧友网站提供《Firefly-RK3288产品规格书.pdf》资料免费下载
    发表于 09-15 16:12 1次下载
    <b class='flag-5'>Firefly-RK3288</b>产品规格书