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.

[参考译文] MSP-EXP430F5529LP:延迟计算

Guru**** 2562120 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/601916/msp-exp430f5529lp-delay-calculation

器件型号:MSP-EXP430F5529LP

朋友们、您好!

我正在使用 MSP430F5529LP 和默认的1.048576 MHz 时钟 DCO。对于1000次计数、我没有1ms 的延迟(即准确的954次计数)、而是得到10ms、我还附加了代码、请帮助大家。

提前感谢

Beeresh

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

    在汇编器中显示从 C 源代码生成的代码、然后您将看到循环需要多少个 CPU 周期。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1)按 zrno soli 所说的那样做、因为这会给人启发。
    2) 2)开启优化器、然后重复(1);这也会带来启发。
    3) 3)使用__delay_cycles (或更好的计时器),以免再次猜测编译器。 __delay_cycles 专门设计用于避免在(1)和(2)中观察到的缺陷。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,zrno soli

    我附加了以下反汇编代码、在1000个计数中消耗了多少个机器周期。

    提前感谢

    Beeresh

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

    L2 incw &i (add.w #1、&i);4个周期

       cmp.w #03e8、&i        ;5个周期

       JLO L2                ;2个周期

     

    您可以看到、每次迭代比您想象的多11倍。 因此、您测量的是10ms、而不是1ms。

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

    如果您希望确保清晰的延迟、您可以包含一小段看起来像这样的汇编器代码(我在 ASM 中执行大多数时间关键型工作):


        PUSH.w R15 //保存 R15、2个周期
        MOV #[Value]、R15 //对于值1、2、4、8、0xFFFF 这需要2个周期、否则为3。
    环路:DEC R15 // 1周期
        jnz 循环// 2个周期
        Pop.w R15 //恢复 R15、2个周期

    这意味着总计(2+2+2+3*value)=(6+3*value)或(2+2+3+3*value)=(7+3*value)