multi_rtimer_test_sample.c 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /*
  2. * Copyright (c) 2006-2018, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2020-04-01 Forest-rain first version
  9. */
  10. #include <rtthread.h>
  11. #include <rtdevice.h>
  12. #include "multi_rtimer.h"
  13. #include "hw_rtc_stm32.h"
  14. static timer_event_t led0_timer;
  15. static timer_event_t led1_timer;
  16. static timer_event_t led2_timer;
  17. static timer_event_t led3_timer;
  18. uint32_t interval_ms = 1;
  19. /*!
  20. * \brief Function executed on Led 0 Timeout event
  21. */
  22. static void on_led0_timeout(void)
  23. {
  24. rtimer_stop( &led0_timer );
  25. rt_kprintf("on_led0_timeout,%d,on shot\r\n",rtimer_get_current_time());
  26. }
  27. /*!
  28. * \brief Function executed on Led 1 Timeout event
  29. */
  30. static void on_led1_timeout(void)
  31. {
  32. rtimer_reset( &led1_timer );
  33. rt_kprintf("on_led1_timeout,%d\r\n",rtimer_get_current_time());
  34. }
  35. /*!
  36. * \brief Function executed on Led 2 Timeout event
  37. */
  38. static void on_led2_timeout(void)
  39. {
  40. rtimer_reset( &led2_timer );
  41. rt_kprintf("on_led2_timeout,%d\r\n",rtimer_get_current_time());
  42. }
  43. /*!
  44. * \brief Function executed on Led 3 Timeout event
  45. */
  46. static void on_led3_timeout(void)
  47. {
  48. interval_ms = interval_ms * 10;
  49. // stop timer then set new timer interval
  50. TimerSetValue( &led3_timer,interval_ms);
  51. TimerStart( &led3_timer );
  52. rt_kprintf("on_led3_timeout:%d,interval:%d ms\r\n",rtimer_get_current_time(),interval_ms);
  53. }
  54. int rt_multi_rtimer_init(void)
  55. {
  56. hw_rtc_init();
  57. // on shot
  58. rtimer_init( &led0_timer, on_led0_timeout );
  59. rtimer_set_value( &led0_timer, 60000 ); // 60s
  60. rtimer_start( &led0_timer );
  61. rt_kprintf("led0_timer start,%d\r\n",rtimer_get_current_time());
  62. // periodicity
  63. rtimer_init( &led1_timer, on_led1_timeout );
  64. rtimer_set_value( &led1_timer, 1000 ); // 1000ms
  65. rtimer_start( &led1_timer );
  66. rt_kprintf("led1_timer start,%d\r\n",rtimer_get_current_time());
  67. rtimer_init( &led2_timer, on_led2_timeout );
  68. rtimer_set_value( &led2_timer, 500 ); // 500ms
  69. rtimer_start( &led2_timer );
  70. rt_kprintf("led2_timer start,%d\r\n",rtimer_get_current_time());
  71. // change the interval
  72. // Use LoRaWAN Timer API
  73. TimerInit( &led3_timer, on_led3_timeout );
  74. TimerSetValue( &led3_timer, interval_ms ); // 1ms * 10^n
  75. TimerStart( &led3_timer );
  76. rt_kprintf("led3_timer start,%d\r\n",rtimer_get_current_time());
  77. #ifdef RT_USING_PM
  78. rt_pm_request(PM_SLEEP_MODE_DEEP);
  79. #endif
  80. return 0;
  81. }
  82. INIT_APP_EXPORT(rt_multi_rtimer_init);