CC2530 PM2唤醒及功耗问题
时间:10-02
整理:3721RD
点击:
目前使用的是CC2530,配置进入PM2模式下,无法通过休眠定时器进行唤醒,在调试软件中,进入PM2模式后点击暂停后发现代码run在syspowermode()函数结束的地方,继续点run,CC2530会被唤醒并继续执行后续代码,同时,在CC2530进入PM2模式后用电源测芯片电流为200μA,与手册上提到的1μA差距很大,请问什么问题?
代码实现中,几个主要函数如下:
void set_low_clock(source)
{
if(source)
CLKCONCMD |= 0X80; //选择32KHZ RCOSC为低速时钟源
else
CLKCONCMD &= ~0X80; //选择32KHZ XOSC为低速时钟源
}
void init_sleep_timer(void)
{
ST2 = 0X00;
ST1 = 0X00;
ST0 = 0X00; //设置计数值
EA = 1; //开中断
STIE = 1; //使能睡眠定时器中断
STIF = 0; //清除睡眠定时器中断标志
}
void set_st_period(uint sec)
{
uint32 sleeptimer = 0;
//把ST2:ST1:ST0赋值给sleeptimer
sleeptimer |= (uint32)ST0;
sleeptimer |= ((uint32)ST1 << 8);
sleeptimer |= ((uint32)ST2 << 16);
sleeptimer += ((uint32)sec * (uint32)32768);
//把加N秒的计数值赋给ST2:ST1:ST0
ST2 = (uint8)(sleeptimer >> 16);
ST1 = (uint8)(sleeptimer >> 8);
ST0 = (uint8)sleeptimer;
}
void syspowermode(uchar mode){
uchar j;
if(mode < 4)
{
SLEEPCMD &= 0XFC;
SLEEPCMD |= mode;
for(j = 0;j < 4;j++);
PCON = 0X01;
}else
PCON = 0X00;
}
#pragma vector = ST_VECTOR
__interrupt void ST_ISR(void)
{
EA = 0;
STIF = 0; //标志清除
ledblink = 1;
EA = 0;
}
void main(void)
{
.....
set_low_clock(0);
init_sleep_timer();
.....
while(1)
{
....
set_st_period(2);
syspowermode(2);
....
}
}
怎么看不见我的帖子了?
有没有人能回答一下我的问题?