RISCV_TIMER使用参考


REVISION HISTORY

Revision No.
Description
Date
1.0
  • Initial release
  • 05/29/2023

    1. 概述

    hardware timer共有六个,计数频率是12M,所以精度是1/12 (us),每个timer有独立的配置register并可以产生独立的interrupt。

    2. TIMER API接口数据类型

    2.1. drv_timer_id

    • 说明

      表示API操作的目标timer id。

      注意: MCU这边不要使用DRV_TIMER_0,因为Linux那边启动过程中会使用DRV_TIMER_0

    • 定义

      typedef enum
      {
          DRV_TIMER_0 = 0,
          DRV_TIMER_1,
          DRV_TIMER_2,
          DRV_TIMER_3,
          DRV_TIMER_4,
          DRV_TIMER_5,
      } drv_timer_id;
      
    • 成员

      成员名称 描述
      DRV_TIMER_0 第0个timer
      DRV_TIMER_1 第1个timer
      DRV_TIMER_2 第2个timer
      DRV_TIMER_3 第3个timer
      DRV_TIMER_4 第4个timer
      DRV_TIMER_5 第5个timer

    2.2. timer_isr_t

    • 说明

      timer触发中断后调用的回调函数原型。

    • 定义

      typedef void (*timer_isr_t)(void);
      
    • 参数

    • 返回值

    3. TIMER API接口参考

    3.1. 注册中断回调函数

    • 说明

      注册对应timer的中断回调函数。

    • 定义

      void drv_timer_register_isr(drv_timer_id timer_id, timer_isr_t isr);
      
    • 参数

      参数名称 描述
      timer_id drv_time_id类型的id值,表示为哪个timer注册中断回调函数
      isr timer_isr_t类型的回调函数指针
    • 返回值

      返回值 描述
      void

    3.2. 撤销中断注册

    • 说明

      撤销对应timer的中断回调函数注册。

    • 定义

      void drv_timer_release_isr(drv_timer_id timer_id);
      
    • 参数

      参数名称 描述
      timer_id drv_time_id类型的id值,表示撤销哪个timer注册的中断回调函数
    • 返回值

      返回值 描述
      void

    3.3. 禁止中断

    • 说明

      禁止对应timer的中断产生。

    • 语法

      void drv_timer_disable_intr(drv_timer_id timer_id);
      
    • 参数

      参数名称 描述
      timer_id drv_time_id类型的id值,表示禁止哪个timer的中断产生
    • 返回值

      返回值 描述
      void

    3.4. 使能中断

    • 说明

      使能对应timer的中断产生。

    • 语法

      void drv_timer_enable_intr(drv_timer_id timer_id);
      
    • 参数

      参数名称 描述
      timer_id drv_time_id类型的id值,表示使能哪个timer的中断产生
    • 返回值

      返回值 描述
      void

    3.5. 清除中断触发标记

    • 说明

      清除对应timer的hit标记。

    • 语法

      void drv_timer_clear_intr(drv_timer_id timer_id);
      
    • 参数

      参数名称 描述
      timer_id drv_time_id类型的id值,表示清除哪个timer的hit标记
    • 返回值

      返回值 描述
      void

    3.6. 获取当前中断触发标记

    • 说明

      获取对应timer的hit标记。

    • 语法

      u32 drv_timer_get_intr_status(drv_timer_id timer_id);
      
    • 参数

      参数名称 描述
      timer_id drv_time_id类型的id值,表示获取哪个timer的hit标记
    • 返回值

      返回值 描述
      0 对应timer的中断还没有触发
      1 对应timer的中断已经触发

    3.7. 启动定时器

    • 说明

      启动对应计时器。

    • 语法

      void drv_timer_start(drv_timer_id timer_id, u32 u32MaxTick);
      
    • 参数

      参数名称 描述
      timer_id drv_time_id类型的id值,表示启动哪个timer
      u32MaxTick 计时ticks,表示多久触发一次interrupt(12M时钟下,一个tick表示1/12us)
    • 返回值

      返回值 描述
      void NULL

    3.8. 停止定时器

    • 说明

      停止对应定时器。

    • 语法

      void drv_timer_stop(drv_timer_id timer_id);
      
    • 参数

      参数名称 描述
      timer_id drv_time_id类型的id值,表示停止哪个timer
    • 返回值

      返回值 描述
      void NULL

    3.9. 获取当前计数值

    • 说明

      返回对应timer的当前计数值。

    • 语法

      u32 drv_timer_get_count(drv_timer_id timer_id);
      
    • 参数

      参数名称 描述
      timer_id drv_time_id类型的id值,表示获取哪个timer的当前计数值
    • 返回值

      返回值 描述
      u32 当前计数ticks

    4. TIMER API使用demo

    4.1. demo说明

    这个demo使用DRV_TIMER_3,配置成每秒调用一次timer_isr3()函数,并在10秒后,停止这个定时器。

    #include "sys_sys_isw_cli.h"
    #include "initcall.h"
    #include "ms_platform.h"
    #include "registers.h"
    #include "drv_timer.h"
    
    static void timer_isr3(void)
    {
        CamOsPrintf("I am timer3!\n");
    }
    
    void TimerAppMainEntry(void)
    {
        drv_timer_register_isr(DRV_TIMER_3, timer_isr3);
    
        drv_timer_start(DRV_TIMER_3, 12*1000*1000);
    
        CamOsMsSleep(10*1000);
    
        drv_timer_stop(DRV_TIMER_3);
    }
    
    rtos_application_initcall(TimerAppMainEntry, 0);TimerAppMainEntry, 0);
    

    5. 相关文件路径

    5.1. 头文件路径

    rtk\proj\sc\driver\sysdriver\timer\drv\pub\drv_timer.h