我在我的一个项目中有一个小的延迟函数,我使用我的 MCU 的定时器外设自己编写了这个函数:
静态无效延迟100Us(无效)
{
uint_64 ctr = TIMER_read(0); //10ns resolution
uint_64 ctr2 = ctr + 10000;
while(ctr <= ctr2) //wait 100 microseconds(10000)
{
ctr = TIMER_read(0);
}
}
该计数器是一个具有 10ns 分辨率的自由运行硬件计数器,因此我编写了该函数以提供大约 100us 的延迟。我认为这原则上应该有效,但是可能存在计时器溢出小于 10000 的情况,因此 ctr2 将被分配一个超过 ctr 实际可以达到的值,因此我最终会陷入无限循环.
我需要在我的项目中使用这个计时器产生一个延迟,所以我需要以某种方式确保我总是得到相同的延迟(100us),同时保护自己不被卡在那里。
有什么办法可以做到这一点,或者这只是我无法通过的限制?
谢谢!
编辑:
ctr_start = TimerRead(); //get initial value for the counter
interval = TimerRead() - ctr_start;
while(interval <= 10000)
{
interval = ( TimerRead() - ctr_start + countersize ) % countersize;
}
Where countersize = 0xFFFFFFFFFFFFFFFF;