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.

[参考译文] TMS570LS1224:低功耗模式示例?

Guru**** 2606725 points
Other Parts Discussed in Thread: LAUNCHXL2-TMS57012, TMS570LS1224, TM4C129ENCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/743437/tms570ls1224-low-power-mode-examples

器件型号:TMS570LS1224
主题中讨论的其他器件:LAUNCHXL2-TMS57012TM4C129ENCPDT

您好!

我的应用程序每10秒执行一次节拍。 我想进入低功耗模式以降低功耗(它几乎始终处于低功耗模式、并且应该每10秒唤醒一次)。 我读取了 TMS570LS12 TRM、我还在 e2e 上看到了几个线程。

目前、我正在从事 LAUNCHXL2-TMS57012的工作。  

对于 GLCK = 160MHz (所有时钟域均工作)、电流消耗~ 145mA (LED 闪烁10秒)。

在我的代码(如下所示)后、功耗降至~75mA:以下是代码:

/*唤醒中断:RTI 比较0 */
vimREG->WAKEMASKCLR0 = 0xFFFFFFFF;
vimREG->WAKEMASKCLR1 = 0xFFFFFFFF;
vimREG->WAKEMASKCLR2 = 0xFFFFFFFF;

vimREG->WAKEMASKSET0 =(0x1 <<2);//RTI 2.


/*闪存*/
flashWREG->FBAC =(0x0F <<8)|(0x0F);
flashWREG->FBFALBACK = 0x000000000000
|(UINT32)((UINT32) SYS_SLEE<< 14U) /*银行7 */
|(UINT32)((UINT32) SYS_SLEEP << 2U) /*银行1 */
|(UINT32)((UINT32) SYS_SLEEP << 0U);//组0 */
flashWREG->FPAC1 = 0x00000000U; /*将泵置于睡眠状态*/

/*时钟*/
systemREG1->GHVSRC = 0x00000000;
systemREG1->VCLKASRC= 0x00000000;
systemREG1->RCLKSRC = 0x00000000;

/*-禁用/启用时钟域*/
systemREG1->CDDIS = 0x0 //RTICLK 被使能用于唤醒
|(uint32)((uint32) 1U <<0U)//GCLKOFF
|(UINT32)((UINT32) 1U << 1U)//HCLK 关闭
|(uint32)((uint32) 1U << 2U)//VCLKP 关闭
|(UINT32)((UINT32) 1U << 3U)//VCLK2关闭
|(uint32)((uint32) 1U << 4U)//AVCLK 1关闭
|(UINT32)((UINT32) 1U << 5U)//AVCLK 2关闭
|(UINT32)((UINT32) 1U << 8U)//VCLK3关闭
|(UINT32)((UINT32) 1U << 9U)//VCLK4关闭
|(UINT32)((UINT32) 1U << 11U);//AVCLK 4关闭

systemREG1->CSDIS =(uint32)((uint32) 1U << 1U) // OSCIN 被启用
|(uint32)((uint32) 1U << 3U)
|(uint32)((uint32) 1U << 4U)
|(uint32)((uint32) 1U <<5U)
|(uint32)((uint32) 1U <<6U)
|(uint32)((uint32) 1U <<7U);


//使 Cortex-R4内核空闲
asm (" NOP");
asm (" NOP");
asm (" NOP");

asm (" WFI");//等待中断(WFI)指令
asm (" NOP");//唤醒后、将从此行开始
asm (" NOP");
asm (" NOP");
asm (" NOP");
asm (" NOP");
asm (" NOP"); 

我不确定是否一切都好。 低功耗模式下的功耗是多少? 它是否应小于~75mA?

