找回密码
 注册
搜索
查看: 1429|回复: 8

[讨论] 如此做延时可以吗?

[复制链接]
发表于 2007-7-3 18:00:25 | 显示全部楼层 |阅读模式
看到MTK平台中 Lcd驱动中Lcd_ExitSleep()中调用
void Delayms(kal_uint32 data)
{
kal_uint16 i;
while(data--)
{
  for(i=0;i<5000;i++){}
}
}
来做延时合适吗?
不用考虑其他中断的出现和执行时间吗,不用考虑芯片进入不同模式后时钟的周期不同吗?
发表于 2007-7-3 21:53:45 | 显示全部楼层
你的这个延时不准吧,把它换成汇编看有多少条指令,然后根据你的频率计算一下一个指令周期是多长时间,就可以计算你需要循环多少次了。

以上为个人观点抛砖引玉,请高手帮忙解答!
点评回复

使用道具 举报

发表于 2007-7-4 09:27:13 | 显示全部楼层
有些疑惑, 当时作LP3950的时候别人也提醒过
点评回复

使用道具 举报

发表于 2007-7-6 10:25:48 | 显示全部楼层
其他人是这么说的,延迟的目的在于使各个电压回复到一个稳定的状态,只要几百毫秒就可以了[em01]
点评回复

使用道具 举报

发表于 2007-7-29 23:44:16 | 显示全部楼层
如果有看门狗的话,不进行喂狗,会不会引起复位?
点评回复

使用道具 举报

发表于 2007-7-30 09:59:36 | 显示全部楼层
void Delayms(kal_uint32 ms)
{
  kal_uint32 i;
  for(i=0;i<5000*ms;i++)
}

其中5000需要根据cpu进行调整, 用在driver是延时的较佳选择~
点评回复

使用道具 举报

发表于 2007-8-7 19:06:46 | 显示全部楼层
反正不用很精确啊~
点评回复

使用道具 举报

发表于 2007-8-22 17:13:35 | 显示全部楼层
大家看看这个延时准确吗?
#if defined(MT6226)
#define        MTK_32K_CLOCK_ADDR                        0x80200230
#elif defined(MT6225)
#define        MTK_32K_CLOCK_ADDR                                0x80200220
#else
#error "Please define MTK_32K_CLOCK_ADDR"
#endif

void custom_delay_ms(kal_uint32 nMs)
{   
        volatile kal_uint32 CurrentTime,StartTime;
        StartTime = *(volatile kal_uint32*)(MTK_32K_CLOCK_ADDR);
        while(1)
        {
                CurrentTime = *(volatile kal_uint32*)(MTK_32K_CLOCK_ADDR);
                               
                if((CurrentTime < StartTime) || ((CurrentTime > StartTime) && ((CurrentTime-StartTime)>=1000*nMs/32)))
                {
                         break;
                }
        }
}
点评回复

使用道具 举报

发表于 2007-8-22 18:38:43 | 显示全部楼层
young所说的是比较准的,其它上面的就不准的。但就young所说的也存在不准的可能性。因为手机是多任务的操作系统,所以在做延时的时候,会有其他Task打断你正在运行的任务,custom_delay_ms所在的task若被其他task或者int打断,并且刚好计时时间到的时候被打断了,等系统把操作权重新给custom_delay_ms所在的task时,可能MTK_32K_CLOCK_ADDR又跑了若干个clock,那就不是很准确了。
用GPT的硬件方式要较以上方式更加准确些。
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-7-7 06:42 , Processed in 0.054620 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表