简介:
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