RTOS_TIMER使用参考


REVISION HISTORY

Revision No.
Description
Date
1.0 Initial release 01/29/2024

1. 概述

TIMER - 硬件定时器,其主要功能为计数,可以定时或周期性地触发中断,在中断处理函数中实现自定义的功能。


2. RTOS用法介绍

2.1 DRIVER PATH

sc/driver/sysdriver/timer/drv/src/drv_timer.c
sc/driver/sysdriver/timer/drv/pub/drv_timer_api.h
sc/driver/sysdriver/timer/hal/common/src/hal_timer.c
sc/driver/sysdriver/timer/hal/common/pub/hal_timer.h
sc/driver/sysdriver/timer/hal/common/pub/hal_reg_timer.h

2.2 CONFIG配置

#make menuconfig

BSP Driver Options --->
    [*] Support PM timer driver

2.3 API说明

头文件位于sc/driver/sysdriver/timer/drv/pub/drv_timer_api.h

2.3.1. 回调函数

  • 功能

    中断回调函数

  • 语法

    typedef void (*PfnTimerIntcISR)(void);
    

2.3.2. DrvTimerOstickStop

  • 功能

    用于停止定时器

  • 语法

    void DrvTimerOstickStop(void);
    

2.3.3. DrvTimerOstickRun

  • 功能

    用于启动定时器

  • 语法

    void DrvTimerOstickRun(u32 tick);
    
  • 参数

    参数名称 描述
    tick 定时器超时时钟数(12MHz)

2.3.4. DrvTimerOstickGetCount

  • 功能

    用于获取定时器时钟数

  • 语法

    u32 DrvTimerOstickGetCount(void)
    
  • 返回值

    返回值 描述
    返回时钟数 返回时钟数

2.3.5. DrvTimerOstickIntClear

  • 功能

    用于清除定时器中断

  • 语法

    void DrvTimerOstickIntClear(void)
    

2.3.6. DrvTimerOstickIntFlag

  • 功能

    用于获取定时器中断标志位

  • 语法

    u32 DrvTimerOstickIntFlag(void)
    
  • 返回值

    返回值 描述
    0 中断未触发
    1 中断已经触发

2.3.7. DrvTimerOsTickIsrReg

  • 功能

    用于注册定时器中断处理函数

  • 语法

    void DrvTimerOsTickIsrReg(PfnTimerIntcISR pfnOstickTimerISR)
    
  • 参数

    参数名称 描述
    pfnOstickTimerISR 定时器中断处理函数

2.3.8. DrvTimerOsTickIsrRel

  • 功能

    用于注销定时器中断

  • 语法

    void DrvTimerOsTickIsrRel(void)
    

2.3.9. DrvTimerGlobalTimerGet64BitTick

  • 功能

    用于获取64位的时钟数

  • 语法

    u64 DrvTimerGlobalTimerGet64BitTick(void)
    
  • 返回值

    结果 描述
    返回时钟数 返回时钟数

2.4 DEMO

定时器使用范例如下:

/*
 * 定义回调函数
 */
static void timer_isr_handle(void)
{
    if (DrvTimerOstickIntFlag())
    {
        DrvTimerOstickIntClear();
        /*
         * 增加业务逻辑
         */
        // do something
    }
}

DrvTimerOsTickIsrReg(timer_isr_handle);
DrvTimerOstickRun(10*12000); // 10ms