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.

[参考译文] MSP432P401R:未使用调试器时如何初始化CYCCNT

Guru**** 2587365 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/619457/msp432p401r-how-to-initialize-cyccnt-when-debugger-is-not-being-used

部件号:MSP432P401R

大家好,

我希望能够在低级初始化期间使用DWT->CYCCNT进行一些基于硬件的计时。  但是,IAR嵌入式工作台似乎会自动初始化相应的寄存器,以启用DWT->CYCCNT的增加计数。  但是,在不使用调试器的情况下运行时,不会进行此初始化,因此DWT->CYCCNT不会递增。

有人能提供一些示例代码来启用DWT模块并启用DWT->CYCCNT吗?这样,即使我的代码是独立运行的,而没有连接调试器或IDE,循环计数器也能运行吗?

非常感谢!

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

    您好,

     您必须在DWT->CTRL寄存器中设置CYCCNTENA位,以启用循环计数器,然后计数器才会开始递增。

    请尝试以下操作:

    dwt->CTRL |= DWT_CTRL_CYCCNTENA_MSK; 

    希望这能有所帮助。

     David

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

    感谢您的回复。 我试过这个,但似乎没有效果。 我忘记了该链接,但我看到了另一篇关于启用DWT模块的帖子,使用的是类似DEMMR寄存器的内容? 我的名字可能错了... 我想作者暗示,DWT模块必须通过某些配置寄存器启用,然后才能启用CYCCNT寄存器。

    我承认对此一无所知... IAR环境显然对适当的寄存器进行了编程,因此CYCCNT在调试会话期间立即启用,但在独立运行时似乎需要手动执行。

    我衷心感谢您的帮助! 谢谢。

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

    我找到了我上面提到的链接:  

    embeddedb.blogspot.com/.../how-to-count-cycles-on-arm-cortex-m.html

    该链接显示设置DEMMR,如下所示:

    //启用使用DWT
    *DEMCR =*DEMCR | 0x100万;

    我不确定这是否有效。  必须今天尝试一下。

    谢谢!

    Scott

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

    //启用数据监视和跟踪模块
    CoreDebug ->DEMCR || CoreDebug_DEMCR_TRCENA_MSK;

    dwt->CTRL |= DWT_CTRL_CYCCNTENA_MSK;//打开循环计数器

    我现在可以独立运行,并且仍然使用CYCCNT进行低级别计时。

    再次感谢David!

    Scott