Timer使用参考
REVISION HISTORY¶
Revision No. | Description |
Date |
---|---|---|
1.0 | 07/12/2024 |
1. 概述¶
Timer(又称Hardware Timer)提供单次计时或周期计时的功能,它由硬件驱动并在超时时通过中断通知CPU,一般软件上用于实现周期性地异步执行某些任务的需求。
2. Linux用法介绍¶
2.1 DRIVER PATH¶
Timer驱动代码位于:<Kernel>/drivers/sstar/timer
2.2 CONFIG配置¶
Kconfig配置:
Device Drivers ---> [*] Sstar SoC platform drivers ---> <*> Sigmastar Timer Driver
DTS配置:
timer0: timer0@0x1F006040 { compatible = "sstar,timer"; clocks = <&CLK_mcu_pm_p>; reg = <0x1F006040 0x40>; interrupts = <GIC_SPI INT_FIQ_TIMER IRQ_TYPE_LEVEL_HIGH>; status = "okay"; };
2.3 API说明¶
Timer的API声明在:<Kernel>/drivers/sstar/include/drv_timer.h
,其中:
enum sstar_timer_mode { SSTAR_TIMER_MODE_ONESHOT, SSTAR_TIMER_MODE_RUNLOOP, };
sstar_timer_mode用于表示希望timer工作在什么模式,用于sstar_timer_register
:
SSTAR_TIMER_MODE_ONESHOT
表示timer只计时一次,记满后会触发一次中断然后停止SSTAR_TIMER_MODE_RUNLOOP
表示timer周期计时,记满后会触发中断然后再重新计时
2.3.1. sstar_timer_register¶
-
功能
注册timer设备
-
语法
sstar_timer_handle sstar_timer_register(unsigned int timer_id, enum sstar_timer_mode mode, star_timer_callback callback, void *pdata)
-
返回值
返回值 描述 非NULL 该指针是后续使用其他API的凭据(handle参数) NULL 失败
2.3.2. sstar_timer_unregister¶
-
功能
释放timer设备
-
语法
int sstar_timer_unregister(sstar_timer_handle handle)
-
返回值
返回值 描述 0 成功 非0 失败
2.3.3. sstar_timer_start¶
-
功能
启动timer(计时单位ms)
-
语法
int sstar_timer_start(sstar_timer_handle handle, unsigned long long exp_time)
-
返回值
返回值 描述 0 成功 非0 失败
2.3.4. sstar_timer_stop¶
-
功能
停止timer
-
语法
int sstar_timer_stop(sstar_timer_handle handle)
-
返回值
返回值 描述 0 成功 非0 失败
2.3.5. sstar_timer_get_current¶
-
功能
获取当前timer的时间(单位ms)
-
语法
int sstar_timer_get_current(sstar_timer_handle handle, unsigned long long *ptime)
-
返回值
返回值 描述 0 成功 非0 失败
2.3.6. sstar_timer_device_count¶
-
功能
获取系统可用的timer设备总数
-
语法
int sstar_timer_device_count(void)
-
返回值
返回值 描述 0 没有设备可用 非0 可用设备总数
2.3.7. sstar_timer_find_idle¶
-
功能
获取空闲的设备编号
-
语法
int sstar_timer_find_idle(void)
-
返回值
返回值 描述 0 没有设备可用 非0 空闲设备编号
2.4 使用示例¶
可参见Timer的测试demo:<Kernel>/drivers/sstar/timer/ut/timer_ut.c
。
- sstar_timer_find_idle
- sstar_timer_register
- sstar_timer_start & sstar_timer_stop
- sstar_timer_unregister