硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2789|回复: 18
收起左侧

[功能实战] 意外发现Cortex-M内核带64bit时间戳,比32bit的DWT时钟周期计数器更方便,再也不用担心溢出问题了

  [复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
发表于 2023-8-22 05:10:24 | 显示全部楼层 |阅读模式
视频:

https://www.bilibili.com/video/BV1Bw411D7F5



介绍:
看参数手册的Debug章节,System ROM Table里面带Timestamp  generator的都是支持的,不带的不支持。当前测试H743/H750等系列是带的。与DWT时钟计数器一样,可以调试使用也可以正常程序运行使用。

QQ截图20230822044629.png

QQ截图20230822044813.png

C程序里面DWT和64bit时间戳TSG比较测试,测量结果基本一致:

QQ截图20230822045035.png

并且使用LUA小程序也可以方便控制64bit时间戳TSG:

12.png

测试代码:
[Lua] 纯文本查看 复制代码
TSG_CNTCR = 0x5C005000  --bit0 用于使能
TSG_CNTFID0 = 0x5C005020  --主频设置
TSG_CNTCVL = 0x5C005008  --低32bit
TSG_CNTCVU = 0x5C00500C  -- 高32bit

pg_init()

re = pg_write32(TSG_CNTCR, 0x00000000)  if(re == 0) then print("1") end
re = pg_write32(TSG_CNTCVL, 0x00000000)if(re == 0) then print("2") end
re = pg_write32(TSG_CNTCVU, 0x00000000)if(re == 0) then print("3") end
re = pg_write32(TSG_CNTCR, 0x00000001)if(re == 0) then print("4") end
re = pg_write32(TSG_CNTFID0, 200000000)if(re == 0) then print("5") end

for i=0,500,1 do
   a = pg_read32(TSG_CNTCVL)
   b = pg_read32(TSG_CNTCVU)
   print(string.format("%d, %d", a, b))
   delayms(100)
end


参考资料:
1、工程下载:
链接:https://pan.baidu.com/s/1__NJXovPTmiE8WrkkzEqLA 提取码:3e96

2、H7-TOOL的LUA小程序教程第8期:SWD接口函数,读写各种类型数据,内存和寄存器等
https://www.armbbs.cn/forum.php?mod=viewthread&tid=118104


评分

参与人数 2金币 +20 收起 理由
失帧 + 10 很给力!
byccc + 10 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
 楼主| 发表于 2023-8-22 05:10:31 | 显示全部楼层
整理完毕。
回复

使用道具 举报

13

主题

187

回帖

226

积分

高级会员

积分
226
发表于 2023-8-22 07:12:26 来自手机 | 显示全部楼层
牛,注意休息
回复

使用道具 举报

21

主题

287

回帖

350

积分

高级会员

积分
350
发表于 2023-8-22 09:18:02 | 显示全部楼层
  我以前都是用的两个定时器级联的,有这个就省了好多资源
回复

使用道具 举报

13

主题

89

回帖

128

积分

初级会员

积分
128
发表于 2023-8-22 18:37:53 | 显示全部楼层
硬汉哥不用对DWT的寄存器进行解锁吗,再去初始化
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
 楼主| 发表于 2023-8-22 19:19:22 | 显示全部楼层
qq1646544 发表于 2023-8-22 18:37
硬汉哥不用对DWT的寄存器进行解锁吗,再去初始化

F4,F1,H7等系列没有这个问题,F7系列有这种问题。
回复

使用道具 举报

13

主题

89

回帖

128

积分

初级会员

积分
128
发表于 2023-8-22 19:37:13 | 显示全部楼层
主要是看了这篇经验案例也是H7的 DWT工作

Armv7-M架构的STM32如何启用DWT进行计数_v1.0.pdf

331.72 KB, 下载次数: 89

DWT

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
 楼主| 发表于 2023-8-22 19:59:32 | 显示全部楼层
qq1646544 发表于 2023-8-22 19:37
主要是看了这篇经验案例也是H7的 DWT工作

H7系列比较简单,做个下面的处理就行:

[C] 纯文本查看 复制代码
/*
*********************************************************************************************************
*	函 数 名: bsp_InitDWT
*	功能说明: 初始化DWT. 该函数被 bsp_Init() 调用。
*	形    参: 无
*	返 回 值: 无
*********************************************************************************************************
*/
void bsp_InitDWT(void)
{
	DEM_CR         |= (unsigned int)DEM_CR_TRCENA;   
	DWT_CYCCNT      = (unsigned int)0u;
	DWT_CR         |= (unsigned int)DWT_CR_CYCCNTENA;
}



回复

使用道具 举报

36

主题

2049

回帖

2157

积分

至尊会员

积分
2157
发表于 2023-8-23 09:00:28 | 显示全部楼层
tovinz 发表于 2023-8-22 09:18
我以前都是用的两个定时器级联的,有这个就省了好多资源

+1

我是用32bit定时器实现的,有了这个方便不少。
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

13

主题

89

回帖

128

积分

初级会员

积分
128
发表于 2023-8-23 10:37:27 | 显示全部楼层
eric2013 发表于 2023-8-22 19:59
H7系列比较简单,做个下面的处理就行:

[mw_shl_code=c,true]/*

好的感谢硬汉哥
回复

使用道具 举报

13

主题

89

回帖

128

积分

初级会员

积分
128
发表于 2023-8-23 14:40:41 | 显示全部楼层
H7x3的参考手册版本小于7的就不要看了,Debug的TSG地址不对,刚刚从ST官网下载了第8版本的H7x3的参考手册.
微信图片_20230823141436.png
回复

使用道具 举报

9

主题

166

回帖

193

积分

初级会员

积分
193
发表于 2023-8-25 17:27:56 | 显示全部楼层
实测 STM32H723/733 系列没有这个模块
回复

使用道具 举报

32

主题

296

回帖

392

积分

高级会员

积分
392
发表于 2024-3-5 09:22:42 | 显示全部楼层
请教一下F4有这个定时器吗,
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
 楼主| 发表于 2024-3-5 11:53:42 | 显示全部楼层
weiyuliang 发表于 2024-3-5 09:22
请教一下F4有这个定时器吗,

F4系列,之前查是没有,
回复

使用道具 举报

32

主题

296

回帖

392

积分

高级会员

积分
392
发表于 2024-3-5 14:47:38 | 显示全部楼层
eric2013 发表于 2024-3-5 11:53
F4系列,之前查是没有,

谢谢硬汉
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2024-8-16 15:43:26 | 显示全部楼层
感谢硬汉哥,有个问题想请教

手册RM0433 Rev 7的Figure 818显示TSG的时钟域是DAPCLK,3059页下面有解释DAPCLK:
The DAPCLK domain is enabled by the debugger using the CDBGPWRUPREQ bit in the debug port CTRL/STAT register. The clock must be enabled before the debugger can access any of the debug features on the device. It should be disabled at power up and when the debugger is disconnected, to avoid wasting energy.


可不可以这样理解,如果没有连接调试器,TSG就不能工作?
回复

使用道具 举报

42

主题

328

回帖

454

积分

高级会员

积分
454
发表于 2024-8-16 16:44:52 | 显示全部楼层
这个特性是只有ST产品才支持的吧,我查了一下SAME70系列MCU,没有提及该特性。
另外,最近在用RISC-V平台,默认支持64Bit时间戳特性的。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
 楼主| 发表于 2024-8-17 10:45:49 | 显示全部楼层
Miaow 发表于 2024-8-16 15:43
感谢硬汉哥,有个问题想请教

手册RM0433 Rev 7的Figure 818显示TSG的时钟域是DAPCLK,3059页下面有解释D ...

实际测试不带调试器没问题。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
 楼主| 发表于 2024-8-17 10:47:25 | 显示全部楼层
wanglehui_12 发表于 2024-8-16 16:44
这个特性是只有ST产品才支持的吧,我查了一下SAME70系列MCU,没有提及该特性。
另外,最近在用RISC-V平台 ...

带Timestamp  generator才行。

像RP2040也带了一个64it时钟。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-11-1 07:46 , Processed in 0.375166 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表