微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > avr-gcc中关于delay延时函数的应用修改版

avr-gcc中关于delay延时函数的应用修改版

时间:11-23 来源:互联网 点击:

在08版本中已经修改,具体函数如下:

void
_delay_us(double __us)
{
uint8_t __ticks;
double __tmp = ((F_CPU) / 3e6) * __us;
if (__tmp < 1.0)
__ticks = 1;
else if (__tmp > 255)
{
_delay_ms(__us / 1000.0);
return;
}
else
__ticks = (uint8_t)__tmp;
_delay_loop_1(__ticks);
}

当__us过大的时候,就会调用_delay_ms();由上面可以知道8M时候_delay_ms最小可以延时4/8000000=0.5us 1M时,最小延时4/1000000=4us,可以连接上。

void
_delay_ms(double __ms)
{
uint16_t __ticks;
double __tmp = ((F_CPU) / 4e3) * __ms;
if (__tmp < 1.0)
__ticks = 1;
else if (__tmp > 65535)
{
//__ticks = requested delay in 1/10 ms
__ticks = (uint16_t) (__ms * 10.0);
while(__ticks)
{
// wait 1/10 ms
_delay_loop_2(((F_CPU) / 4e3) / 10);
__ticks --;
}
return;
}
else
__ticks = (uint16_t)__tmp;
_delay_loop_2(__ticks);
}

当__ms过大时,只采用__ticks --的方式延时。先延时一个262ms(1M,32ms 8M),然后用递减方式。

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

网站地图

Top