开启了PAWER_SAVING,另外将四个POLL_RATE都设置为0,在debug时,查看halPwrMgtMode=0x03,SLEEPCMD=0x07,通过P0.2口IO中断唤醒模块,uart处理数据。测量模块的功耗是8ma左右。在网上也查了,模块功耗这么高,说明模块是没有进入低功耗模式的,不知道是什么原因造成的?另外我也将模块其他裸露的引脚设置为上拉输入模式。
YiKai Chen:
檢查看看osal task queue是不是一直有東西要處理
Viki Shi:
看一下这边的总结帖: e2echina.ti.com/…/284719
user4796768:
回复 YiKai Chen:
你好 YK!
你说的是下面这个地方吗?do {if (tasksEvents[idx])// Task is highest priority that is ready.{break;}} while (++idx < tasksCnt);
这里我单步调试过,除非UART有数据,才会有任务执行,其他的都没有task要执行的。
YiKai Chen:
回复 user4796768:
如果是這樣建議你使能HAL_SLEEP_DEBUG_LED然後在halSleep裡面HAL_SLEEP_DEBUG_LED相關的源碼加上led顯示你的CC2530是否進入休眠
user4796768:
回复 YiKai Chen:
在debugger的时候,点击全速运行,发现LED闪烁一次就不再闪烁了,这时我点击暂停,程序停止到下面地方:
void halSetSleepMode(void)
{PCON = halSleepPconValue;HAL_DISABLE_INTERRUPTS();
}<—暂停到这里
这不知道正常不正常?
YiKai Chen:
回复 user4796768:
要查功耗的問題就不要接debugger了,直接看LED來確認程序有沒有進入休眠
user4796768:
回复 user4796768:
还有一个问题,就是一直单步调试的话,我发现会循环执行MAC_PwrOnReq();这个函数。
user4796768:
回复 YiKai Chen:
如果正常情况下,是不是就是网上所说的会不停的亮灭交替?但是我不进行debugger,发现LED就闪一次就熄灭了,之后不会在亮灭交替。
YiKai Chen:
回复 user4796768:
正常LED会不停的亮灭交替;你的halSleep里面進入sleep是開LED還是關LED?
user4796768:
回复 YiKai Chen:
#ifdef HAL_SLEEP_DEBUG_LEDHAL_TURN_OFF_LED1();
#else/* use this to turn LEDs off during sleep */HalLedEnterSleep();
#endif
进入是关闭LED的。
我在单步调试的时候halPwrMgtMode = (timeout == 0) ? HAL_SLEEP_DEEP : HAL_SLEEP_TIMER;这个地方看到timeout值为0,会不会跟这个有关?
TI中文支持网