/************************************************************************************** Copyright (c) 2002 The UbixOS Project $Id: delay.c,v 1.5 2002/04/29 23:34:57 reddawg Exp $ **************************************************************************************/ #include <ubixos/delay.h> long delayCount=1,ticks=0; long calibrateDelayLoop(void) { unsigned int prevtick,i,calib_bit; do { delayCount<<=1; prevtick=ticks; while(prevtick==ticks); prevtick=ticks; _delay(delayCount); } while(prevtick==ticks); delayCount>>=1; calib_bit=delayCount; for (i=0;i<PRECISION;i++) { calib_bit>>=1; if(!calib_bit) break; delayCount|=calib_bit; prevtick=ticks; while(prevtick==ticks); prevtick=ticks; _delay(delayCount); if (prevtick!=ticks) delayCount&=~calib_bit; } delayCount/=MILLISEC; return delayCount; } void _delay(long loops) { long c; for(c=0;c<loops;c++); } void delay(long miliseconds) { _delay(miliseconds*delayCount); }