This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC1314R10:dwt_CYCCNT 在调试器会话期间似乎只起作用

Guru**** 2482105 points
Other Parts Discussed in Thread: CC1312R7

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1269443/cc1314r10-dwt_cyccnt-only-seems-to-function-during-a-debugger-session

器件型号:CC1314R10
主题中讨论的其他器件:CC1312R7

这是该主题的后续操作: https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1254569/cc1314r10-are-there-any-limitations-to-using-arm-dwt_cyccnt-for-implementing-delays-or-measuring-cycle-counts-in-source-code

以下用于提供延迟的代码行均为 在使用连接到电路板的 jlink 调试器进行实时调试和不进行实时调试的情况下、CC1312可以正常工作

 

  /* Enable DWT */

   HWREG( CPU_DCB_BASE + CPU_DCB_O_DEMCR) |= CPU_DCB_DEMCR_TRCENA;

   /* Enable CPU cycle counter */

   HWREG( CPU_DWT_BASE + CPU_DWT_O_CTRL) |= CPU_DWT_CTRL_CYCCNTENA;

   /* Reset CPU cycle counter */

   HWREG( CPU_DWT_BASE + CPU_DWT_O_CYCCNT) = 0;

//Wait for delay

   while(HWREG( CPU_DWT_BASE + CPU_DWT_O_CYCCNT) < delay);

 

但是对于 CC1314

  • 这些线是 工作正常 使用 jlink 调试器进行实时调试
  • 停留在 while (HWREG (CPU_DWT_BASE + CPU_DWT_O_CYCCNT)< DELAY);  when 调试器未连接

看起来周期计数不会递增。

 

`              在进一步分析之后、我从 ARM 文档表 M33中了解到需要配置 DWT 访问寄存器 DWT_LAR。 因此、我实现了以下陈述 访问 DWT 之前

#define CPU_DWT_O_LAR                                            0x00000FB0

HWREG (CPU_DWT_BASE + CPU_DWT_O_LAR)= 0xC5ACCE55;

 

但即使在实施后、 在未连接调试器的情况下卡在 while 循环 引脚。  虽然使用 jlink 实时调试、但它仍能正常工作。

 

我还注意到 DWT 访问启用寄存器未在 SDK 头文件中实现 hw_cpu_dwt.h 。 但在 IAR IDE 寄存器视图中可找到、如下所示。

 

那么、请告诉我如何在 CC1314上实现 DWT 周期计数访问?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ruben:

    他们发布的代码片段的上下文是什么? 他们是否针对读/写采取了任何预防措施、例如 SWI 和 HWI 禁用?  

    当他们说" 在未连接调试器的情况下代码滞留在 while 循环 "时、您能要求他们 更具体一点吗? 是否可以在发生这种情况后将调试器连接到目标、从而发现器件在代码中被卡住了? (我猜它是硬故障/CPU 异常?)

    谢谢、

    玛丽

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是一个隔离测试、不运行其他任何器件。 当 CC1314未处于 JTAG 调试会话中时、周期计数器似乎为时钟选通或停止。 在 CC1312R7上执行完全相同的测试、即使不在调试会话中、周期计数器也会继续在该 IC 上运行。 请检查 CC1314上是否有某些配置位来更改此行为。 例如、 其他 IP 具有 用于在调试期间更改外设行为的寄存器位和逻辑(自由/软)。 通过这种方式、可将定时器配置为在 CPU 在断点处停止时停止计数。 本文中描述的行为类似、但与此相反。    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ruben:

    如果您发布了您使用的特定地址和值、我可以为您进行检查。

    在没有连接调试器的情况下运行时、您需要解决的电源域是否未通电? (调试器将保持某些电源域开启)。 这是我想知道为何它应该与连接的调试器一起工作、而不是在未连接的情况下工作的唯一原因。 此外、CC1312和 CC1314之间具有一些电源域更改。

    谢谢、

    M·H

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Marie。 可以在 SDK 中以下路径的文件中找到地址: C:\ti\simplelink_cc13xx_cc26xx_sdk_7_10_00_98\source\ti\devices\cc13x4_cc26x4\inc

    例如、CPU_DWT_base 在 hw_memmap.h 中定义、CPU_DWT_O_CTRL 和 CPU_DWT_CTRL_CYCCNTENA 在 hw_cpu_dwt.h 中定义。

    是的、我理解您有关 CC1312和1314之间的电源域差异可能是导致观察到不同行为的原因的理论。 您能否尝试确认这一点或确定是否有方法在 CC1314上实现相同的行为?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ruben:

    我可以复制客户看到的内容。 使用他们的代码示例、当我连接了调试器时、程序运行正常、但当我断开调试会话并重新启动器件时、出现了挂起的情况。 (我的版本中有一个闪烁的 LED、它停止闪烁。)

    下一步是尝试在 RND 团队的帮助下调试正在发生的事情。

    谢谢、

    玛丽

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您发送编修。 请将您的发现发布给我。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ruben:

    我目前正在调查是否正确设置了 CPU_DCB.DAUTHCTRL 寄存器。 至少、 SPIDENSEL 和 INTSPIDEN 需要设置为1 (该设置应在相应的 CCFG 寄存器置1时自动发生。 我们的 SDK 示例中默认提供这些选项。)

    很遗憾、  调试器无法读取 DAUTHCTRL。

    我将编写一些测试代码、以通过 UART 写入值、并在明天向您更新。

    谢谢、

    M·H

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Ruben:

    我们发现在未连接调试器的情况下无法启动 DWT。

    谢谢、

    M·H