android 用gpio作为pwm输出控制led背光
16lz
2021-01-26
转载时请注明出处和作者文章出处: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);
}
基本上到这就差不多了。
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);
}
基本上到这就差不多了。
更多相关文章
- android系统学习笔记七
- cocos2d-js如何在android平台上使用js直接调用Java方法
- Android(安卓)编译重要参数 LOCAL_MODULE_TAGS
- android JNI_OnLoad()函数
- Android调用自带TTS文本转语音引擎实现离线语音合成
- 用NDK调用Android手机自带的openssl库函数
- Android(安卓)浅析 ContentProvider (四) 启动原理
- Android(安卓)Camera 三 CameraService 和 Client 链接到 HAL
- 优化小技巧