38 lines
		
	
	
		
			769 B
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			769 B
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| #include <rthw.h>
 | |
| #include <rtdevice.h>
 | |
| #include <rtthread.h>
 | |
| 
 | |
| #include <board.h>
 | |
| 
 | |
| /* Use Cycle counter of Data Watchpoint and Trace Register for CPU time */
 | |
| 
 | |
| static uint64_t riscv_cputime_getres(void)
 | |
| {
 | |
|     uint64_t ret = 1000UL * 1000 * 1000;
 | |
| 
 | |
|     ret = (ret * (1000UL * 1000)) / CPUTIME_TIMER_FREQ;
 | |
|     return ret;
 | |
| }
 | |
| 
 | |
| static uint64_t riscv_cputime_gettime(void)
 | |
| {
 | |
|     uint64_t time_elapsed;
 | |
|     __asm__ __volatile__(
 | |
|         "rdtime %0"
 | |
|         : "=r"(time_elapsed));
 | |
|     return time_elapsed;
 | |
| }
 | |
| 
 | |
| const static struct rt_clock_cputime_ops _riscv_ops =
 | |
| {
 | |
|     riscv_cputime_getres,
 | |
|     riscv_cputime_gettime
 | |
| };
 | |
| 
 | |
| int riscv_cputime_init(void)
 | |
| {
 | |
|     clock_cpu_setops(&_riscv_ops);
 | |
|     return 0;
 | |
| }
 | |
| INIT_BOARD_EXPORT(riscv_cputime_init);
 |