timer.c 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /**
  2. ******************************************************************************
  3. * @file timer.c
  4. * @author StarFive Technology
  5. * @version V1.0
  6. * @date 06/25/2020
  7. * @brief
  8. ******************************************************************************
  9. * @copy
  10. *
  11. * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  12. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  13. * TIME. AS A RESULT, STARFIVE SHALL NOT BE HELD LIABLE FOR ANY
  14. * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  15. * FROM THE CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  16. * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  17. *
  18. * COPYRIGHT 2020 Shanghai StarFive Technology Co., Ltd.
  19. */
  20. #include "platform.h"
  21. #include "timer.h"
  22. #include "sys.h"
  23. #include "clkgen_ctrl_macro.h"
  24. #define TIMER_CLK_HZ 25000000
  25. u64 usec_to_tick(u32 usec)
  26. {
  27. u64 value;
  28. value = usec*(TIMER_CLK_HZ/1000000);
  29. return value;
  30. }
  31. /* delay x useconds */
  32. void udelay(unsigned long usec)
  33. {
  34. unsigned long tmp;
  35. tmp = readq((volatile void *)CLINT_CTRL_MTIME) + usec_to_tick(usec); /* get current timestamp */
  36. while (readq((volatile void *)CLINT_CTRL_MTIME) < tmp);
  37. }