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.

[参考译文] TMS570LS3137:在_gotoCPUIdle_中的 WFI 之后的 HALCoGen 启动代码 nop#39;s

Guru**** 2468610 points
Other Parts Discussed in Thread: HALCOGEN, TMS570LS3137

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/674191/tms570ls3137-halcogen-startup-code-nop-s-after-wfi-in-_gotocpuidle_

器件型号:TMS570LS3137
主题中讨论的其他器件:HALCOGEN

您好!

我目前正在分析 TMS570LS3137的启动代码。 与 HALCoGen 生成的代码类似、我们在 WFI 语句之后使用了几个 nop (用于开始自检)。 在 HALCoGen 代码中,也可以在 sys_core.asm _gotoCPUIdle_中找到该代码。 您能否解释为什么在 WFI 指令之后需要4 nop? 我在 ARM 或 TI 手册中找不到任何提示。 如果仅调用 WFI 来启动 SelfTest 或 STCTest、则是否还需要这些选项、因为 CPU 随后应执行复位、而不是在 WFI 之后继续?

gotoCPUIdle_

WFI
NOP
NOP
NOP
NOP
BX LR

endasmfunc 

非常感谢、

Michael

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    一个可能的原因:[BX LR]指令需要位于"字/双字/四字?"上 地址边界和 WFI 运算代码不是那么长。 [nop]实现了地址对齐。 这只是一个猜测。 我未与 TI 关联。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    有关 WFI 的更多信息、请参阅 DDI0363E_cortexr4_r1p3_TRM.pdf:

    第268页
    通过执行等待中断(WFI)指令进入待机模式。 更改为
    确保进入待机模式不会影响内存系统 WFI
    自动执行数据同步边界操作。 这可确保所有这些都是显式的
    在 WFI 完成之前、按照程序顺序进行存储器访问。
    第392页:
    根据电流的不同、WFI 指令会使流水线停顿可变数量的周期
    存储系统的状态。

    但是、这仍然不能解释 NOP 的用法。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Michael、

    NOP 允许 CPU 有时间在执行下一条指令之前完成数据同步边界操作。 即、它在 WFI 命令和 BX LR 指令之间提供缓冲区。 否则、BX LR 指令将阻止 CPU 停止、函数调用将只返回并继续执行。