bian.hu 发表于 2015-12-2 15:41:57

s5pv210延时程序

s5pv210延时程序怎么写,没写过能提示下吗?

zjl12006 发表于 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
      );
}

bian.hu 发表于 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是怎么得出来的?

zjl12006 发表于 2016-2-4 10:01:39

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

zjl12006 发表于 2016-2-4 10:08:25

所以,如果你不打算自己写定时器,那你就写一个类似的delay函数,尝试一个可满足自己需求的值就行了。
页: [1]
查看完整版本: s5pv210延时程序