RISCV_TIMER使用参考 In 世界杯澳大利亚 @2026-10-06 17:16:27

RISCV_TIMER使用参考

REVISION HISTORY¶

Revision No.

Description

Date

1.0

Initial release

04/18/2023

1. 概述¶

‌定时器(Timer)‌是一种在计算机和微控制器系统中用于测量时间间隔或产生精确定时事件的硬件模块。定时器的基本工作原理是通过一个时钟源驱动计数器,当计数器达到预设值时,产生一个事件,通常是通过中断来通知处理器。

2. 关键字说明¶

PM-timer

由PM-domain供电的timer。

NonPMtimer

由NonPM domain供电的timer。

OneShoot mode

Timer的一种工作模式,timer到达时间后值触发中断。

RunLoop mode

Timer的一种工作模式,timer触发后将重置计数核循环触发。

3. 功能描述¶

无论是PM-timer还是NonPMtimer,定时器的使用有这相同的步骤,从开发角度来看,有五个环节

注册定时器

开启定时器

系统执行定时器的中断函数和调用定时器的处理函数

关闭定时

注销定时器

除此之外,使用timer的时候还需要考虑到以下一些因素:

硬件数量

PM-timer 8个

NonPM-timer 4个

CLK 介绍

PM-timer0 ~ PM-timer3 和 NonPM-timer 采用同一个时钟,默认频率12MHz, PM-timer4 ~ PM-timer7各自采用不同的时钟。

PM-timer0 ~ PM-timer3 各自使用不同的硬件中断号,PM-timer4 ~ PM-timer7 采用同一个硬件中断号。

Limitation 介绍

软件限制:riscv侧和arm侧不能同时使用同一个timer,会导致中断混乱。

工作模式介绍

Timer 有两种工作模式,一种是oneshoot 模式,另一种是 RunLoop 模式。

4. 硬件连接介绍¶

SOC内置

5. RTOS用法介绍¶

5.1. DRIVER PATH¶

sc/driver/sysdriver/timer/drv/pub/drv_pm_timer.h

sc/driver/sysdriver/timer/drv/pub/drv_timer_api.h

sc/driver/sysdriver/timer/drv/pub/drv_timer.h

sc/driver/sysdriver/timer/drv/src/abi_headers_timer.c

sc/driver/sysdriver/timer/drv/src/drv_pm_timer.c

sc/driver/sysdriver/timer/drv/src/drv_timer.c

sc/driver/sysdriver/timer/drv/src/drv_timer_test.c

5.2. CONFIG配置¶

无需配置。

5.3. SYSDESC配置¶

无需配置。

5.4. Padmux配置¶

无需配置。

5.5. Sample code¶

static void timer_isr(void)

{

CamOsPrintf("I am timer%d!\n", timer.timer_id);

}

int timer_teset(void)

{

drv_timer_id timer_id = 1;

u32 time = 20000;

drv_timer_register_isr(timer_id, timer_isr);

drv_timer_start(timer_id, time);

CamOsMsSleep(20000);

drv_timer_stop(timer_id);

drv_timer_release_isr(timer_id)

}

5.6. UT case¶

1)打开timer测试demo宏定义__VER_TIMER__

2)测试demo路径:sc/driver/sysdriver/timer/drv/src/drv_timer_test.c

3)执行测试

SS-RTOS # timer

Plz key in : timer [timerID] [time]

[timerID] 1 - timer1

2 - timer2

3 - timer3

4 - timer4

5 - timer5

6 - timer4

7 - timer5

[time] timing time(ms)

timer [timerId] [time]

Example:

# timer 1 1000 /*开启 timer 1, 每个1000ms 上报一次中断,上报10次*/

6. API参考¶

该功能模块提供以下接口:

API名称

功能

drv_timer_register_isr

注册timer对应的中断函数

drv_timer_release_isr

释放timer绑定的中断函数

drv_timer_disable_intr

关闭timer绑定的中断函数

drv_timer_enable_intr

使能timer绑定的中断函数

drv_timer_clear_intr

