udelay.c

来自「增加了tftp功能的vivi代码」· C语言 代码 · 共 51 行

C
51
字号
#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 + =
减小字号Ctrl + -
显示快捷键?