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.

[参考译文] TMS320F2.8377万D:F2.8377万D -休眠模式和电流消耗

Guru**** 2584385 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/646112/tms320f28377d-f28377d---hibernation-mode-and-current-consumption

部件号:TMS320F2.8377万D

我有一个关于双核Delfino MCU休眠模式的问题。

我用包含F2.8377万D的中断板制作了一个电路。

我一直在RAM上运行它,有时我尝试进入休眠模式以节省电量。

我测量了从VDD到GND的电流消耗,但我得到的电流消耗量与处于活动状态时相同。 (~450mA)

在测量过程中,MCU仍连接到JTAG调试器(XDS100V2)。

这是否正常? 因为我真的需要减少电流消耗。

谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    出于不必要的考虑,我可以对MCU进行编程和运行。 似乎没有重大的功能缺陷。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,

    看起来设备没有进入休眠模式。 是否可以列出进入休眠模式的步骤?

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

    这是我的董事会。 很抱歉这么乱!  我只连接了1.2V和3.3V电源。 去耦电容使其看起来非常肮脏。 不要介意右下角的电阻器和二极管,因为它们未连接。

    我将1.2V电源连接到VA,将3.3V电源连接到VC。 通过JTAG电缆正下方的绿色大线是连接至电源板的GND线。

    我跑过lpm_hibwake和lpm_idlewake以及lpm_standbywake。 我已确认,仅当中断的GPIO设置为1时,设备才会唤醒。

    我只在RAM上运行代码。

    我测量了从VA到GND的电源的电流,但我现在一直测量~350mA。 实际上,当我不小心将GND断开时,我测量了325mA。 我确认设备在发生时未通电,并且只能在接地GND PowerPAD时进行调试。 因此,即使设备未打开,我也在测量325mA。

    我迷路了,甚至不知道我是否以正确的方式测量电流。 我非常感谢您的帮助!  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    从VA和VC平面到GND平面的唯一连接是去耦电容器。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我现在用Launchpad尝试了。

    我测试了lpm_hibwake直流示例。 程序启动时,通过3.3 电源的电流为290mA。  当两个CPU进入休眠模式时,电流约为360mA,可能是由于用于中断的GPIO引脚。

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

    电流消耗高。 您可以参阅表"表5-1. Device current consumption at 200MHz SYSCLK"(以200MHz SYSCLK的频率显示设备电流消耗),以查看休眠状态下的当前消耗数字。 看起来设备没有进入休眠状态。

    您是否可以确认以下内容-

    1)运行此测试时,CCS是否会断开连接? 如果不是,则表示设备未进入休眠状态。
    2)其中一个GPIO上是否具有XCLKOUT) SYSCLKOUT? 当设备进入休眠模式时,这将停止切换。

    此致,
    Vivek Singh
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    对于第一个问题,是的,运行时它已断开连接。
    第二项质询是没有的

    我是否需要在休眠之前手动关闭球面密码?
    我可以尝试一下。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好  

    我正在尝试检查我的主板是否进入休眠模块。 我正在使用 TM4C123G LaunchPad,我通过使用sw1将其配置为进入休眠模式,这就是我所做的软功能。  

    Void
    ConfigureUART (void)
    {
    //
    //启用UART使用的GPIO外设。
    //
    ROM_SysCtlPeripheralEnable(sysctl_Periph_GPIOA);
    
    //
    //启用UART0
    //
    ROM_SysCtlPeripheralEnable(sysctl_Periph_UART0);
    
    //
    //为UART模式配置GPIO引脚。
    //
    ROM_GPIOPinConfigure(GPIO_PA0_U0RX);
    ROM_GPIOPinConfigure(GPIO_PA1_U0TX);
    ROM_GPIOPinTypeUART (GPIO_Porta_base,GPIO PIN_0 | GPIO PIN_1);
    
    //
    //使用内部16MHz振荡器作为UART时钟源。
    //
    UARTClockSourceSet (UART0_BASE,UART_CLARK_PIOSC);
    
    //
    //初始化控制台I/O的UART
    //
    UARTStdioConfig (11.52万,1600万);
    }//*****************************************************************************************************************
    
    
    ////
    按钮的中断处理程序。
    ////*************************************************************************************************
    
    
    void bottonsHandler(void){
    IF((GPIOIntStatus(GPIO_PORTF_BASE,TRUE)& Buttoninit1))
    {
    GPIOIntClear (GPIO _PORTF_BASE,Buttoninit1);//清除中断标志
    TimerEnable(TIMER0_base, timer_a);//启用计时
    器}
    否则IF ((GPIOIntStatus(GPIO_PORTF_BASE,TRUE)& Buttoninit0))
    {
    GPIOIntClear (GPIO _PORTF_BASE,Buttoninit0);//清除中断标志
    TimerDisable (TIMER0_BASE,TIMER_A);//禁用计时器
    SysCtlPeripheralDisable(sysctl_Periph_hibernate);//禁用休眠模块
    休眠GPIOoretentionDisable();//禁用GPIO保留
    HibernateDisable();//禁用休眠模块以进行操作
    
    。}
    }
    void configureButtons(void){//configureButton0
    
    GPIOPinTypeGPIOInput (ButtonBase,Button0);
    GPIOPadConfigSet (ButtonBase,Button0,GPIO强度2mA,GPIO PIN类型STD_WPU);//注册端口F的处理程序函数
    GPIOIntTypeSet(GPIO_PORTF_BASE,GPIO PIN_0,GPIO Falling_EDGE);//为下降边缘触发器配置PF4
    GPIOIntRegister (GPIO _PORTF_BASE,BottonsHandler);//注册端口F的处理程序函数
    GPIOIntEnable (GPIO _PORTF_BASE,GPIO _INT_PIN_0);//为PF0启用中断
    //configureButton1
    GPIOPinTypeGPIOInput (ButtonBase,Button1);
    GPIOPadConfigSet (ButtonBase,Button1,GPIO强度2mA,GPIO PIN类型STD_WPU);//注册端口F的处理程序函数
    GPIOIntTypeSet(GPIO_PORTF_BASE,GPIO PIN_4,GPIO Falling_EDGE);//为下降边缘触发器配置PF4
    GPIOIntRegister (GPIO _PORTF_BASE,BottonsHandler);//注册端口F的处理程序函数
    GPIOIntEnable(GPIO_PORTF_BASE,GPIO_INT_PIN_4);//为PF4启用中断
    
    }
    
    void
    Timer0IntHandler(void)
    {////
    
    
    清除计时器中断。
    //
    TimerIntClear (TIMER0_BASE,TIMER_TIMA_TIMEOUT);
    
    UARTprintf (“休眠模式已打开!\n”);
    
    HiberalEnable(sysctl_Periph_hibernate);//启用
    
    GPIO模块HibernateEnablehibernation Expansion Clk (SysctlClockGet);//定义在调用过程中提供的时钟保持状态/启用此模块。
    SysClertDelay(SysClockGatet()/10 );
    
    HibernateWakeSet(hibernate_wake_PIN);//将唤醒条件设置为唤醒针
    SysDelay(SysClertClockSet()/10);
    //GPIOPinWrite(GPIO_PORTF_Base,GPIO PIN_3,0);//在设备进入休眠状态LED指示灯之前关闭设备。
    
    /*函数请求休眠模块禁用外部稳压器,从而断开
    处理器和所有外围设备的电源。*/
    
    休眠请求();
    }//*****************************************************************************************
    
    
    
    
    ////
    打印"Hello World!" 到评估板上的UART。
    ////*************************************************************************************************
    
    int
    main (void)
    
    {
    //volatile UINT32_t ui32Loop;
    
    //
    //为中断处理程序启用延迟堆栈。 这允许浮点
    //在中断处理程序中使用的指令,但费用为
    //额外的堆栈使用。
    //
    //ROM_FPULazyStackingEnable();
    
    //
    //将时钟设置为直接从晶体运行。
    //
    ROM_SysClockSet(sysctl_SYSDIV_5| sysctl_use_PLL | sysctl_XTAL_16MHz |
    sysctl_OSC主);
    
    //
    //启用用于板载LED的GPIO端口。
    //
    ROM_SysCtlPeripheralEnable(sysctl_Periph_GPIOF);
    
    //
    //启用LED的GPIO引脚(PF2 & PF3)。
    //
    ROM_GPIOPinTypeGPIOOutput (GPIO _PORTF_BASE,GPIO PIN _1|GPIO PIN _2|GPIO PIN _3);
    
    //
    //启用此示例使用的外围设备。
    //
    ROM_SysCtlPeripheralEnable(sysctl_Periph_TIMER0);
    //
    //为计时器中断注册中断处理程序。
    //
    TimerIntRegister (TIMER0_BASE,TIMER_A,Timer0IntHandler);
    //
    //启用处理器中断。
    //
    ROM_IntMasterEnable();
    
    //
    //配置两个32位定期计时器。
    //
    ROM_TimerConfigure(TIMER0_BASE,TIMER_CFG_Periodic);
    ROM_TimerLoadSet(TIMER0_BASE,TIMER_A,ROM_SysClockSet());
    
    //
    //设置定时器超时的中断。
    //
    ROM_IntEnable (INT_TIMER0A);
    ROM_TimerIntEnable(TIMER0_BASE,TIMER_TIMA_TIMEOUT);
    
    //
    //初始化UART。
    //
    配置UART();
    //
    //初始化按钮。
    //
    configureButtons();
    //
    //您好!
    //
    UARTprintf ("你好,世界!\n");
    SysCTlDelay (SysCTlClockGet ());
    
    同时(1)
    {
    UARTprintf ("运行模式已打开!\n");
    SysCTlDelay (SysCTlClockGet ());
    GPIOPinWrite (GPIO_PORTF_BASE,GPIO PIN_3,GPIO PIN_3 );
    SysCTlDelay (SysCTlClockGatet()/10);
    GPIOPinWrite (GPIO _PORTF_BASE,GPIO PIN _3,0);
    SysCTldelay(SysCTlClockGatet()/10 );
    
    }
    }
    

     

    我所做的是从午餐板上取下跳线,尝试在不同模式下测量电流,但在不同模式下,DMM不会显示任何差异。

    如果您知道如何使用某些命令来检查主板是否进入休眠状态,我将非常感谢。

    谢谢你。

    此致

    胺。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想您可以尝试使用外部电压电源而不是USB连接为启动板供电。 您可以通过电源监控电流消耗。 对我来说,进入休眠模式只能减少大约10mA。 通过手动关闭外围设备,我将电流降低了约30mA。 至于休眠功能,您的主板在中断引脚上的外部输入读取上升或下降边缘之前不会被唤醒,不是吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,
    是的,正是在把主板置于休眠状态的Inetrupt之后,我注意到重置按钮不再响应...所以我唯一能够做的就是用SW2在中断时唤醒主板。
    我没有任何外部电压...我正在考虑用RTC测试某种计数...我仍然在寻找...我不知道这里的'Truc'到底是什么。
    谢谢
    此致。