简介:
RISC-V 的 mtimer 依赖以下两个主要寄存器,该寄存器在操作系统的适配上可以用作systick 时钟来使用,以下是寄存器功能的描述。
mtime(Machine Timer Counter):
** 一个 64 位的计时器寄存器,存储系统的当前时间戳。
** mtime 会以固定频率递增,频率由硬件的时钟源(例如 RTC)决定。
** 程序可以读取该寄存器以获取当前时间。
mtimecmp(Machine Timer Compare Register):
** 一个 64 位的比较寄存器,决定计时器中断触发的时间点。
**当 mtime 的值达到 mtimecmp 的值时,mtimer 会触发机器模式的计时器中断
以下是GD32VF103 芯片的信息描述

GD32VF103 芯片中对mtimer 的描述如下:


从上述描述可以看出寄存器的使用非常简单只要只配mtime 和 mtimecmp 寄存器的值就可以周期的产生中断。
在GD32VF103芯片中 mtimer 是作为7号中断交由ECLIC进行管理的。



FreeRtos 中的Mtimer 初始化处理。
查看文档mtime 的时钟源为内核时钟的四分频

以下代码的宏定义也是按照四分频的规则来定义MTIMER 时钟频率

mtime 相关寄存器,mtime 在risc-v 架构中定义了该CSR寄存器,但是在GD32FV103芯片并没有定义地址需要芯片设计在设计时指定,对应地址为N/A

GD32VF103 设计时对应地址为0xd1000000

对应的寄存器offset 跟上述代码也是能够匹配

关闭定时器可以使用该寄存器进行处理默认为开启状态

以下代码是Freertos 中初始化mtimer 代码

该段代码会配置mtimer 的周期为500HZ(2ms)为及配置TIM中断为vector 模式及中断优先级为最低。

在mtimer 中断中会更新mcmp 的值来周期的触发定时器中断。

在中断触发中添加测试代码,翻转GPIO 来确认周期是否为期待的2ms


使用示波器查看PA1引脚的的翻转频率如下。
测试结果跟预期的一致为2ms,mtimer 已经按照我么预期的方式工作运行作为系统的时间片调度的timebase
我要赚赏金
