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.

[参考译文] CCS/TMS570LC4357:睡眠模式等待中断

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/609685/ccs-tms570lc4357-sleep-mode-waiting-for-interrupt

器件型号:TMS570LC4357

工具/软件:Code Composer Studio

您好!

如何在处理器收到中断之前将其置于 SLEEP_MODE 中? TMS570LC43x 是否有任何功能? 比如 Sleep ()或 WAKE ();?

谢谢

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

    您好!

    SPNU563的2.4.3.1中介绍了进入低功耗模式的 SW 序列。

    这是我在 LS12x 器件(Cortex-R4F)上使用的示例代码。 仅用作参考。

    您可以使用 GIO/CAN/CSCI 中断将器件从睡眠模式唤醒。

    睡眠()

    //1. 将闪存组和闪存泵回退模式编程为“睡眠”。

    flash_sleep();

    systemREG1->GHVSRC = 0x00000000;// GCLK、HCLK、VCLK、VCLK2的时钟源0 (OSC)

    systemREG1->VCLKASRC = 0x00000000;//外设异步时钟1/2的时钟源

    systemREG1->RCLKSRC = 0x00000300;//针对 RTI1源的时钟源

    asm (" DSB");

    //2. 禁用不需要保持激活状态的时钟源。

    //除非首先禁用使用该时钟源的所有时钟域,否则不会禁用该时钟源。

    //或配置为使用备用时钟源。

    systemREG1->CSDIS = 0xCF;//时钟源0...7

    //3. 禁用不需要保持活动状态的时钟域。

    //写入时钟源禁用寄存器- CDDIS -来禁用 PLL 时钟源

    systemREG1->CDDIS = 0x0

    |(uint32)((uint32) 1U <<0U)/* GCLKOFF */

    |(uint32)((uint32) 1U << 1U)/* HCLK 关闭*/

    |(uint32)((uint32) 1U << 2U)/* VCLKP 关闭*/

    |(uint32)((uint32) 1U << 3U)/* VCLK2 off */

    |(uint32)((uint32) 1U << 4U)/* AVCLK 1关闭*/

    |(uint32)((uint32) 1U << 5U)// AVCLK 2 off */

    |(uint32)((uint32) 1U << 6U)/* RTICLK 关闭*/

    |(uint32)((uint32) 1U << 8U)/* VCLK3关闭*/

    |(uint32)((uint32) 1U <<9U)/* VCLK4关闭*/

    |(uint32)((uint32) 1U << 10U)/* AVCLK 3关闭*/

    |(uint32)((uint32) 1U << 11U);// AVCLK 4 off */

    //4. 使 Cortex-R4F 内核空闲。

    //以空闲周期执行 ARM 指令以触发 CPU 时钟停止

    asm (" NOP");

    asm (" NOP");

    asm (" NOP");

    asm (" WFI");//等待中断(WFI)指令

    asm (" NOP");//唤醒后、将从此行开始

    asm (" NOP");

    asm (" NOP");

    asm (" NOP");

    asm (" NOP");

    asm (" NOP");

    void Flash_sleep (void)

    flashWREG->FBAC =(0x10 << 16)|(0x0F << 8)|(0x0F);

    flashWREG->FPAC2 = 0x0;

    flashWREG->FBFALBACK = 0;//将组0和1置于睡眠模式

    flashWREG->FPAC1 = 0;//将泵置于睡眠状态

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

    那么、我必须为我的 cortex R5修改此代码吗?

    非常感谢

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

    用户好!

    该过程应该非常相似、但可能还有一些需要处理的附加项目。 请查看 TRM 中的相应章节、以确保所有问题都得到妥善处理。 此外、请注意、我们不会为 Hercules 器件指定低功耗电流、因为虽然逻辑支持这些模式、但器件内使用的晶体管不太适合低功耗或待机模式、这在设计时不是优先考虑的功能。 这是由于使用的技术会导致大量电流泄漏。 尽管在标称温度、电压和制造工艺的低功耗模式下、这些器件似乎可以显著降低功耗、但在高温、更高电压和"热"制造工艺下、这些条件会产生显著影响、从而以指数方式增加晶体管泄漏。

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