微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > linux IO 模拟 PWM 有时间间隔 问题

linux IO 模拟 PWM 有时间间隔 问题

时间:10-02 整理:3721RD 点击:
代码如下:
static void vibe_work_func(struct work_struct *work)  //DO-->工作队列函数
{
        static int turn_flag;
        unsigned long flags;
        while(hrtimer_cancel(&vibe_timer))//定时器取消
        {
                printk("[pwm] pwm_off: try to cancel hrtimer \n");
        }
        SPIn_lock_irqsave(&pwm_spinlock, flags);//2013-7-10
        if(turn_flag == 0)
        {
                turn_flag = 1;
                mt_set_GPIO_out(gpio_LCD_backlight_3d1_en,1);
                mt_set_gpio_out(gpio_lcd_backlight_3d2_en,0);
        }
        else if(turn_flag == 1)
        {
                turn_flag = 0;
                mt_set_gpio_out(gpio_lcd_backlight_3d1_en,0);
                mt_set_gpio_out(gpio_lcd_backlight_3d2_en,1);
        }
        printk("'vibe_work_func'-->work\n");  
        // msleep(50); /* CPU sleep */
        if(pwm_open_flag==1){
                vibe_timer.function = vibrator_timer_func;  
                hrtimer_start(&vibe_timer,  
                                ktime_set(value / 1000, (value % 1000) * 1000000),HRTIMER_MODE_REL);  
        }
        spin_unlock_irqrestore(&pwm_spinlock, flags);
}  

硬件决定了 无法用硬件的PWM口发生信号。
波形如 图片所示,请高手分析下 是什么原因?有什么办法 可以让IO口产生连续的波形,


因为系统有其它的任务在跑,所以会出现有时出现时间变长的问题。
所以你要保证你这个东西是不会让别的东西打断。

所以加了 自旋锁  spin_lock_irqsave,但没效果,很奇诡,自旋锁不是可以独占CPU么?

关键在你的定时器,他的定时时间因为任务切换时,去调用这个函数时不有延时。

不能开定时器,定时器依赖系统调度

我就觉得LINUX系统是不能做摸拟PWM的。

让你们硬件改用一线脉冲控制背光吧

jianghuiyan
我就觉得LINUX系统是不能做摸拟PWM的。
其实别的RTOS也一样,想用GPIO来做精确的脉宽是做不到的,我倒觉得定时器是准确的,但在GPIO操作的时候不精确了。

因为他的定时器时间到后,他也是相当一个任务调度的。
有任务调度,哪么就不可能做到100%保证立马执行到。

硬件PWM都是硬件定时器的,多任务操作系统软件定时器不准的,依赖系统调度算法,并不是时钟中断来后马上处理的。所以不可能做到精确

把PWM周期加长,减少间隔所占的比重。比如20ms以上。

这样影响变小,但还有,频率变eq低,估计就实去他芯片的要求了。

BL芯片有接受较低频率PWM信号的,以前我用过。不知小编用的芯片是什么。

不明白~ 频率 eq ?

不知道是什么芯片,3D显示屏需要PWM信号控制

eq 是我打字快了,打上去的。

一线脉冲 是指什么 ?

linux 应该定时器产生的软终端吧,在这个中断里面改变IO口电平是不是实时性比较好 ~

相对应当要好很多,但是具体还是用示波器测试看看。

linux 应该定时器产生的软终端吧,在这个中断里面改变IO口电平是不是实时性比较好 ~


定时器 也依赖与任务调度么? 定时器 不是对 clock tick 进行计数的么~

频率 需要 60HZ以上啊 ~

依赖的,tick到了只是唤醒定时器等待的任务,具体什么时候CPU会执行,未知

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top