1 #include <rthw.h> 2 #include <rtdevice.h> 3 #include <rtthread.h> 4 5 #include <board.h> 6 7 /* Use Cycle counter of Data Watchpoint and Trace Register for CPU time */ 8 riscv_cputime_getres(void)9static uint64_t riscv_cputime_getres(void) 10 { 11 uint64_t ret = 1000UL * 1000 * 1000; 12 13 ret = (ret * (1000UL * 1000)) / CPUTIME_TIMER_FREQ; 14 return ret; 15 } 16 riscv_cputime_gettime(void)17static uint64_t riscv_cputime_gettime(void) 18 { 19 uint64_t time_elapsed; 20 __asm__ __volatile__( 21 "rdtime %0" 22 : "=r"(time_elapsed)); 23 return time_elapsed; 24 } 25 26 const static struct rt_clock_cputime_ops _riscv_ops = 27 { 28 riscv_cputime_getres, 29 riscv_cputime_gettime 30 }; 31 riscv_cputime_init(void)32int riscv_cputime_init(void) 33 { 34 clock_cpu_setops(&_riscv_ops); 35 return 0; 36 } 37 INIT_BOARD_EXPORT(riscv_cputime_init); 38