2016-05-30 01:54:09 +02:00
|
|
|
#include "timer.h"
|
|
|
|
|
2017-06-20 00:07:32 +02:00
|
|
|
u64 timer_start( void ) {
|
|
|
|
static bool timer_init = true;
|
2017-07-06 00:59:21 +02:00
|
|
|
if (timer_init || !(*TIMER_CNT0 & TIMER_ACTIVE)) {
|
|
|
|
// deactivate, then reset timers
|
2017-06-20 00:07:32 +02:00
|
|
|
*TIMER_CNT0 = 0;
|
|
|
|
*TIMER_CNT1 = *TIMER_CNT2 = *TIMER_CNT3 = TIMER_COUNT_UP;
|
|
|
|
*TIMER_VAL0 = *TIMER_VAL1 = *TIMER_VAL2 = *TIMER_VAL3 = 0;
|
2016-05-30 01:54:09 +02:00
|
|
|
|
2017-06-20 00:07:32 +02:00
|
|
|
// start timers
|
|
|
|
*TIMER_CNT0 = TIMER_ACTIVE;
|
|
|
|
*TIMER_CNT1 = *TIMER_CNT2 = *TIMER_CNT3 = TIMER_ACTIVE | TIMER_COUNT_UP;
|
|
|
|
|
|
|
|
// timer initialized (no need to do this more than once)
|
|
|
|
timer_init = false;
|
|
|
|
}
|
|
|
|
return timer_ticks( 0 );
|
2016-05-30 01:54:09 +02:00
|
|
|
}
|
|
|
|
|
2017-06-20 00:07:32 +02:00
|
|
|
/*void timer_stop( void ) {
|
2016-05-30 01:54:09 +02:00
|
|
|
*TIMER_CNT0 &= ~TIMER_ACTIVE;
|
|
|
|
*TIMER_CNT1 &= ~TIMER_ACTIVE;
|
|
|
|
*TIMER_CNT2 &= ~TIMER_ACTIVE;
|
|
|
|
*TIMER_CNT3 &= ~TIMER_ACTIVE;
|
2017-06-20 00:07:32 +02:00
|
|
|
}*/
|
2016-05-30 01:54:09 +02:00
|
|
|
|
2017-06-20 00:07:32 +02:00
|
|
|
u64 timer_ticks( u64 start_time ) {
|
2016-05-30 01:54:09 +02:00
|
|
|
u64 ticks = 0;
|
|
|
|
ticks |= (u64) *TIMER_VAL0 << 0;
|
|
|
|
ticks |= (u64) *TIMER_VAL1 << 16;
|
|
|
|
ticks |= (u64) *TIMER_VAL2 << 32;
|
|
|
|
ticks |= (u64) *TIMER_VAL3 << 48;
|
2017-06-20 00:07:32 +02:00
|
|
|
return ticks - start_time;
|
|
|
|
}
|
|
|
|
|
|
|
|
u64 timer_msec( u64 start_time ) {
|
|
|
|
return timer_ticks( start_time ) / (TICKS_PER_SEC/1000);
|
2016-05-30 01:54:09 +02:00
|
|
|
}
|
|
|
|
|
2017-06-20 00:07:32 +02:00
|
|
|
u64 timer_sec( u64 start_time ) {
|
|
|
|
return timer_ticks( start_time ) / TICKS_PER_SEC;
|
2016-05-30 01:54:09 +02:00
|
|
|
}
|
|
|
|
|
2017-06-20 00:07:32 +02:00
|
|
|
void wait_msec( u64 msec ) {
|
|
|
|
u64 timer = timer_start();
|
|
|
|
while (timer_msec( timer ) < msec );
|
2016-05-30 01:54:09 +02:00
|
|
|
}
|