PWM驱动框架

目录

1、PWM设备驱动框架

2、pwmchipX

3、pwmX

4、测试命令


1、PWM设备驱动框架

通过PWM框架注册的PWM设备,可通过sysfs 方式进行操控。sysfs文件路径为/sys/class/pwm。

2、pwmchipX

/sys/class/pwm/pwmchipX表示PWM控制器。

npwmPWM 控制器下共有几路 PWM 输出
export

在使用 PWM 之前,需要将其导出

注:PWM编号从 0 开始

unexport将导出的 PWM 删除。

3、pwmX

通过 export 导出之后,会生成 pwmX目录。

enable

用于使能或禁止PWM输出。

1) '0':禁止 PWM 输出

2) '1':使能 PWM 输出

duty_cycle用于配置 PWM 的占空比,以 ns(纳秒)为单位
period  用于配置 PWM 周期,以 ns(纳秒)为单位
polarity

用于配置极性。

1) ‘normal':普通;
2) 'inversed':反转;

4、测试命令

echo 1 > enable //使能 PWM 输出
echo normal > polarity //默认极性
echo 10000 > period //PWM 周期设置为 10us(10 * 1000ns)
echo 5000 > duty_cycle //PWM 占空比设置为 5us


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux内核中提供了PWM框架,可以通过该框架来实现PWM输入驱动PWM输入驱动是通过读取PWM信号的占空比和周期来实现的。下面是一个简单的PWM输入驱动程序的实现步骤: 1. 定义PWM输入设备结构体,包含以下成员: ``` struct pwm_input_device { struct pwm_device *pwm; struct work_struct work; u64 period; u64 duty_cycle; }; ``` 其中,pwm_device结构体用于表示PWM设备,work_struct用于异步处理PWM信号,period和duty_cycle表示PWM信号的周期和占空比。 2. 实现PWM输入设备的probe函数,在该函数中初始化PWM设备并注册PWM输入设备: ``` static int pwm_input_probe(struct platform_device *pdev) { struct pwm_input_device *dev; struct pwm_device *pwm; int ret; dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL); if (!dev) return -ENOMEM; pwm = devm_pwm_get(&pdev->dev, NULL); if (IS_ERR(pwm)) return PTR_ERR(pwm); dev->pwm = pwm; ret = pwm_enable(pwm); if (ret < 0) return ret; ret = pwm_input_register(dev, &pdev->dev, "pwm_input", pwm_input_handler); if (ret < 0) pwm_disable(pwm); return ret; } ``` 3. 实现PWM输入设备的中断处理函数,在该函数中读取PWM信号的占空比和周期,并在异步处理函数中进行处理: ``` static irqreturn_t pwm_input_isr(int irq, void *data) { struct pwm_input_device *dev = data; struct pwm_device *pwm = dev->pwm; u64 period, duty_cycle; period = pwm_get_period(pwm); duty_cycle = pwm_get_duty_cycle(pwm); schedule_work(&dev->work); return IRQ_HANDLED; } ``` 4. 实现PWM输入设备的异步处理函数,在该函数中进行PWM信号的处理: ``` static void pwm_input_work(struct work_struct *work) { struct pwm_input_device *dev = container_of(work, struct pwm_input_device, work); /* 处理PWM信号 */ /* 更新周期和占空比 */ dev->period = pwm_get_period(dev->pwm); dev->duty_cycle = pwm_get_duty_cycle(dev->pwm); } ``` 通过上述步骤,就可以实现一个简单的PWM输入驱动程序。当PWM信号触发中断时,中断处理函数会读取PWM信号的占空比和周期,并调度异步处理函数进行处理。异步处理函数会更新周期和占空比,并进行PWM信号的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值