Files
chrg/apps/boot/bsp/drv_timer.h
T
2025-08-16 22:58:22 +08:00

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__ */