Timer使用参考
REVISION HISTORY¶
Revision No. | Description |
Date |
---|---|---|
1.0 | 07/12/2024 |
1. 概述¶
Timer(又称Hardware Timer)提供单次计时或周期计时的功能,它由硬件驱动并在超时时通过中断通知CPU,一般软件上用于实现周期性地异步执行某些任务的需求。
2. Linux用法介绍¶
2.1 DRIVER PATH¶
Timer驱动代码位于:<RTOS>/proj/sc/driver/sysdriver/timer
2.2 CONFIG配置¶
Kconfig配置:
BSP Driver Options ---> [*] Support PM timer driver
平台相关配置位于:<RTOS>/proj/sc/driver/sysdriver/timer/hal/<platform>/inc/hal_timer_cfg.h
#define TIMER_CFG_DEV_COUNT 3 // 平台包含的Timer设备数量 struct timer_cfg timer_configs[TIMER_CFG_DEV_COUNT] = { [0] = { .reg_base = TIMER0_BASE_REG, // Timer的寄存器基址 .irq = INT_FIQ_TIMER, // Timer使用的硬件中断号 .clk_id = -1, // Timer使用的clock索引 .clk_rate = 12000000, // Timer默认的clock频率 }, [1] = ...... };
2.3 API说明¶
Timer的API声明在:<RTOS>/proj/sc/driver/sysdriver/timer/drv/pub/drv_timer.h
,其中:
enum drv_timer_mode { SSTAR_TIMER_MODE_ONESHOT, SSTAR_TIMER_MODE_RUNLOOP, };
drv_timer_mode用于表示希望timer工作在什么模式,用于drv_timer_register
:
SSTAR_TIMER_MODE_ONESHOT
表示timer只计时一次,记满后会触发一次中断然后停止SSTAR_TIMER_MODE_RUNLOOP
表示timer周期计时,记满后会触发中断然后再重新计时
2.3.1. drv_timer_register¶
-
功能
注册timer设备
-
语法
drv_timer_handle drv_timer_register(unsigned int timer_id, enum drv_timer_mode mode, star_timer_callback callback, void *pdata)
-
返回值
返回值 描述 非NULL 该指针是后续使用其他API的凭据(handle参数) NULL 失败
2.3.2. drv_timer_unregister¶
-
功能
释放timer设备
-
语法
int drv_timer_unregister(drv_timer_handle handle)
-
返回值
返回值 描述 0 成功 非0 失败
2.3.3. drv_timer_start_us¶
-
功能
启动timer(计时单位us)
-
语法
int drv_timer_start_us(drv_timer_handle handle, unsigned long long exp_time)
-
返回值
返回值 描述 0 成功 非0 失败
2.3.4. drv_timer_start¶
-
功能
启动timer(计时单位ms)
-
语法
int drv_timer_start(drv_timer_handle handle, unsigned long long exp_time)
-
返回值
返回值 描述 0 成功 非0 失败
2.3.5. drv_timer_stop¶
-
功能
停止timer
-
语法
int drv_timer_stop(drv_timer_handle handle)
-
返回值
返回值 描述 0 成功 非0 失败
2.3.6. drv_timer_get_current¶
-
功能
获取当前timer的时间(单位ms)
-
语法
int drv_timer_get_current(drv_timer_handle handle, unsigned long long *ptime)
-
返回值
返回值 描述 0 成功 非0 失败
2.3.7. drv_timer_device_count¶
-
功能
获取系统可用的timer设备总数
-
语法
int drv_timer_device_count(void)
-
返回值
返回值 描述 0 没有设备可用 非0 可用设备总数
2.3.8. drv_timer_find_idle¶
-
功能
获取空闲的设备编号
-
语法
int drv_timer_find_idle(void)
-
返回值
返回值 描述 0 没有设备可用 非0 空闲设备编号
2.4 使用示例¶
可参见Timer的测试demo:<RTOS>/proj/sc/driver/sysdriver/timer/drv/src/drv_timer_test.c
。
- drv_timer_find_idle
- drv_timer_register
- drv_timer_start[_us] & drv_timer_stop
- drv_timer_unregister