概要
本文基于linux的pwm驱动框架,实现方式,驱动添加方式和调试来介绍.
pwm驱动框架
pwm的主要C源码在:
drivers/pwm/core.c //pwm框架抽象层代码
drivers/pwm/sysfs.c //sysfs调试代码
drivers/pwm/pwm-xxx.c //芯片厂家的硬件层实现代码
include/linux/pwm.h //头文件
ops& api
可见头文件详解,说的比较详细。
如何添加芯片的pwm驱动
1)在pwm目录下Kconfig添加
2)Makefile中添加
3)menuconfig选中
4)接下来就是编辑自己的pwm代码了
主要就是根据自己芯片对几个函数进行实现。
可根据需求对以下函数进行选择实现。
一般芯片的pwm实现方式存在不同,比如高通用的pmic来实现,有点厂家直接就是pwm控制器,我们acme主要用的是timer来产生。
设备树添加
上层测试
用sysfs接口对PWM驱动进行功能调试,主要调试命令示例如下。
(1)查看PWM控制器节点
ls /sys/class/pwm/pwmchip0/
(2) 打开指定PWM通道信号
cd /sys/class/pwm/pwmchip0/
echo 0 > export
(3) 设置PWM周期
echo 50000> pwm0/period //注意,这里设置的是周期值,单位为 ns,比如 20KHz 频率的周期就是 50000ns
(4)设置PWM信号占空比
echo 25000> pwm0/duty_cycle //这里不能直接设置占空比,而是设置的一个周期的 ON 时间,也就是高电平时间,比如 20KHz 频率下 50%占空比的 ON 时间就是 25000
(5)使能某个PWM通道信号
echo 1 > pwm0/enable
(6)禁止某个PWM通道信号
echo 0 > pwm0/enable