嵌入式爱好者

查看: 7204|回复: 4

s5pv210延时程序

[复制链接]

11

主题

27

帖子

39

积分

扫一扫,手机访问本帖
发表于 2015-12-2 15:41:57 | 显示全部楼层 |阅读模式
s5pv210延时程序怎么写,没写过能提示下吗?
回复

使用道具 举报

2

主题

9

帖子

12

积分

发表于 2015-12-29 15:20:37 | 显示全部楼层
简延时还是精确延时?简单延时,用while循环就可以了。
精确延时的话,用定时器。(几年前玩51用过,ARM裸机还没玩过)汇编也可以做吧。一条指令一个时钟周期,跳转除外,跳转是三个时钟周期,然后自己去计算一下,这个我用过。下面这个是1GHz计算出来的udelay。
void _udelay(unsigned int nCount)
{
        __asm__ __volatile__(
        "000:\n"
        "ldr r1,=250\n"
        "111:\n"
        "subs r1,r1,#1\n"       //one arm clock
        "bne 111b\n"            //three arm clock
        "subs r0,r0,#1\n"
        "bne 000b\n"            //three arm clock
        );
}
点评回复 支持 反对

使用道具 举报

11

主题

27

帖子

39

积分

 楼主| 发表于 2016-1-21 16:02:01 | 显示全部楼层
static void Delay(int count)
{
            volatile int i, j = 0;
            volatile static int loop = 800000000/10000;
            for(;count > 0;count--)
                    for(i=0;i < loop; i++) { j++; }
}
count =10;这里的loop=8000000000/10000是怎么得出来的?
点评回复 支持 反对

使用道具 举报

2

主题

9

帖子

12

积分

发表于 2016-2-4 10:01:39 | 显示全部楼层
不用想了,ARM处理器应该只有用timer才能写出准确的延时程序。。通过这种for循环写的,都是尝试得到的大概数值。也就是说loop的值是尝试后得到的。ARM指令也不像51那样有固定的指令周期(所以,我上次的回复也有问题,后来才了解到的:( 。),经测试,打开icache和不开icache,运行速度相差很大。。。结论就是:这个loop值没什么意义,就是别人尝试后感觉这个值可满足他的需求。
点评回复 支持 反对

使用道具 举报

2

主题

9

帖子

12

积分

发表于 2016-2-4 10:08:25 | 显示全部楼层
所以,如果你不打算自己写定时器,那你就写一个类似的delay函数,尝试一个可满足自己需求的值就行了。
点评回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2024-12-20 19:58

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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