【功能开发】DSP F2837x 检测中断所有函数运行一次的时间

要查看 DSP F28377 的 CPU 在 50 微秒一次的中断内所有程序运行完总共占用了中断多长时间,可以采用硬件定时器测量和软件计时两种常见方法。

方法一:使用硬件定时器测量

原理

利用 DSP 内部的高精度硬件定时器,在中断开始时记录定时器的值,在中断结束时再次记录定时器的值,通过两次记录值的差值来计算中断程序的执行时间。

步骤

1.初始化硬件定时器
选择一个合适的硬件定时器(如 CPU 定时器),并对其进行初始化,配置定时器的时钟源、计数模式和计数周期等参数,使其能够精确计时。

#include "F28x_Project.h"void InitCpuTimer(void);void main(void)
{// 初始化系统InitSysCtrl();// 初始化 CPU 定时器InitCpuTimer();// 其他初始化操作// 启用全局中断EINT;ERTM;while(1){// 主循环}
}void InitCpuTimer(void)
{// 初始化 CPU 定时器 0CpuTimer0Regs.TCR.all = 0x00000000;CpuTimer0Regs.PRD.all = 0xFFFFFFFF;CpuTimer0Regs.TPR.all = 0;CpuTimer0Regs.TPRH.all = 0;CpuTimer0Regs.TCR.bit.TSS = 1; // 停止定时器CpuTimer0Regs.TCR.bit.TRB = 1; // 重载定时器
}

2.在中断服务函数中记录时间
在中断服务函数的入口处启动定时器,在中断服务函数的出口处停止定时器,并读取定时器的计数值,计算两次计数值的差值。

