📄 udelay.c
字号:
#include "udelay.h"
int timer_load_val;
static unsigned long lastdec;
static unsigned long timestamp;
void init_timer(void)
{
rTCFG0 = 0x0f00;
timer_load_val = 15625;
/* load value for 10 ms timeout */
lastdec = rTCNTB4 = timer_load_val;
/* auto load, manual update of Timer 4 */
rTCON = 0x600000;
/* auto load, start Timer 4 */
rTCON = 0x500000;
timestamp = 0;
}
unsigned long get_timer_masked (void)
{
unsigned long now = READ_TIMER;
if (lastdec >= now) {
/* normal mode */
timestamp += lastdec - now;
} else {
/* we have an overflow ... */
timestamp += lastdec + timer_load_val - now;
}
lastdec = now;
return timestamp;
}
unsigned long get_timer (unsigned long base)
{
return get_timer_masked () - base;
}
void delay (unsigned long usec)
{
unsigned long tmo;
tmo = usec / 1000;
tmo *= (timer_load_val * 100);
tmo /= 1000;
tmo += get_timer (0);
while (get_timer_masked () < tmo)
/*NOP*/;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -