主题中讨论的其他器件:ENERGYTRACE、
您好、TI 团队:
我正在使用 TI 的微控制器 MSP430FR2433、因此该项目基本上涉及将传感器接通2秒、然后将 MSP430FR2433置于低功耗模式(LMP3) 30秒。 代码正常运行、器件进入低功耗模式、但功耗仍很高(电流消耗为18微安)。 我正在使用外部振荡器通过 RTC 时钟来降低功耗、并且我看到数据表显示 采用32768Hz 晶振的 LPM3.5实时时钟(RTC)计数器:730nA (典型值)。 为什么电流消耗如此之高。 LMP3模式至少需要1或2微安。 我已经连接了下面的代码和 Energytrace、您可以在该线程中进行检查。 同时还提到了移除的 J11跳线。
#include <msp430.h>
void initGpio(void);
volatile unsigned int secondsCount = 0;
volatile unsigned int blinkCounter = 0;
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop WDT
initGpio(); // Configure GPIO
// Initialize XT1 32kHz crystal
P2SEL0 |= BIT0 | BIT1; // set XT1 pin as second function
do
{
CSCTL7 &= ~(XT1OFFG | DCOFFG); // Clear XT1 and DCO fault flag
SFRIFG1 &= ~OFIFG;
} while (SFRIFG1 & OFIFG); // Test oscillator fault flag
// Configure RTC
RTCMOD = 32768 - 1; // Set RTC modulo for 1 second
RTCCTL = RTCSS__XT1CLK | RTCSR | RTCPS__1;
RTCCTL |= RTCIE;
// Configure TimerA for 1-second interrupt
TA0CCR0 = 32768 *30 - 1; // Set TimerA period to 1 second
TA0CTL = TASSEL__ACLK | MC__UP; // ACLK, Up mode
TA0CCTL0 = CCIE;
// Enter LPM3.5 mode with interrupts enabled.
__bis_SR_register(LPM3_bits | GIE);
__no_operation();
return 0;
}
#pragma vector=RTC_VECTOR
__interrupt void RTC_ISR(void)
{
switch (__even_in_range(RTCIV, RTCIV_RTCIF))
{
case RTCIV_NONE:
break;
case RTCIV_RTCIF:
secondsCount++; // Increment seconds count
RTCCTL &= ~RTCIF; // Clear RTC interrupt flag
break;
default:
break;
}
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void TimerA_ISR(void)
{
if(blinkCounter == 1)
{
P1OUT |= BIT0;
}
else
{
P1OUT &= ~BIT0;
}
blinkCounter++;
if(blinkCounter > 30)
{
blinkCounter = 0;
}
// Toggle LED
}
void initGpio(void)
{
P1DIR = 0xFF; P2DIR = 0xFF; P3DIR = 0xFF;
P1REN = 0xFF; P2REN = 0xFF; P3REN = 0xFF;
P1OUT = 0x00; P2OUT = 0x00; P3OUT = 0x00;
// Disable the GPIO power-on default high-impedance mode
// to activate previously configured port settings
PM5CTL0 &= ~LOCKLPM5;
}
谢谢!
此致、
普赫拉吉·辛格