主题中讨论的其他器件:ENERGYTRACE
完整的 IC 模型是 msp430fr2310irgyr。我们有一个使用此模型的 LED 产品。 为了测试 lpm3的功耗、我们删除了一些电路组件、最后将这些组件保留在下图中。 MCU 需要定期睡眠唤醒。 在睡眠的6S 期间、测试并确认所有 P1和 P2引脚输出0V、总电流约为16.5ua、电压(-v 和+v)为3V。 我从手册中了解到电流应该大约为1.1安。 我使用 TI 提供的演示程序进行测试。 程序的哪一侧设置不正确? 请提供一些建议。
#include
void Init_GPIO (void);
unsigned char ucMode = 8;
int main (空)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
//配置 GPIO
init_gpio();
//禁用 GPIO 上电默认高阻抗模式
//激活先前配置的端口设置
PM5CTL0 &=~LOCKLPM5;
_bis_SR_register (SCG0);//禁用 FLL
CSCTL3 |= SELREF_REFOCLK;//将 REFO 设置为 FLL 基准源
CSCTL0 = 0;//清除 DCO 和 MOD 寄存器
CSCTL1 &=~(DCORSEL_7);//首先清除 DCO 频率选择位
CSCTL1 |= DCORSEL_5;//设置 DCO = 16MHz
CSCTL2 = FLLD_0 + 487;// DCOCLKDIV = 16MHz
_DELAY_CYCLES (3);
_BIC_SR_register (SCG0);//启用 FLL
while (CSCTL7 &(FLLUNLOCK0 | FLLUNLOCK1));// FLL 锁定
CSCTL4 = SELMS_DCOCLKDIV | SELA_REFOCLK;//将默认 REFO (~32768Hz)设置为 ACLK 源、ACLK = 32768Hz
//默认 DCOCLKDIV 为 MCLK 和 SMCLK 源
//配置 RTC
RTCMOD = 60-1;//每10*1000*(1/10kHz)=~1S 发生一次中断和复位
RTCCTL |= RTCSS_VLOCLK | RTCSR |RTCPS_1000;
RTCCTL |= RTCIE;
while (1)
{
CSCTL5 |= DIVM_1;// MCLK = 0.5* DCOCLKDIV = 8MHz -仅当 LPM3进入和 LPM3退出时温度发生显著变化
_bis_SR_register (LPM3_bits | GIE);//输入 LPM3、停止所有时钟
__no_operation();//进行调试
}
}
// RTC 中断服务例程
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=RTC_vector
_interrupt void RTC_ISR (void)
#Elif Defined (_GNU_)
void __attribute__((interrupt (RTC_vector))) RTC_ISR (void)
其他
错误编译器不受支持!
#endif
{
//配置 CS
_BIC_SR_register (SCG0);//启用 FLL
while (CSCTL7 &(FLLUNLOCK0 | FLLUNLOCK1));// FLL 锁定
CSCTL5 &= DIVM_1;// MCLK = DCOCLKDIV = 16MHz -仅当 LPM3进入和 LPM3退出的温度显著变化时
开关(__evo_in_range (RTCIV、RTCIV_RTCIF))
{
案例 RTCIV_NONE:break;//无中断
案例 RTCIV_RTCIF:__BIC_SR_REGISTER_ON_EXIT (LPM3_BITS);// RTC 溢出
//在 ti 上退出 LPM3
中断;
默认值:break;
}
}
空 Init_GPIO()
{
P1DIR = 0xFF;P2DIR = 0xFF;
P1REN = 0xFF;P2REN = 0xFF;
P1OUT = 0x00;P2OUT = 0x00;
}