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.

[参考译文] MSPM0G1507:是否介绍了有关 MSPM0G1507的指令周期计数? 我可以使用 SysTick 在调试模式下检查指令周期计数、但这些指令与我从 ARM##39网站获得的信息不匹配。

Guru**** 2467970 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1455208/mspm0g1507-is-there-any-introductions-about-the-instructions-cycle-counts-of-mspm0g1507-i-check-the-instructions-cycle-counts-in-debug-mode-by-using-systick-but-they-can-not-match-with-the-information-i-get-from-arm-s-web-sit

器件型号:MSPM0G1507

工具与软件:

例如、我们可以看到 CPU 通过占用4个时钟周期来执行指令 MULS。 但来自 ARM 网站的信息表明它需要1或32个时钟周期。 请帮助 comfirm。

https://developer.arm.com/documentation/ddi0484/c/Programrs-Model/Instruction-set-summary

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

    尊敬的 Peter:

    您使用的 CPU 速率是多少? 我找到 ARM 文档、内容如下:

    我希望您将 CPU 速率设置为默认32MHz、然后闪存等待状态将为零。

    B.R.

    SAL

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

    尊敬的 Peter:

    这里有一件事需要正确。

    请将 CPU 运行速率设置为小于24MHz 以进入0等待状态。 也许您可以尝试使用16MHz 进行简单配置。

    B.R.

    SAL

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

    尊敬的 Peter:

    暂时没有听到您的反馈、我将暂时关闭该主题帖。

    如果您还有其他问题、请随时回复该主题。

    B.R.

    SAL

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

    尊敬的 Sal:

    很抱歉迟到了反馈。 我在 E2E 中文站点中跟踪了此问题、但是没有收到您的消息。 我使用的是80MHz CPU Rate。 所以对于每条指令、等待状态似乎需要2个 CPU 时钟周期、我对吗? 如果能、MULS 指令在理论上总共需要3个 CPU 时钟周期、但实际上需要4个 CPU 时钟周期。 我仍然对此感到困惑。 您能帮我弄清楚吗? 谢谢。

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

    尊敬的 Peter:

    因此、每条指令等待状态似乎需要2个 CPU 时钟周期、我是对吗?[/quot]

    正确。 它将再花2个 CPU 时钟来等待闪存。

    MULS 指令理论上总共需要3个 CPU 时钟周期、但实际上需要4个 CPU 时钟周期。

    首先、我们不对此进行基准测试、因此我无法判断该测试结果是否符合预期。 [我也认为 CPU 时钟=3更合理、但我不能保证这一点。]

    其次、我不确定是如何对其进行基准测试的、MSPM0器件确实具有闪存预取/缓存。 因此、您的测试可能不准确。

    我可以推荐她的测试方法:

    将 汇编代码设定到 SRAM 中、并在 SRAM 中运行来查看 CPU 时钟消耗是否为1。 当在 SRAM 中运行时、它应该为零等待状态。

    B.R.

    SAL

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

    尊敬的 Sal:

    不好说、我在 SRAM 中运行汇编代码、 但 MULS 指令仍需要4个时钟周期。

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

    尊敬的 Peter:

    这很 奇怪。

    让我下周做一些测试。

    B.R.

    SAL

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

    尊敬的 Sal:

    请提供任何更新?

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

    你好、 

    在调试启动和停止期间、调试器会向 M0+内核插入一些指令。

    这可能需要一些周期。

    即使调试某些单周期指令、结果也可能是4个 SysTick 周期。

    运行20次 mul、SysTick 向下计数26次。

    运行10次 mul、SysTick 向下计数16次。

    运行5次 mul、SysTick 向下计数11次。

    对于多路复用步骤调试、根据该测试结果、它将需要额外的6个 SysTick 周期。

    我想对于单步调试、它将需要额外的3个 SysTick 周期。

    下面是测试演示:

    e2e.ti.com/.../Instruction_5F00_MUL_5F00_Test_5F00_CycleTest_5F00_G3507.zip

    希望本指南能为您提供帮助。

    此致、

    Helic

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

    尊敬的 Helic:

    感谢您的解释。 对我来说很有帮助。 我通过单步调试检查我的代码、发现几乎所有指令时钟周期(执行额外的3个时钟周期)都符合来自 ARM 网站的信息、但只有 LDR 指令。 LDR 指令有时可能需要3或5个时钟周期、正如下面的屏幕截图中用红色标记的那样。

    下面是我的测试代码、请帮助我们弄清楚它。

    e2e.ti.com/.../instructions_5F00_test_5F00_demo.zip

    谢谢!

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

    你好、 

    要获得额外的3或5个时钟、或者使用断点进行多步调试、并恢复功能的额外5个时钟周期、

    这些现象应该是由调试器引起的、需要一些时间才能确认这一点。

    此致、

    Helic

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

    你好、 

    LDR 指令有时可能需要3或5个时钟周期、正如我在下面的屏幕截图中以红色标记的那样。

    这是正常的、因为恢复+断点和单步调试都需要向 CPU 插入一些额外指令。

    此致、

    Helic

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

    尊敬的 Helic:

    即使我在没有调试器的情况下运行代码、LDR 指令有时仍需要3个 ro 5个周期。 这里是我修改后的测试代码。

    e2e.ti.com/.../instructions_5F00_test_5F00_demo_5F00_20250116.zip

    在此代码中、我 在361行中添加 DL_GPIO_togglePins 之前和之后的 DL_ADC12_enableConversions、然后 在不使用调试器的情况下运行代码。 正脉冲持续时间为162.5或175ns、等于13或14个周期。 但是、预期周期数为10。 根据昨天的测试结果、我认为额外的3或4个周期是由指令 LDR R1、[R3]进行的。

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

    感谢 Helic 的备份。

    尊敬的 Peter:

    很抱歉、我本周不在办公室。 我会跟进此问题。

    我 打算设置一个演示来进行实验、并对其进行验证。

    预计将在下星期一更新。

    B.R.

    SAL

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

    尊敬的 Peter:

    我完成了上一个回复和你的测试。

    对于 GPIO、由 ULPCLK 和 MCLK 访问、如总线结构中所示:

    这可能会弥补测试的时序差异。 外设有时通过不同的总线时钟访问。

    所以、也许你可以设置40MHz、然后再次测试它。

    B.R.

    SAL

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

    尊敬的 Helic:

    感谢 您的更新。

    我设置 40MHz 并再次测试、但它没有帮助。 正脉冲持续时间现在为325us、相当于13个周期、比预期增加了3个周期。 指令  LDR R1、[R3]仍然需要5个周期、与其他 LDR 指令不同。  

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

    尊敬的 Peter:

    我做了一些测试。 LDR 指令确实具有不同的操作周期。  

    -[LDR Rd,...] LDR 指令将把操作值返回 Rd 寄存器。

    当访问不同的外设寄存器时、返回外设寄存器值需要花费几个额外的 CPU 周期。

    在我的测试中、 对于 GPIO 模块、LDR 指令将花费2个周期1个周期[更新];对于 ADC0模块、LDR 指令将花费5个周期;对于 SPI0模块、LDR 指令将花费3个周期。

    我怀疑以下内容:

    当 CPU 访问外设寄存器时、可能有时钟同步行为使操作正常、这会导致额外的 CPU 周期。

    B.R.

    SAL

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

    尊敬的 Helic:

    感谢您的努力。      我是否有可以分享的访问寄存器延迟规格? 这将对我的进一步学习非常有帮助。

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

    尊敬的 Peter:

    抱歉,我们没有为 CPU 指令执行保留相关材料。

    我可以与设计团队确认、但可能没有其他信息可供您参考。 总之、如果我在该主题上取得了一些进展、我会向您介绍最新情况。

    B.R.

    SAL

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

    尊敬的 Peter:

    我没有参考资料、下面是我对测试的总结:

    对于 GPIO、没有延迟、1个周期。

    对于 PD1 (MCLK)、有1个额外周期延迟、总共3个周期。

    对于 PD0 (ULPCLK)、有3个额外周期延迟、总共5个周期。

    B.R.

    SAL

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

    顺便说一下、我想知道您关于 CPU 指令周期的问题是什么、 应用程序是否真的对 CPU 时序有限制? 谢谢。

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

    尊敬的 Sal:

    有。 在我的项目中、性能与代码执行速度密切相关。 总之、感谢您的调查。