TI中文支持网
TI专业的中文技术问题搜集分享网站

2640如何进入standby模式

如题,

最近研究2640的电源管理,看了不少TI的手册,但是还是对如何进入standby模式不慎了解,希望各位大神能解答一下:

1.是否只要在预编译里加入:POWER_SAVING这一条宏定义就可以?

2.是否需要停掉应用层事件定时器,才能进入standby模式?

3.被配置成输入/输出的引脚需要怎样配置,才能进入standby模式?

感谢

Viki Shi:

建议参考TI RTOS中的官方例程,pinstandby

fangchang he:

回复 Viki Shi:

Viki Shi

建议参考TI RTOS中的官方��程,pinstandby

Viki Shi:

回复 fangchang he:

请这边下载:http://www.ti.com/tool/ti-rtos-mcu

fangchang he:

回复 Viki Shi:

Hi, Viki

我没找到你说的那个SDK,我自己先说下自己的思路:

我把所有的时间全部关闭,并把输出的I/O口都拉低,并且关闭广播

if( events & STANDBY_EVT ){events &= ~STANDBY_EVT;extern Clock_Struct keyReadClock;Util_stopClock(&keyReadClock); //关闭健值轮询;Util_stopClock(&batterycheckClock);//电池查询;Util_stopClock(&paw3003Clock); //ofn;Util_stopClock(&getconnectClock);//连接状态;HidDev_Close();KeysOutputLow();} 

这样,在主、从机断开的时候,我用万用表测得的电流值确实不会变化,但是电流非常大:2ma左右。

请问,能不能告诉我,进入standby的正确方式,谢谢

Alvin Chen:

回复 fangchang he:

Hi

//*****************************************************************************
//! @filepinStandby.c
//! @briefPin standby example.
//!
//Copyright (C) 2015-2016 Texas Instruments Incorporated - http://www.ti.com/
//
//
//Redistribution and use in source and binary forms, with or without
//modification, are permitted provided that the following conditions
//are met:
//
//Redistributions of source code must retain the above copyright
//notice, this list of conditions and the following disclaimer.
//
//Redistributions in binary form must reproduce the above copyright
//notice, this list of conditions and the following disclaimer in the
//documentation and/or other materials provided with the distribution.
//
//Neither the name of Texas Instruments Incorporated nor the names of
//its contributors may be used to endorse or promote products derived
//from this software without specific prior written permission.
//
//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
//"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
//LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
//A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
//OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
//SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
//LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
//DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
//THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
//(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
//OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//****************************************************************************///******************************************************************************
//! This example will cycle the device between active and standby states.
//! The CPU will toggle the LEDs each time it wakes up from standby,
//! using the PIN driver, and then immediately return to standby.
//! The time the device stays in standby is by default set to 5s; this can be
//! modified by changing the 'standbyDurationUs' variable.
//!
//! Note that if the standbyDurationUs is set to < 1ms, the device will actually
//! enter idle instead of standby, since there won't be sufficient time to
//! enter/exit standby.
//!
//! Note that if you are measuring power consumption during standby, it will be
//! higher when the LEDs are on, and will be much lower when the LEDs are off.
//!
//! Note that in order to get lowest standby current, the JTAG pins TMS and TCK
//! should be disconnected after programming the device by removing the
//! jumpers on P408 of the SmartRF06 EB. TMS and TCK have internal pull-ups and
//! are driven low when inactive from the emulator, hence after programming the
//! device these jumpers should be removed to avoid the extra leakage current.
//*****************************************************************************///******************************************************************************
// Includes
//*****************************************************************************/
#include <xdc/std.h>
#include <ti/sysbios/BIOS.h>
#include <ti/sysbios/knl/Clock.h>
#include <ti/sysbios/knl/Task.h>
#include <Board.h>
#include <ti/drivers/pin/PINCC26XX.h>//******************************************************************************
// Globals
//*****************************************************************************/
/* Task and task stack */
Task_Struct myTask;
Char myTaskStack[512];/* Led pin table */
PIN_Config LedPinTable[] =
{Board_LED0| PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */Board_LED1| PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */PIN_TERMINATE/* Terminate list */
};/*!******************************************************************************@briefTask which repeatedly sleeps for a duration, to allow repeated*entry/exit from standby.The LED states are toggled on each*iteration.**@paramUArg a0 : Not used**@paramUArg a1 : Not used**@returnnone - Should never return******************************************************************************/
static void taskFxn(UArg a0, UArg a1)
{/* Locals */PIN_State pinState;PIN_Handle hPin;uint_t currentOutputVal;uint32_t standbyDurationUs = 5000000;/* Allocate LED pins */hPin = PIN_open(&pinState, LedPinTable);/* Loop forever */while(TRUE){/* Sleep, to let the power policy transition the device to standby */Task_sleep(standbyDurationUs / Clock_tickPeriod);/* Read current output value for all pins */currentOutputVal =PIN_getPortOutputValue(hPin);/* Toggle the LEDs, configuring all LEDs at once */PIN_setPortOutputValue(hPin, ~currentOutputVal);}
}/*!******************************************************************************@briefApplication main entry point**@paramnone**@returnint - Should never return******************************************************************************/
int main(void)
{/* Locals */Task_Params taskParams;/* Do PIN init before starting the kernel */PIN_init(BoardGpioInitTable);/* Configure task. */Task_Params_init(&taskParams);taskParams.stack = myTaskStack;taskParams.stackSize = sizeof(myTaskStack);Task_construct(&myTask, taskFxn, &taskParams, NULL);/* Start kernel. */BIOS_start();/* Should never get here; include a return to keep the compiler happy */return 0;
}

赞(0)
未经允许不得转载:TI中文支持网 » 2640如何进入standby模式
分享到: 更多 (0)