如题,
最近研究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; }