cputime_riscv.c 739 B

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