sys_timer.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #include "sys_timer.h" // TIM¶¨Ê±Æ÷Ö§³ÖÎļþ
  2. #include "stdint.h"
  3. #include "string.h"
  4. #define HAL_TIMER_NUM 32
  5. typedef struct
  6. {
  7. HAL_TimerCB_fp s_sTimerCallback;
  8. uint8_t position;
  9. int timerReload;
  10. int tick;
  11. } HAL_TIMER_CALLBACK;
  12. static HAL_TIMER_CALLBACK Timer_Callback[HAL_TIMER_NUM];
  13. void HAL_TimerTickCheck(void)
  14. {
  15. int i;
  16. for (i = 0; i < HAL_TIMER_NUM; i++)
  17. {
  18. if (Timer_Callback[i].s_sTimerCallback != NULL)
  19. {
  20. if (++Timer_Callback[i].tick >= Timer_Callback[i].timerReload)
  21. {
  22. Timer_Callback[i].tick = 0;
  23. Timer_Callback[i].s_sTimerCallback();
  24. }
  25. }
  26. }
  27. }
  28. uint8_t HAL_TimerRegister(HAL_TimerCB_fp callback, int timerReload)
  29. {
  30. uint8_t handle = 0;
  31. int i;
  32. for (i = 0; i < HAL_TIMER_NUM; i++)
  33. {
  34. if (Timer_Callback[i].s_sTimerCallback == callback)
  35. {
  36. Timer_Callback[i].timerReload = timerReload;
  37. Timer_Callback[i].tick = 0;
  38. handle = i;
  39. return handle;
  40. }
  41. }
  42. for (i = 0; i < HAL_TIMER_NUM; i++)
  43. {
  44. if (Timer_Callback[i].s_sTimerCallback == NULL)
  45. {
  46. Timer_Callback[i].s_sTimerCallback = callback;
  47. Timer_Callback[i].position = i;
  48. Timer_Callback[i].timerReload = timerReload;
  49. Timer_Callback[i].tick = 0;
  50. handle = i;
  51. break;
  52. }
  53. }
  54. return handle;
  55. }
  56. int HAL_TimerUnregister(uint8_t *handle)
  57. {
  58. uint8_t timer_index = *handle;
  59. if (handle == NULL)
  60. {
  61. return -1;
  62. }
  63. if (timer_index > HAL_TIMER_NUM)
  64. {
  65. return -2;
  66. }
  67. if (0xff != timer_index)
  68. {
  69. Timer_Callback[timer_index].s_sTimerCallback = NULL;
  70. Timer_Callback[timer_index].timerReload = 0;
  71. Timer_Callback[timer_index].tick = 0;
  72. *handle = 0xff;
  73. }
  74. return 0;
  75. }