RISCV_TIMER使用参考
REVISION HISTORY¶
Revision No. | Description |
Date |
---|---|---|
1.0 | 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