59 lines
1.4 KiB
C
59 lines
1.4 KiB
C
#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__ */
|
|
|
|
|
|
|