__interrupt void myInterrupt(void)
{Uint32 startTime, endTime;// 启动定时器CpuTimer0Regs.TCR.bit.TSS = 0;// 记录开始时间startTime = CpuTimer0Regs.TIM.all;// 中断服务程序代码// ...// 记录结束时间endTime = CpuTimer0Regs.TIM.all;// 停止定时器CpuTimer0Regs.TCR.bit.TSS = 1;// 计算中断执行时间Uint32 executionTime = startTime - endTime;// 处理执行时间,例如打印输出// ...// 清除中断标志PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}

3.换算时间
根据定时器的时钟频率,将计数值的差值换算成实际的时间(微秒)。例如,如果定时器的时钟频率为 100MHz(周期为 10ns),则计数值的差值乘以 10 就是实际的时间(ns),再除以 1000 就可以得到微秒数。

方法二:软件计时

原理

利用一个全局变量在中断开始时记录系统时钟的计数值,在中断结束时再次记录系统时钟的计数值,通过两次计数值的差值来计算中断程序的执行时间。

步骤

1.定义全局变量
在全局作用域定义一个用于记录系统时钟计数值的变量。

#include "F28x_Project.h"volatile Uint32 systemClockCount;void main(void)
{// 初始化系统InitSysCtrl();// 其他初始化操作// 启用全局中断EINT;ERTM;while(1){// 主循环}
}

2.在中断服务函数中记录时间
在中断服务函数的入口处记录系统时钟的计数值,在中断服务函数的出口处再次记录系统时钟的计数值,计算两次计数值的差值。

 

__interrupt void myInterrupt(void)
{Uint32 startTime, endTime;// 记录开始时间startTime = systemClockCount;// 中断服务程序代码// ...// 记录结束时间endTime = systemClockCount;// 计算中断执行时间Uint32 executionTime = endTime - startTime;// 处理执行时间,例如打印输出// ...// 清除中断标志PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}

3.更新系统时钟计数值
在一个定时中断(如 CPU 定时器中断)中更新系统时钟计数值。

 

__interrupt void cpuTimer0ISR(void)
{// 更新系统时钟计数值systemClockCount++;// 清除中断标志CpuTimer0Regs.TCR.bit.TIF = 1;PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}

4.换算时间
根据定时中断的周期,将计数值的差值换算成实际的时间(微秒)。例如,如果定时中断的周期为 1 微秒,则计数值的差值就是实际的时间(微秒)。

通过以上两种方法,可以准确地测量中断内所有程序运行完总共占用的时间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/74224.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MAC环境给docker换源

2025-03-28 MAC环境给docker换源 在官网下载docker ,dmg 文件 参考: https://blog.csdn.net/qq_73162098/article/details/145014490 {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},&q…

Vulnhub-zico2靶机打靶记录

本篇文章旨在为网络安全渗透测试靶机教学。通过阅读本文,读者将能够对渗透Vulnhub系列zico2靶机有一定的了解 一、信息收集阶段 靶机下载地址:https://download.vulnhub.com/zico/zico2.ova 因为靶机为本地部署虚拟机网段,查看dhcp地址池设…

【LeetCode 热题100】347:前 K 个高频元素(详细解析)(Go语言版)

🚀 力扣热题 347:前 K 个高频元素(详细解析) 📌 题目描述 力扣 347. 前 K 个高频元素 给你一个整数数组 nums 和一个整数 k,请你返回其中出现频率 前 k 高的元素。你可以按 任意顺序 返回答案。 &#x1f…

Java 大视界 -- Java 大数据机器学习模型在金融衍生品定价中的创新方法与实践(166)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

深度学习入门:从神经网络基础到简单实现

深度学习作为人工智能领域最令人兴奋的技术之一,已经在图像识别、自然语言处理、语音识别等多个领域取得了突破性进展。本文将深入浅出地介绍深度学习的基本概念,并通过Python代码实现一个简单的神经网络模型,帮助读者建立直观理解并迈出实践第一步。 神经网络的基本原理 …

第2.6节 iOS生成全量和增量报告

2.6.1 简介 在采集了覆盖率数据后,就需要生成对应需求的全量和增量覆盖率报告,以便对测试进行查漏补缺。IOS系统有两种开发语言,所以生成报告的方式也不相同,下面就分别介绍一下Object C和Swift语言如何生成覆盖率报告。 2.6.2 O…

STM32技能综合巩固

一、深入理解ARMCPU架构及其指令格式、ARM汇编语言编程方法 1.汇编语言编程,实现LED灯 新建keil项目,选择芯片 选择运行环境以及配置 添加.s文件 汇编程序: AREAMYDATA,DATA AREAMYCODE,CODE ENTRY EXPORT__main __main MOVR0,#10 M…

P2Rank网页端:预测蛋白结合口袋+vina分子对接

P2Rank 是一种基于机器学习的蛋白质口袋预测工具,用于识别蛋白质结构中的潜在配体结合位点。它采用了一种基于物理特征的打分方法,结合随机森林(Random Forest)机器学习模型,以提高口袋预测的精确度。 该程序有在线工具…

安装windows server 2016没有可选硬盘,设备安装过ubuntu系统

如果在安装 Windows Server 2016 时无法识别已安装过 Ubuntu 的硬盘,可能是由于硬盘分区格式(如 ext4)与 Windows 不兼容,或缺少必要的驱动程序。以下是详细的解决方案: 1. 检查 BIOS/UEFI 设置 确认硬盘模式 • 重启电…

Debian系统_主板四个网口1个配置为WAN,3个配置为LAN

Debian系统_主板四个网口1个配置为WAN,3个配置为LAN 一、重新配置网口 1、查看当前网口的状态 ifconfig 或者 ip link show 或者 ls /sys/class/net 2、修改网络配置文件 sudo vi /etc/network/interfaces 注意WAN口的网关地址如果是192.168.3.1的话,L…

springboot整合Thymeleaf web开发出现Whitelabel Error Page

背景 在做java端上应用开发的时候,从资源和部署操作成本两方面考虑,一般会将前端的静态资源直接与后端应用一起打包,通过springboot内嵌的Tomcat提供web服务。进入web首页登录一直到后续业务流程正向操作,页面都能正常加载静态资…

JavaScript元素尺寸与位置

目录 client 家族与 offset 家族 一、client 家族:内容区域 内边距 示例代码 应用场景 二、offset 家族:内容区域 内边距 边框 滚动条 示例代码 应用场景 三、综合应用场景 1. 动态调整元素高度 2. 拖拽元素 3. 判断元素是否在视口内 四…

GZ073网络系统管理赛项赛题第1套模块A:网络构建解题笔记

2. 设备 接口或VLAN VLAN名称 二层或三层规划 说明 S1 VLAN10 CAIWU Gi0/1至Gi0/4 财务部 VLAN20 XIAOSHOU Gi0/5至Gi0/8 销售部 VLAN30 YANFA Gi0/9至Gi0/12 研发部 VLAN40 SHICHANG Gi0/13至Gi0/16 市场部 VLAN50 AP Gi0/20至Gi0/21 无线AP管理 VL…

jmeter web压力测试 压测

下载地址 Apache JMeter - Download Apache JMeter 1. 设置线程组 2. 设置http请求头 3. 设置http请求体 4. 设置结果条目 常用函数 ${__RandomString(8, abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789)}${__javaScript( ${__Random(1000, 10000)} /…

大语言模型(LLM)应用开篇 | RAG方法论概述 | 构建知识库探索

大型语言模型应用开篇 | RAG技术 | 构建知识库探索 1、大语言模型(LLM)应用开篇2、RAG技术2.1 基于RAG实现知识库问答系统的基本步骤2.2 RAG与其他技术的关系与区别 1、大语言模型(LLM)应用开篇 现在是2025年,DeepSeek…

fbx bip互转 测试OK

目录 fbx bip互转 3dmax插件fbx转bip: 测试可以转: MotionBuilder fbx转bip fbx bip互转 3dmax插件fbx转bip: 测试可以转: 不用插件!!无脑把Mxiamo转bip骨骼动画 - CG软件插件脚本交流 - Powered by Discuz!

8个实用销售工具

CRM系统(客户关系管理系统) 特点:能集中管理客户信息,如联系方式、交易记录、偏好等,还可对销售流程进行自动化管理。 用途:帮助销售团队跟踪客户,分析客户行为,预测销售趋势&am…

【家政平台开发(6)】筑牢家政平台安全防线:全方位隐私与安全需求解析

本【家政平台开发】专栏聚焦家政平台从 0 到 1 的全流程打造。从前期需求分析,剖析家政行业现状、挖掘用户需求与梳理功能要点,到系统设计阶段的架构选型、数据库构建,再到开发阶段各模块逐一实现。涵盖移动与 PC 端设计、接口开发及性能优化…

IP 地址规划中的子网划分:/18 网络容纳 64 个 C 段(/24)的原理与应用解析

整体表格说明 这是某市教育城域网中某县教育相关机构的IP地址规划表,明确了某县一中和某县教育局的IP地址范围,包括终端使用地址段、业务互访地址段。 概念解析 64个C段终端及互联地址 C段地址:一个C段是IP地址中的一个/24网络(…

python生成并绘制各种类型声音噪声

python生成并绘制各种类型声音噪声 1、效果 白噪声: 工业设备振动噪声: 2、噪声类型 主要噪声类型有: 白噪声:全频段能量均匀分布 直接生成高斯分布随机数粉红噪声:能量随频率增加按1/f衰减(适合声学测试) 使用IIR滤波器对白噪声进行滤波处理布朗噪声:能量随频率增加…