Files
2026-04-12 22:20:18 +08:00

64 lines
1.3 KiB
C

#include "confreg_time.h"
#include "time.h"
unsigned long __attribute__((weak)) CONFREG_TIMER_BASE = 0xbf20f100;
unsigned long __attribute__((weak)) CONFREG_CLOCKS_PER_SEC = 50000000L;
unsigned long __attribute__((weak)) CORE_CLOCKS_PER_SEC = 33000000L;
unsigned long get_confreg_clock_count()
{
unsigned long contval;
asm volatile(
"la.local $r25, CONFREG_TIMER_BASE\n\t"
"ld.w $r25, $r25, 0\n\t"
"ld.w %0,$r25,0\n\t"
:"=r"(contval)
:
:"$r25"
);
return contval;
}
unsigned long get_cpu_clock_count()
{
unsigned long contval;
asm volatile(
"rdcntvl.w %0\n\t"
:"=r"(contval)
);
return contval;
}
unsigned long get_clock_count()
{
#ifdef USE_CPU_CLOCK_COUNT
return get_cpu_clock_count();
#else
return get_confreg_clock_count();
#endif
}
unsigned long get_ns(void)
{
unsigned long n=0;
n = get_clock_count();
#ifdef USE_CPU_CLOCK_COUNT
n=n*(NSEC_PER_USEC/(CORE_CLOCKS_PER_SEC/USEC_PER_SEC));
#else
n=n*(NSEC_PER_USEC/(CONFREG_CLOCKS_PER_SEC/USEC_PER_SEC));
#endif
return n;
}
unsigned long get_us(void)
{
unsigned long n=0;
n = get_clock_count();
#ifdef USE_CPU_CLOCK_COUNT
n=n/(CORE_CLOCKS_PER_SEC/USEC_PER_SEC);
#else
n=n/(CONFREG_CLOCKS_PER_SEC/USEC_PER_SEC);
#endif
return n;
}