delay.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. #define DBG_TAG "POSIX.delay"
  14. #define DBG_LVL DBG_INFO
  15. #include <rtdbg.h>
  16. RT_WEAK void rt_hw_us_delay(rt_uint32_t us)
  17. {
  18. (void) us;
  19. LOG_W("Please consider implementing rt_hw_us_delay() in another file.");
  20. }
  21. void msleep(unsigned int msecs)
  22. {
  23. rt_thread_mdelay(msecs);
  24. }
  25. RTM_EXPORT(msleep);
  26. void ssleep(unsigned int seconds)
  27. {
  28. msleep(seconds * 1000);
  29. }
  30. RTM_EXPORT(ssleep);
  31. void mdelay(unsigned long msecs)
  32. {
  33. rt_hw_us_delay(msecs * 1000);
  34. }
  35. RTM_EXPORT(mdelay);
  36. void udelay(unsigned long usecs)
  37. {
  38. rt_hw_us_delay(usecs);
  39. }
  40. RTM_EXPORT(udelay);
  41. void ndelay(unsigned long nsecs)
  42. {
  43. rt_hw_us_delay(1);
  44. }
  45. RTM_EXPORT(ndelay);
  46. unsigned int sleep(unsigned int seconds)
  47. {
  48. if (rt_thread_self() != RT_NULL)
  49. {
  50. ssleep(seconds);
  51. }
  52. else /* scheduler has not run yet */
  53. {
  54. while(seconds > 0)
  55. {
  56. udelay(1000000u);
  57. seconds --;
  58. }
  59. }
  60. return 0;
  61. }
  62. RTM_EXPORT(sleep);
  63. int usleep(useconds_t usec)
  64. {
  65. if (rt_thread_self() != RT_NULL)
  66. {
  67. msleep(usec / 1000u);
  68. }
  69. else /* scheduler has not run yet */
  70. {
  71. udelay(usec / 1000u);
  72. }
  73. udelay(usec % 1000u);
  74. return 0;
  75. }
  76. RTM_EXPORT(usleep);