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.

[参考译文] CC2543:PM2电流消耗问题....

Guru**** 681440 points
Other Parts Discussed in Thread: CC2543, CC2544, CC2545
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/1060823/cc2543-problem-with-pm2-current-consumption

器件型号:CC2543
主题中讨论的其他器件: CC2544CC2545

您好!

我正在使用 TI 的示例代码在功率模式 PM2中测试 CC2543的功耗,我发现:

  μA 数据表中所述、关于 CC2543、电源模式2 (睡眠定时器打开):电流消耗0.9 μ A、

-我在 PM2中使用了30秒的睡眠时间。 但  电流   μA 仍不会降低<30 μ A

-请检查代码,并告诉我问题的位置?

#include
#include
#include

#include

#include "ioCC2543.h"


/
*局部变量
*
//用于存储24位睡眠定时器值的 union。
typedef union{
无符号长整型值;
无符号字符字节[4];
} UNION 32位;

静态 union_32位 sleep_timer;


/
*本地函数
*

/
*@fn sleep_isr
*
*@睡眠定时器的简短中断服务例程、用于唤醒
*系统处于电源模式。 当唤醒时、标志被清除、然后
* LED1已切换。
*
*@param void
*
*@返回 void
*


#pragma vector = ST_vector
_interrupt void sleep_ISR (void)

/*请注意,以下标志的清除顺序很重要。
对于脉冲或 egde 触发的中断、必须清除 CPU 中断
在清除模块中断标志之前的中断标志。 *

//切换 SRF05EB LED1。
P1_0 ^= 1;

//清除[IRCON.STIF](睡眠定时器 CPU 中断标志)。
stif = 0;


/
*@fn main
*
*@简短设置睡眠定时器和睡眠定时器中断。 进出
*功率模式1。
*
*@param void
*
*@返回0
*

int main (空)

/
*设置时钟和频率
*
*使用的系统时钟源是速度为32MHz 的 HS XOSC。
*

//将系统时钟源更改为 HS XOSC 并将时钟速度设置为32MHz。
CLKCONCMD =(CLKCONCMD 和~(CLKCON_CLKSPD | CLKCON_OSC))| CLKCON_CLKSPD_32M;

//等待直到系统时钟源变为 HS XOSC (CLKCON.OSC = 0)。
while (CLKCONSTA 和 CLKCON_OSC);

//我们需要等待大约2ms、直到32kHz RCOSC 被校准。
halMcuWaitM(2);//给定32MHz 系统时钟源。


/
*设置 I/O
*

/*
//初始化 SRF05EB LED1的 P1_0。
P1SEL &=~BIT0;//用作通用 I/O
P1_0 = 1;// LED1打开。
P1DIR |= BIT0;//输出。

*

/
*设置睡眠定时器中断
*

//清除[IRCON.STIF](睡眠定时器 CPU 中断标志)。
stif = 0;

//设置单独的中断使能位[IEN0.STIE=1。
stie = 1;

//通过设置[IEN0.EA=1]启用全局中断。
Ea = 1;


/
*在 PM2中设置功率模式。
*当睡眠时间超过3ms 时、通常使用电源模式2。
* CC2544不支持 PM2和 PM3!
*

//设置功率模式、PM2。
SLEEPCMD =(SLEEPCMD 和~SLEEPCMD_MODE)| SLEEPCMD_MODE_PM2;


/
*设置睡眠定时器
*
*睡眠定时器在32kHz RC 振荡器上运行。 CC2545有的
*可以使用外部32kHz 晶体、LS XOSC 可以是
通过清零 CLKCONCMD.OSC32K 位选择*。 这将启动时钟
*源更改、CLKCONSTA.OSC32K 反映了当前设置。 请注意这一点
必须在系统时钟源为 HS RCOSC 时完成*。
*

//要确保读取更新的值,请等待上的正转换
//通过轮询 SLEEPSTA.CLK32K 位实现32kHz 时钟。
while (!(SLEEPSTA 和 SLEEPSTA_CLK32K));//等待睡眠计时器上的正极闪存。

//读取睡眠定时器的当前值。
SLEEP_TIMER.BYTE[0]= ST0;//必须首先读取 ST0。
SLEEP_TIMER.BYTE[1]= ST1;
SLEEP_TIMER.BYTE[2]= ST2;

SLEEP_TIMER.VALUE = 0;

while (1)

//用32753个周期递增睡眠定时器值以创建新的
//在大约1秒内比较匹配。

SLEEP_TIMER.VALUE += 327530;

//加载睡眠定时器的新比较值时、
// ST2和 ST1寄存器必须在 ST0之前加载。
ST2 = SLEEP_TIMER.BYTE[2];
ST1 = SLEEP_TIMER.BYTE[1];

//等待加载准备就绪,然后再写入 STO。
while (!(STLOAD & STLOAD_LDRDY));
ST0 = SLEEP_TIMER.BYTE[0];

//PCON = 0x01;
//强制器件进入 SLEEPCMD.MODE 设置的电源模式。
//LLECTRL = 0x00;//建议在进入 PM2/PM3之前将 LLECTRL 设置为0
EnterSlepModeProcessInterruptsOnWake();
//LLECTRL = 0x01;//从 PM2/PM3返回后将其设置回1
SLEEP_TIMER.VALUE = 0;

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

    您好 Dharmendra、

     μA 您测量的功耗接近30 μ A、则器件已 μA 进入 PM2模式、因为即使是 PM1也平均消耗235 μ A。   μA GPIO P1.0也会产生比数据表中列出的0.9 μ A 更大的电流。   请检查您的硬件以确认没有可能泄漏的额外电路、并确保您使用高精度功率测量工具来收集电流消耗值。

    此致、
    Ryan