Files
TAIXIN/sdk/include/hal/timer_device.h

89 lines
2.3 KiB
C
Raw Permalink Normal View History

#ifndef _HAL_TIMER_DEVICE_H_
#define _HAL_TIMER_DEVICE_H_
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief timer type
*/
enum timer_type {
TIMER_TYPE_ONCE,
TIMER_TYPE_PERIODIC,
};
enum timer_ioctl_cmd {
TIMER_GET_TIMESTAMP,
TIMER_CALC_TIME_DIFF_US,
/*
* configure the prescaler of clk
*/
TIMER_SET_CLK_PSC,
/*
* configure type the slave mode
*/
TIMER_SET_SLAVE_MODE,
TIMER_SET_PERIOD,
TIMER_SET_CLK_SRC,
};
enum timer_irq_flag {
/*!
* @brief Interrupt: Timer timeout intterupt.
* @note
*
*/
TIMER_IRQ_FLAG_TIMEOUT = BIT(0),
/*!
* @brief Interrupt: Timer receives has been reset.
* @note
* Possible need to reset parameters.
*/
TIMER_IRQ_FLAG_RESET = BIT(1),
};
typedef void (*timer_irq_hdl)(uint32 irq_data, uint32 irq_flag);
struct timer_device {
struct dev_obj dev;
};
struct timer_hal_ops {
struct devobj_ops ops;
int32(*open)(struct timer_device *timer, enum timer_type type, uint32 flags);
int32(*close)(struct timer_device *timer);
int32(*start)(struct timer_device *timer, uint32 tmo_us, timer_irq_hdl hdl, uint32 data);
int32(*stop)(struct timer_device *timer);
int32(*suspend)(struct timer_device *timer);
int32(*resume)(struct timer_device *timer);
int32(*ioctl)(struct timer_device *timer, uint32 cmd, uint32 param1, uint32 param2);
int32(*request_irq)(struct timer_device *timer, uint32 irq_flag, timer_irq_hdl hdl, uint32 irq_data);
int32(*release_irq)(struct timer_device *timer, uint32 irq_flag);
};
int32 timer_device_open(struct timer_device *timer, enum timer_type mode, uint32 flags);
int32 timer_device_close(struct timer_device *timer);
int32 timer_device_start(struct timer_device *timer, uint32 period_sysclkpd_cnt, timer_irq_hdl hdl, uint32 irq_data);
int32 timer_device_stop(struct timer_device *timer);
int32 timer_device_suspend(struct timer_device *timer);
int32 timer_device_resume(struct timer_device *timer);
int32 timer_device_ioctl(struct timer_device *timer, uint32 cmd, uint32 param1, uint32 param2);
int32 timer_request_irq(struct timer_device *timer, uint32 irq_flag, timer_irq_hdl hdl, uint32 irq_data);
int32 timer_release_irq(struct timer_device *timer, uint32 irq_flag);
#ifdef __cplusplus
}
#endif
#endif