s5pv210延时程序
s5pv210延时程序怎么写,没写过能提示下吗? 简延时还是精确延时?简单延时,用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
);
}
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是怎么得出来的? 不用想了,ARM处理器应该只有用timer才能写出准确的延时程序。。通过这种for循环写的,都是尝试得到的大概数值。也就是说loop的值是尝试后得到的。ARM指令也不像51那样有固定的指令周期(所以,我上次的回复也有问题,后来才了解到的:( 。),经测试,打开icache和不开icache,运行速度相差很大。。。结论就是:这个loop值没什么意义,就是别人尝试后感觉这个值可满足他的需求。 所以,如果你不打算自己写定时器,那你就写一个类似的delay函数,尝试一个可满足自己需求的值就行了。
页:
[1]