武安市精品网站开发,专业做汽车网站优化排名,事业单位网站建设算固定资产吗,国内十大动画制作公司目录 前⾔
驱动文件
DTS 节点配置
PWM 流程
PWM 使⽤
常⻅问题
PWM 在 U-Boot 与 kernel 之间的衔接问题
PWM Regulator 时 PWM pin 脚上下拉配置问题 前⾔
脉宽调制#xff08; PWM #xff0c; Pulse Width Modulation #xff09;功能在嵌⼊式系统中是⾮常常⻅的…目录 前⾔
驱动文件
DTS 节点配置
PWM 流程
PWM 使⽤
常⻅问题
PWM 在 U-Boot 与 kernel 之间的衔接问题
PWM Regulator 时 PWM pin 脚上下拉配置问题 前⾔
脉宽调制 PWM Pulse Width Modulation 功能在嵌⼊式系统中是⾮常常⻅的它是利⽤微处理器的数 字输出来对模拟电路进⾏控制的⼀种⾮常有效的技术⼴泛应⽤在从测量、通信到功率控制与变换的许 多领域中。 Rockchip PWM ⽀持三种模式 : Continuous mode 、 One-shot mode 和 Capture mode, 4 通道 built-in
驱动文件
驱动⽂件所在位置 drivers/pwm/pwm-rockchip.c
3.10 和 4.4 及以上版本内核下驱动⽂件名字是同⼀个 pwm-rockchip.c 可以⽀持 Continuous mode 和 One shot mode 但是⾥⾯的代码有些差别。 4.4 及以上内核版本将 pwm_config() pwm_enable() 和 pwm_disable() 包装在 pwm_apply_state() 函数⾥⾯这样做的好处是可以⼀次改变⼏个 PWM 参数 3.10 内核的 PWM 驱动还是原来的接口。 DTS 节点配置
内核 3.10 版本和 4.4 及以上版本的 DTS 节点略有不
bl: backlight {pwms pwm 0 25000 PWM_POLARITY_INVERTED;pwm-names backlight;};
同的地⽅在配置的参数个数上内核 3.10 版本配 置的参数数⽬为 2 内核 4.4 及以上版本配置的参数数⽬为 2 或者 3 参数数⽬与 PWM 节点中的 “pwm cells” 对应如果 “pwm-cells” 配置是 3 则需要配置可选的极性如果是 2 就不需要配置极性。 DTS 配置参考⽂档 Documentation/devicetree/bindings/pwm/pwm.txt 主要⼏个参数说明下 : 参数 1 表⽰ index (per-chip index of the PWM to request) ⼀般是 0 因为我们 Rockchip PWM 每个 chip 只有⼀个。 参数 2 表⽰ PWM 输出波形的时间周期单位是 ns 例如下⾯配置的 25000 就是表⽰想要得到的 PWM 输出周期是 40K 赫兹。 参数 3 表⽰极性为可选参数下⾯例⼦中的配置为负极性。 PWM 流程
PWM 驱动流程在不同内核版本上⼤致是⼀样的 PWM 使⽤
对于 PWM 的 kernel 和 user space 使⽤说明在 Documentation/pwm.txt 有说明下⾯重点提下 user space 部 分。就像 pwm.txt ⽂档⾥⾯说的 PWM 提供了⽤⼾层的接口在 /sys/class/pwm/ 节点下⾯ PWM 驱动 加载成功后会在 /sys/class/pwm/ ⽬录下产⽣ pwmchip0 ⽬录向 export ⽂件写⼊ 0 就是打开 pwm 定 时器 0 会产⽣⼀个 pwm0 ⽬录相反的往 unexport 写⼊ 0 就会关闭 pwm 定时器了同时 pwm0 ⽬录会 被删除 , 该⽬录下有以下⼏个⽂件
enable 写⼊ 1 使能 pwm 写⼊ 0 关闭 pwm
polarity 有 normal 或 inversed 两个参数选择表⽰输出引脚电平翻转
duty_cycle 在 normal 模式下表⽰⼀个周期内⾼电平持续的时间单位纳秒在 reversed 模 式下表⽰⼀个周期中低电平持续的时间单位纳秒 )
period 表⽰ pwm 波的周期 ( 单位纳秒 )
oneshot_count 表⽰ one-shot 模式的 pwm 波形个数数值不能超过 255
常⻅问题
PWM 在 U-Boot 与 kernel 之间的衔接问题
U-Boot 如果有⽤ PWM 调压功能到了 kernel 阶段此时 PWM 仍然是⼯作状态 需要根据当前 PWM 的硬件状态将 PWM clock count 调整与当前 PWM 状态⼀致。否则可能会出现 clock 架构发 现⽆⼈使⽤的 PWM clock 将其关闭后导致 PWM ⽆法⼯作出现类似 PWM 调压电压不够导致 的死机问题等。以上的补丁已经修正确保 PWM 驱动 : drivers/pwm/pwm-rockchip.c 更新到下⾯的 提交点 : 1. kernel-4.4: commit e6f2796ef5b660a70102c02d6c15f65ff8701d76 2. kernel-3.10: commit 5a3d9257d5e379391eb02457ccd70f28a8fb188b U-Boot 与 kernel PWM 所⽤的时钟源的频率不同也会导致中间出现切换 , 可能会导致 PWM 占空⽐ 发⽣变化出现类似 PWM 调压电压不够导致的死机问题等所以要保持 U-Boot 与 kernel 的时钟 源或时钟源的频率⼀致。确保 U-Boot 的 GPLL 频率与 kernel 保持⼀致因为 PWM 的时钟现在都 是挂在 GPLL 下⾯ U-Boot 的 GPLL 频率通过 U-Boot 的开机打印 log 可以看到 kernel 的频率通过 查看 clock tree, cat /sys/kernel/debug/clock/clock_tree | grep gpll 。 U-Boot 与 kernel 所配置的极性和周期不⼀致也会导致中间出现切换可能会导致 PWM 占空⽐发 ⽣变化出现类似 PWM 调压电压不够导致的死机问题等所以要保持 U-Boot 与 kernel 的极性和 周期⼀致。
PWM Regulator 时 PWM pin 脚上下拉配置问题
由于在做 reboot 的时候很多情况是不复位 GRF ⾥⾯的寄存器而 PWM 控制器会发⽣复位这就会在 reboot 起来后改变 PWM Regulator 的默认电压所以要在 kernel 中配置 PWM pin 脚上下拉与默认的上下 拉⼀致不能配置为 none 。该问题只针对 PWM 作为调压时才需要修改作为其他功能可以不需要关 注。 通过硬件原理图确认该 PWM pin 的默认上下拉。例如 RK3399 挖掘机板⼦ PWM2 作为调压功能 在原理图上找到 PWM2 pin 脚 : GPIO1_C3/PWM2_d 其中的 d 表⽰ down 为默认下拉如果 是 u 表⽰ up 默认上拉。