清除timer的中断

drv_timer_get_intr_status

获取timer的中断状态

drv_timer_stop

停止timer

drv_timer_start

启动timer,时间单位ms

drv_timer_start_us

启动timer,时间单位us

drv_timer_get_timeout_length

获取Timer过期时间对应的计数值

drv_timer_get_count

获取timer启动到现在timer计数器上的值

drv_timer_get_kickoff_time_us

获取timer启动到现在过去了多少时间,时间单位us

6.1. drv_timer_register_isr¶

功能

注册timer的中断函数

语法

static inline void drv_timer_register_isr(drv_timer_id timer_id, timer_isr_t isr)

参数

参数名称

描述

timer_id

timer编号

isr

Timer产生中断的时候会调用该函数

返回值

返回值

描述

NA

NA

6.2. drv_timer_release_isr¶

功能

释放timer绑定的中断函数

语法

static inline void drv_timer_release_isr(drv_timer_id timer_id)

参数

参数名称

描述

timer_id

timer编号

返回值

返回值

描述

NA

NA

6.3. drv_timer_disable_intr¶

功能

关闭timer绑定的中断函数

语法

static inline void drv_timer_disable_intr(drv_timer_id timer_id)

参数

参数名称

描述

timer_id

timer编号

返回值

返回值

描述

NA

NA

6.4. drv_timer_enable_intr¶

功能

使能timer绑定的中断函数

语法

static inline void drv_timer_enable_intr(drv_timer_id timer_id)

参数

参数名称

描述

timer_id

timer编号

返回值

返回值

描述

NA

NA

6.5. drv_timer_clear_intr¶

功能

清除timer的中断

语法

static inline void drv_timer_clear_intr(drv_timer_id timer_id)

参数

参数名称

描述

timer_id

timer编号

返回值

返回值

描述

NA

NA

6.6. drv_timer_get_intr_status¶

功能

获取timer的中断状态

语法

static inline u32 drv_timer_get_intr_status(drv_timer_id timer_id)

参数

参数名称

描述

timer_id

timer编号

返回值

返回值

描述

NA

NA

6.7. drv_timer_stop¶

功能

停止timer

语法

static inline void drv_timer_stop(drv_timer_id timer_id)

参数

参数名称

描述

timer_id

timer编号

返回值

返回值

描述

NA

NA

6.8. drv_timer_start¶

功能

开启timer(timer的过期时间最小单位为1ms)

语法

static inline void drv_timer_start(drv_timer_id timer_id, u32 expect_time)

参数

参数名称

描述

timer_id

timer编号

expect_time

Timer过期时间(ms)

返回值

返回值

描述

NA

NA

6.9. drv_timer_start_us¶

功能

开启timer(timer的过期时间最小单位为1us)

语法

static inline void drv_timer_start_us(drv_timer_id timer_id, u32 expect_time)

参数

参数名称

描述

timer_id

timer编号

expect_time

Timer过期时间(us)

返回值

返回值

描述

NA

NA

6.10. drv_timer_get_timeout_length¶

功能

获取Timer过期时间对应的计数值。

语法

static inline u32 drv_timer_get_timeout_length(drv_timer_id timer_id)

参数

参数名称

描述

timer_id

timer编号

返回值

返回值

描述

NA

NA

6.11. drv_timer_get_count¶

功能

获取timer启动到现在timer计数器上的值

语法

static inline u32 drv_timer_get_count(drv_timer_id timer_id)

参数

参数名称

描述

timer_id

timer编号

返回值

返回值

描述

u32

获取timer启动到现在timer计数器上的值

6.12. drv_timer_get_kickoff_time_us¶

功能

获取timer启动到现在过去了多少时间,最小测量单位us

语法

static inline u32 drv_timer_get_kickoff_time_us(drv_timer_id timer_id)

参数

参数名称

描述

timer_id

timer编号

返回值

返回值

描述

u32

timer启动到现在过去了多少时间,最小测量单位us

欣字的五行属什么
煎荷包蛋的两点经验