TI中文支持网
TI专业的中文技术问题搜集分享网站

萌新求助,AM335x 怎样输出PWM波形,驱动模块怎样写。

我想输出一路PWM信号并且输出频率和占空比可调。在参考了一些代码后这个是我自己写的驱动。求大佬帮忙看下

static int pwm_beeper_probe(struct platform_device *pdev)
{
unsigned long pwm_id =(unsigned long)dev_get_platdata(&pdev->dev);
struct my_pwm *mypwm;
int ret ;
dev_t dev;
dev = MKDEV(PWM_MAJOR, PWM_MINOR);
ret = register_chrdev_region(dev, 1, PWM_NAME);
if(ret)
goto reg_err;
mypwm = kzalloc(sizeof(struct my_pwm), GFP_KERNEL);
if(!mypwm)
{
ret = -1;
goto err_free;
}
mypwm->device = pwm_get(&pdev->dev,NULL);
if(IS_ERR(mypwm->device))
{
dev_dbg(&pdev->dev, "unable to request pwm, tring legacy API\n");
mypwm->device = pwm_request(pwm_id, "my-timer6");
}
if(IS_ERR(mypwm->device))
{
int error = PTR_ERR(mypwm->device);
dev_err(&pdev->dev, "Failed to request pwm device : %d \n",error);
goto err_free;
}

cdev_init(&mypwm->cdev,&pwm_ops);
mypwm->cdev.owner = THIS_MODULE;
ret = cdev_add(&mypwm->cdev, dev, 1);
mypwm->sy_class = class_create(THIS_MODULE,PWM_NAME);
device_create(mypwm->sy_class, NULL, MKDEV(PWM_MAJOR, PWM_MINOR),NULL, PWM_NAME);
if(ret)
goto err_free;
platform_set_drvdata(pdev, mypwm);
return ret;

err_free:
kfree(mypwm);
reg_err:
unregister_chrdev_region(dev,1);
return -1;
}
static int pwm_beeper_remove(struct platform_device *pdev)
{
dev_t dev;
struct my_pwm *pwm = platform_get_drvdata(pdev);
dev = MKDEV(PWM_MAJOR, PWM_MINOR);

cdev_del(&mypwm->cdev);
device_destroy(mypwm->sy_class,MKDEV(PWM_MAJOR,PWM_MINOR));
class_destroy(mypwm->sy_class);
pwm_put(mypwm->device);
kfree(mypwm);
unregister_chrdev_region(dev, 1);
return 0;
}

static const struct of_device_id pwm_beeper_match[] = {
{ .compatible = "my-pwm", },
{ },
};

设备树的配置如下

my_timer {
compatible = "my-pwm";
pwms = <&ehrpwm1 0 5000000 0>;
pwm-names = "my-timer6";
};

myehrpwm1_pins_default: myehrpwm1_pins_default {
pinctrl-single,pins = <
0x150 ( PIN_OUTPUT | MUX_MODE3 ) /* (A18) spi0_sclk.ehrpwm0A */
0x154 ( PIN_OUTPUT | MUX_MODE3 ) /* (B18) spi0_d0.ehrpwm0B */
>;

&ehrpwm1 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 =<&myehrpwm1_pins_default>;
};

 

Shine:

请运行一下代码看具体有什么问题。

赞(0)
未经允许不得转载:TI中文支持网 » 萌新求助,AM335x 怎样输出PWM波形,驱动模块怎样写。
分享到: 更多 (0)