Timer使用参考


REVISION HISTORY

Revision No.
Description
Date
1.0
  • Initial release
  • 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

    1. sstar_timer_find_idle
    2. sstar_timer_register
    3. sstar_timer_start & sstar_timer_stop
    4. sstar_timer_unregister