cputime_riscv.c 708 B

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