1
0

delay.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /*
  2. * Copyright (c) 2006-2021, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2021-05-07 Meco Man first Version
  9. */
  10. #include <sys/types.h>
  11. #include <rtthread.h>
  12. #include <rthw.h>
  13. void msleep(unsigned int msecs)
  14. {
  15. rt_thread_mdelay(msecs);
  16. }
  17. RTM_EXPORT(msleep);
  18. void ssleep(unsigned int seconds)
  19. {
  20. msleep(seconds * 1000);
  21. }
  22. RTM_EXPORT(ssleep);
  23. void mdelay(unsigned long msecs)
  24. {
  25. rt_hw_us_delay(msecs * 1000);
  26. }
  27. RTM_EXPORT(mdelay);
  28. void udelay(unsigned long usecs)
  29. {
  30. rt_hw_us_delay(usecs);
  31. }
  32. RTM_EXPORT(udelay);
  33. void ndelay(unsigned long nsecs)
  34. {
  35. rt_hw_us_delay(1);
  36. }
  37. RTM_EXPORT(ndelay);
  38. unsigned int sleep(unsigned int seconds)
  39. {
  40. if (rt_thread_self() != RT_NULL)
  41. {
  42. ssleep(seconds);
  43. }
  44. else /* scheduler has not run yet */
  45. {
  46. while(seconds > 0)
  47. {
  48. udelay(1000000u);
  49. seconds --;
  50. }
  51. }
  52. return 0;
  53. }
  54. RTM_EXPORT(sleep);
  55. int usleep(useconds_t usec)
  56. {
  57. if (rt_thread_self() != RT_NULL)
  58. {
  59. msleep(usec / 1000u);
  60. }
  61. else /* scheduler has not run yet */
  62. {
  63. udelay(usec / 1000u);
  64. }
  65. udelay(usec % 1000u);
  66. return 0;
  67. }
  68. RTM_EXPORT(usleep);