这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【换取手持数字示波器】GD32VF103使用FreeRtos中Mtimer使用

共1条 1/1 1 跳转至

【换取手持数字示波器】GD32VF103使用FreeRtos中Mtimer使用

工程师
2024-12-27 07:30:44     打赏

简介:

         RISC-V 的 mtimer 依赖以下两个主要寄存器,该寄存器在操作系统的适配上可以用作systick 时钟来使用,以下是寄存器功能的描述。

  1. mtime(Machine Timer Counter):

    ** 一个 64 位的计时器寄存器,存储系统的当前时间戳。

    ** mtime 会以固定频率递增,频率由硬件的时钟源(例如 RTC)决定。

    ** 程序可以读取该寄存器以获取当前时间。

  2. mtimecmp(Machine Timer Compare Register):

    ** 一个 64 位的比较寄存器,决定计时器中断触发的时间点。

    **当 mtime 的值达到 mtimecmp 的值时,mtimer 会触发机器模式的计时器中断

以下是GD32VF103 芯片的信息描述

image.png

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

image.png

image.png

从上述描述可以看出寄存器的使用非常简单只要只配mtime 和 mtimecmp 寄存器的值就可以周期的产生中断。

在GD32VF103芯片中 mtimer 是作为7号中断交由ECLIC进行管理的。

image.png

image.png

image.png

FreeRtos 中的Mtimer 初始化处理。 

查看文档mtime 的时钟源为内核时钟的四分频

image.png

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

image.png

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

image.png

GD32VF103 设计时对应地址为0xd1000000

image.png

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

image.png

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

image.png


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

image.png

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

image.png

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

image.png

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

image.pngimage.png

使用示波器查看PA1引脚的的翻转频率如下。

image.png测试结果跟预期的一致为2ms,mtimer 已经按照我么预期的方式工作运行作为系统的时间片调度的timebase




共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]