repo2/firmware_eclairexl/usb/timer.c
269 | markw | #include "timer.h"
|
|
275 | markw | #include "regs.h"
|
|
269 | markw | ||
// this is a 32 bit counter which overflows after 2^32 milliseconds
|
|||
// -> after 46 days
|
|||
void wait_us(int unsigned num);
|
|||
void timer_init() {
|
|||
}
|
|||
275 | markw | #ifdef LINUX_BUILD
|
|
#include <sys/time.h>
|
|||
269 | markw | msec_t timer_get_msec() {
|
|
275 | markw | struct timeval x;
|
|
gettimeofday(&x,0);
|
|||
return (x.tv_sec*1000+(x.tv_usec/1000));
|
|||
269 | markw | }
|
|
275 | markw | #else
|
|
msec_t timer_get_msec() {
|
|||
int res = *zpu_timer;
|
|||
803 | markw | res = res >> 10; // Divide by 1024, good enough for here!
|
|
956 | markw | ||
275 | markw | return res;
|
|
}
|
|||
956 | markw | ||
bool timer_elapsed(msec_t until)
|
|||
{
|
|||
msec_t now = timer_get_msec();
|
|||
if (now>=until)
|
|||
return true;
|
|||
else
|
|||
{
|
|||
unsigned int delay = until - now;
|
|||
if (delay > 0x200000)
|
|||
return true; //overflow
|
|||
else
|
|||
return false; //normal case
|
|||
}
|
|||
}
|
|||
275 | markw | #endif
|