DSP_TMS320F28377D_使用定时器实现<获取代码块运算时间>的功能

目录

前言

正文

运行结果


前言

给大家拜个晚年,此博客是2023年的第一篇博客,希望在2023年我与各位大佬共同进步。以前在STM32上实现过相关的功能,链接如下:

STM32_使用定时器实现<获取代码块运算时间>的功能_江湖上都叫我秋博的博客-CSDN博客_stm32中代码块运行时间

本次的实现类似,只不过平台换成了DSP TMS320F28377D。使用CCS->Run->Clock的方式比较麻烦,我个人是不喜欢的,还是用定时器靠谱点, 话不多说,直接上代码。

正文

runtime.h 代码如下

#ifndef PROGRAM_RUNTIME_RUNTIME_H_
#define PROGRAM_RUNTIME_RUNTIME_H_

#include <main.h>

extern float64 runtime;
void runtime_init(void);
void runtime_start(void);
void runtime_stop(void);

#endif /* PROGRAM_RUNTIME_RUNTIME_H_ */

runtime.c 代码如下

#include <runtime.h>

float64 runtime = 0;    // 单位us

void runtime_init(void){
    ConfigCpuTimer(&CpuTimer1, 200, 10000000);   // 支持代码块最长运行时常10s
}

void runtime_start(void){
    CpuTimer1Regs.TCR.bit.TRB = 1;  // 周期计时器重装载
    CpuTimer1Regs.TCR.bit.TSS = 0;  // 开始计数
}

void runtime_stop(void){
    runtime = (float64)(CpuTimer1Regs.PRD.all -  CpuTimer1Regs.TIM.all) * 0.005;    // 等价于 / 200, 单位us
    CpuTimer1Regs.TCR.bit.TSS = 1;  // 停止计数
}

main.c 代码如下

void main(void)
{

    // 省略 ...

    runtime_init();
    while(1){

        runtime_start();
        DELAY_US(1000);
        runtime_stop();
    }
}

注解1:代码中并未提及main.h以及项目的目录结构,关于头文件的引用及Include Options的配置就不赘述,本文更注重的是实现思路。 

注解2:这款DSP TMS320F28377D是一款主频200M,双核的芯片。 本文只用CPU1做了相关实现,CPU2的相关实现是一致的。

注解3DSP平台与STM32平台的不同之处是,STM32的计数器是向上计数的,而DSP平台的计数器是向下计数的。 一旦开始计数, 芯片会将周期寄存器的值装载到计数寄存器当中,每过一个计数周期,计数寄存器的值 - 1。因此在计算运行时长的时候是用定时器周期寄存器的值 - 当前计数寄存器的值,再乘以 * 0.005 (=  / 200),得到的运行时长单位为us。

运行结果

用DSP自带库里的延时函数进行测试,结果相差不大,证明该方法可用。另外,实验也说明该方法可在循环中不断的测试某代码块的运行时间。

重要意义:用本文提供的方法测试代码块的运行时间,可以实时运行时间数据通过通信接口传出的。在有上位机的应用当中,就可以实时显示某模块的运算时间的。

感谢您的阅读,欢迎留言讨论、收藏、点赞、分享。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江湖上都叫我秋博

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值