您的位置:首页 > 移动开发 > Android开发

android 用gpio作为pwm输出控制led背光

2017-06-01 22:42 591 查看
转载时请注明出处和作者文章出处:http://blog.csdn.net/lbmygf 

1、在板级初始化文件mx53_smd_c中将gpio1-1配置为pwm模式:
 
        /* GPIO1 FOR pwm */

     MX53_PAD_GPIO_1__PWM2_PWMO,
 
2、kernel_imx/arch/arm/plat-mxc/pwm.c 在pwm驱动中看到
 
    EXPORT_SYMBOL(pwm_request);
    EXPORT_SYMBOL(pwm_enable);
    EXPORT_SYMBOL(pwm_config);
 
    它把那些函数都导出,是全局的了,所以呢,在背光的驱动中是可以直接用的。
 
3、下面看看背光的驱动:kernel_imx/drivers/video/backlight/da9052_bl.c
    
    在这 da9052_bl.c 中他原来的背光调节,也可以留着,自己处理,关键看你硬件怎么搭。其中的brightness这个参数你是要用到
 
的,根据这个值来调节你pwm的占空比。
 
    在da9052_bl.c的靠前部分定义一个全局pwm_device指针:
 
     struct pwm_device *pwm;    
 
    在 da9052_backlight_probe probe函数中添加如下信息:    
 
     int ret;

     pwm = pwm_request(1, "backlight"); 
     if (IS_ERR(pwm)) {

      dev_err(&pdev->dev, "unable to request PWM for backlight\n");

      ret = PTR_ERR(pwm);

      goto err_bl;

     } else

      dev_dbg(&pdev->dev, "got pwm for backlight\n");
 
    pwm_request 第一个参数是 pwm 设备 的ID号,这个你的去确认你所用的pwm是那个
 
了,我这系统有2个,我用的是pwm2,pwm_request()调用时,会遍历pwm设备,去查找id为
 
1的那个。
 
    在kernel/arch/arm/mach-mx5/devices.c 中有mxc_pwm2_device 定义,id = 1 
 
        struct platform_device mxc_pwm2_device = {

         .name = "mxc_pwm",

         .id = 1,
         .num_resources = ARRAY_SIZE(pwm2_resources),

         .resource = pwm2_resources,

        };
 
4、最后你就找个带 brightness 参数的函数,去在里面做你自己的控制了,我的控制如下:
 
     unsigned int period = 50000;//78770;

     unsigned int max = 255;
 
     if (brightness == 0)
    {

      pwm_config(pwm, 0, period);

      pwm_disable(pwm);

     } else
    {

      pwm_config(pwm, brightness * period / max, period);

      pwm_enable(pwm);

     }

基本上到这就差不多了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: