#ifndef __DRV_TIMER_H__ #define __DRV_TIMER_H__ #include "bsp_common.h" #define TIMER_RUN_FOREVER 0 #define TIMER_RUN_ONE_SHOT 1 #define TIMER_ONE_SHOT (0x04) #define TIMER_PERIODIC (0x08) typedef enum { TIMER_TYPE_HARDWARE = (0x01), // 硬件 timer ,实时性较强,定时精度较高,占用中断时间 TIMER_TYPE_SOFTWARE = (0x02) // 软件 timer ,实时性较差,定时精度较差,不占用中断时间 } eTIMERTYPE; struct drv_timer_t { void (*timerCallback)(void *user_data); void *user_data; eTIMERTYPE type; // 类型 bit3:持续 bit2:单次 bit1:软件 bit0:硬件 uint8_t start :1; uint8_t timeout_flag :1; uint8_t :0; uint16_t period; // 执行次数 uint16_t period_temp; // 暂存执行次数, 用于重置 uint32_t timeout; // 计时,单位为 ms uint32_t time_temp; // 计时计数 struct drv_timer_t *next; }; extern void drv_timer_start (struct drv_timer_t *timer); extern void drv_timer_restart (struct drv_timer_t *timer); extern void drv_timer_pause (struct drv_timer_t *timer); extern void drv_timer_detach (struct drv_timer_t *timer); extern void drv_timer_handler (uint8_t ms); extern void drv_timer_linkUserData (struct drv_timer_t *timer, void *user_data); extern void drv_timer_init (struct drv_timer_t *timer, void (*timerCallback)(void *user_data), uint32_t timeout, uint16_t period); #endif /* __DRV_TIMER_H__ */