| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- #include "timer.h"
- #include "stdint.h"
- #include "string.h"
- #define HAL_TIMER_NUM 32
- typedef struct
- {
- HAL_TimerCB_fp s_sTimerCallback;
- uint8_t position;
- int timerReload;
- int tick;
- } HAL_TIMER_CALLBACK;
- static HAL_TIMER_CALLBACK Timer_Callback[HAL_TIMER_NUM];
- void timer_tick_check(void)
- {
- int i;
- for (i = 0; i < HAL_TIMER_NUM; i++)
- {
- if (Timer_Callback[i].s_sTimerCallback != NULL)
- {
- if (++Timer_Callback[i].tick >= Timer_Callback[i].timerReload)
- {
- Timer_Callback[i].tick = 0;
- Timer_Callback[i].s_sTimerCallback();
- }
- }
- }
- }
- uint8_t timer_register(HAL_TimerCB_fp callback, int timerReload)
- {
- uint8_t handle = 0;
- int i;
- for (i = 0; i < HAL_TIMER_NUM; i++)
- {
- if (Timer_Callback[i].s_sTimerCallback == callback)
- {
- Timer_Callback[i].timerReload = timerReload;
- Timer_Callback[i].tick = 0;
- handle = i;
- return handle;
- }
- }
- for (i = 0; i < HAL_TIMER_NUM; i++)
- {
- if (Timer_Callback[i].s_sTimerCallback == NULL)
- {
- Timer_Callback[i].s_sTimerCallback = callback;
- Timer_Callback[i].position = i;
- Timer_Callback[i].timerReload = timerReload;
- Timer_Callback[i].tick = 0;
- handle = i;
- break;
- }
- }
- return handle;
- }
- int timer_unregister(uint8_t *handle)
- {
- uint8_t timer_index = *handle;
-
- if (handle == NULL)
- {
- return -1;
- }
- if (timer_index > HAL_TIMER_NUM)
- {
- return -2;
- }
- if (0xff != timer_index)
- {
- Timer_Callback[timer_index].s_sTimerCallback = NULL;
- Timer_Callback[timer_index].timerReload = 0;
- Timer_Callback[timer_index].tick = 0;
- *handle = 0xff;
- }
- return 0;
- }
|