我想它应该在10个时钟(RTI)后唤醒、但它不起作用... 请帮帮我。

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

    对于低功耗模式、75mA 过大。 您可以使用 ECLK 来检查 VCLK、以确保器件处于低功耗模式。

    请在 GHVSRC 寄存器中定义唤醒时钟源。

    您能否使用 GIO 中断、SCI 或 CAN 消息器唤醒器件?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 QJ、

    感谢您的回复。

    我检查了 ECLK、在我禁用时钟域和时钟源的部分代码之后、ECLK 引脚上的时钟也消失了。 因此、关闭时钟似乎不是问题。

    当我调试程序(使用 CCS)时、在中关闭时钟域和时钟源后、我收到以下消息:

    问题可能出在"闪存存储器部分"。  

    /*闪存*/
    flashWREG->FBAC =(0x0F <<8)|(0x0F);
    flashWREG->FBFALBACK = 0x000000000000
    |(UINT32)((UINT32) SYS_SLEE<< 14U) /*银行7 */
    |(UINT32)((UINT32) SYS_SLEEP << 2U) /*银行1 */
    |(UINT32)((UINT32) SYS_SLEEP << 0U);//组0 */
    flashWREG->FPAC1 = 0x00000000U; /*将泵置于睡眠状态*/ 

    在这个部分之后、寄存器如下所示:

    FBnkAcc 0000000000000000111100001111b (二进制)组访问控制寄存器
    FBnkFallback 000000000000001111111100b (二进制)组降级功率寄存器
    FPmpAcc1 00000000000000000000000000000000000000000000b (二进制)泵访问控制寄存器1
    FPmpAcc2 00000000000000000000000000000000000000000000b (二进制)泵访问控制寄存器2.

    我想关闭所有组(0、1、7)、但看起来组1仍处于激活模式... (查看 FBnkFallback)...


    我尝试通过两种方式从我的状态中唤醒(LaunchPad 板为~75mA):
    首先、使用 RTI:      vimREG->WAKEMASKSET0 = 0x00000002;//我假设它应该使用 RT 中断(10秒)、vim 2作为唤醒中断。
    其次、使用 gib 中断:      vimREG->WAKEMASKSET0 = 0x00000017;// GIO vim 23 -> HEX 0x17,使用板上可用的按钮...
    这两种方法都不起作用。 也许我错过了一些东西。

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

    更新:
    我觉得 FBnkFallback 寄存器没有问题。 我有一些疑问、因为我知道板上有3个闪存组(0、1、7)、但只有2个闪存组(0、7)。 TRG 和 TMS570LS1224的数据表之间存在差异。

    我仍然没有找到解决方案。
    我尝试将 WAKEMASKSET0更改为0xFFFFFFFF、但仍然无法唤醒。 是否有任何想法除了设置该寄存器之外、我还应该做些什么?

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

    请尝试以下操作:

    flashWREG->FBAC =(0x10 << 16)|(0x0F << 8)|(0x0F);
    flashWREG->FPAC2 = 0x0;
    flashWREG->FBFALBACK = 0;//将组0和1置于睡眠模式
    flashWREG->FPAC1 = 0;//将泵置于睡眠状态
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 QJ、
    我尝试了您的代码、但没有任何变化。
    这部分代码之后的闪存寄存器(FBAC、FBFALBACK、FPAC1、FPAC2)的值与之前相同:

    FBnkAcc 0000000000000000111100001111b (二进制)组访问控制寄存器[存储器映射]
    FBnkFallback 000000000000001111111100b (二进制)组降级功率寄存器[存储器映射]
    FPmpAcc1 00000000000000000000000000000000000000000000b (二进制)泵访问控制寄存器1 [存储器映射]
    FPmpAcc2 00000000000000000000000000000000000000000000b (二进制)泵访问控制寄存器2 [存储器映射]

    正如我在第一个帖子中所写的那样、在我的"进入睡眠"代码功耗降低至~75mA 后。 您建议在低功耗模式下太多。 但该值适用于整个 PCB (LAUNCHXL2-TMS57012)。 除了 TMS570、板载还有 TM4C129ENCPDT 等。

    我仍然不确定、但我认为我处于低功耗模式... 但我无法恢复正常运行...
    如果我理解、我应该只指定'WAKE-UP MASK'(vimREG->WAKEMASKSET0)。 在我的测试应用中、我使用 RTI 比较0来实现 LED 闪烁。 我的"唤醒掩码"设置为0x2。 在'go_sleep'代码期间、我将关闭除 RTI (和 OSCIN 源)之外的所有时钟。 TMS570是否应在下一次 RTI 中断后唤醒? 或者我应该做更多的事情吗?

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

    您好、Timm、

    我认为您的代码是打盹低功耗模式、而不是睡眠模式。 在您的配置中、RTI 时钟和 OSCIN 处于激活状态。

    抱歉、我只是注意到您的 PCB 上还有另一个有源 MCU (TM4C129x)。 TMS570不会仅消耗75mA、而是消耗整个 PCB。 对我来说有道理。

    对于打盹低功耗模式、此器件可由 RTI 中断使能。  

    在进入低功耗模式之前、请启用 RTI 比较 INT 通知并启用 CPU 中断、然后启动 RTI 计数器:

    rtiInit();

    gioInit();

    _enable_IRQ ();

    //唤醒中断:GIO 和 CAN1
    vimREG->WAKEMASKSET0 = 0x0 | 0x02   
                             |(0x1 << 9);//GIOA0/1 INT

    rtiSetPeriod (rtiCOMPARE0、100000);

    rtiEnableNotification (rtiNOTIFICATION_COMPARE0);

    /*启动 RTI 计数器块0 */
    rtiStartCounter (rtiCOUNTER_BLOCK0);

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

    QJ、

    我知道我应该启动 RTI 器件。 在我的代码中、我在开始时启用了 RTI 比较和 CPU 中断。 它位于我的代码的初始化部分。

    我的测试应用程序的工作方式如下:

    1. LED 闪烁(每10秒闪烁一次)// RTI 计数器-->此部件运行良好
    2.按下按钮启动低功耗模式//在 Gio 通知中设置标志(代码在 main()中执行)-->此部件也运行良好。 (Launchpad 电路板的功耗下降~60mA、ELCK 上的时钟消失)
    3. 然后、我应该等待下一个 RTI 比较通知、但我正在等待几分钟、没有发生任何情况(功耗仍然处于低电平、LED 不再闪烁、并且我的 oscilocope (ECLK)上没有任何时钟。 看起来我无法唤醒...

    您是否有权访问 LAUNCHXL2-TMS57012? 是否可以向您发送我的代码以验证问题在哪里?
    或者其他人可以帮助吗?

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

    是的、我有一个 LaunchPad。 我可以使用您的代码进行测试。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    QJ、
    如何向您发送我的代码?

    编辑。 我刚刚发送了一封电子邮件。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    QJ、
    您是否在 LAUNCHXL2-TMS57012上尝试过代码?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Timm、

    我测试过。 当内存内置自检被禁用时、测试通过。 我会将项目发布到朋友的消息、然后关闭此主题。