在uboot中有以下参考代码可用于微秒级延时。
这是完全的软件延时,原理是依靠cup“空转”忙等。
因为不同平台的cpu频率不同,因此单次“空转”所消耗的时间也不同。
针对不同的平台,可以修改以下红色数字,以达到匹配实际延时之目的。
在某一平台,我将以下数字改为100后,实测的udelay(1) 为精确的1微秒。
这个值需要客户基于个体平台实测。
//=================================
#define udelay(x) \
do { \
volatile int i; \
int cnt = 100 * x; \
for (i=0; i<cnt; i++);\
} while(0);
//=================================
这是完全的软件延时,原理是依靠cup“空转”忙等。
因为不同平台的cpu频率不同,因此单次“空转”所消耗的时间也不同。
针对不同的平台,可以修改以下红色数字,以达到匹配实际延时之目的。
在某一平台,我将以下数字改为100后,实测的udelay(1) 为精确的1微秒。
这个值需要客户基于个体平台实测。
//=================================
#define udelay(x) \
do { \
volatile int i; \
int cnt = 100 * x; \
for (i=0; i<cnt; i++);\
} while(0);
//=================================
本文介绍了一种在U-Boot中实现微秒级延时的方法,通过CPU空转来达到所需延时的目的。针对不同平台,可以通过调整代码中的参数来精确控制延时时间。
1万+

被折叠的 条评论
为什么被折叠?



