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驱动代码位于:<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

    1. drv_timer_find_idle
    2. drv_timer_register
    3. drv_timer_start[_us] & drv_timer_stop
    4. drv_timer_unregister