initial commit
This commit is contained in:
63
sdk/software/bsp/drivers/confreg_time.c
Normal file
63
sdk/software/bsp/drivers/confreg_time.c
Normal file
@@ -0,0 +1,63 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user