程序从MSP430FR4133移植到MSP430FR6972如何做到低功耗一样?

2019-03-23 22:16发布

程序内容:RTC LCD显示、ADC电池采样;MSP430FR4133可以做到7UAMSP430FR6972却有40UA;多余的电流经查ADC10UA),AD 关闭,内部参考电压无法关闭而MSP430FR4133可以关闭,为什么?void ADC12_Config()  // MSP430FR6972{         PMMCTL0= SVSHE + PMMPW;                  while(REFCTL0& REFGENBUSY);              // If refgenerator busy, WAIT REFCTL0 |= REFVSEL_1 + REFON;            // Enable internal 2.0V reference //参考电压配置 ADC12CTL0 &= ~ADC12ENC;                   // Disable ADC12 (ADC12ENC=0的情况下,修改启动或关闭AD) ADC12CTL0 = ADC12SHT0_8 + ADC12ON;       // Set sample time  采样保持时间 256ADCCLK;启动AD ADC12CTL1 = ADC12SHP;                    // Enable sample timer ADCCLK = MODOSC; sampling timer   从采样保持器中获取信号 ADC12CTL2 |= ADC12RES_2;                 // 12-bit conversion results分辨率 ADC12CTL3 = ADC12BATMAP;                // Enable internal 1/2 AVCC+ ADC12MCTL0 = ADC12VRSEL_1 + ADC12INCH_31; // ADC input ch A30 =>internal 1/2 AVCC+ ADC12IER0 |= ADC12IE0;                       // ADC_IFG upon convresult-ADCMEMO while(!(REFCTL0 & REFGENRDY));            // Wait for reference generator                                            //to settle ADC12CTL0 |= ADC12ENC; __delay_cycles(400);}ADC中断   case ADC12IV_ADC12IFG0:                // Vector 12:  ADC12MEM0 Interrupt     ui16Bat_Vol = (uint32_t)100*ADC12MEM0/0x3FF;      if(ui16Bat_Vol_Old!=ui16Bat_Vol)                     {                                   bADC_done_flag= true;                                ui16Bat_Vol_Old= ui16Bat_Vol;             }     //Exit from LPM0 and continue executing main            while(REFCTL0 & REFGENBUSY);              // If ref generator busy, WAIT     REFCTL0 = 0;      while(!(REFCTL0 & REFGENRDY));            // Wait for reference generator             ADC12CTL0 &= ~ADC12ENC;                     ADC12CTL0 &= ~ADC12ON;      //AD 关闭     break;
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
QIHAO74
1楼-- · 2019-03-24 00:07
 精彩回答 2  元偷偷看……
QIHAO74
2楼-- · 2019-03-24 00:47
< :TI_MSP430_内容页_SA7 --> 还有不执行LCD显示,电流就降到8.5UA,那就差不多,LCD显示攻耗近20UA太大了,我现在这样设置有错吗?电路差不多,区别就在R23/LCDCAP 接4.7uF,而FR4133 接0.1uF
VSS--4.7uF -| R23/LCDCAP
VSS--0.1uF -|R03
VSS--0.1uF -|R13
VSS--0.1uF -|R23
程序设置有错吗?
void CLOCK_Config()  // MSP430FR6972
{
                PJSEL0 = BIT4 | BIT5;                   // For LFXT
        // Configure LFXT 32kHz crystal
  CSCTL0_H = CSKEY >> 8;                  // Unlock CS registers
  CSCTL4 &= ~LFXTOFF;                     // Enable LFXT
  do
  {
    CSCTL5 &= ~LFXTOFFG;                  // Clear LFXT fault flag  清除 LFXT 失效标志
    SFRIFG1 &= ~OFIFG;
  } while (SFRIFG1 & OFIFG);              // Test oscillator fault flag  如果失效标志存在
  CSCTL0_H = 0;                           // Lock CS registers
}

void LCD_Config(void)  // MSP430FR6972
{
         //Initialize LCD segments 0 - 15;  18 - 21; 24 ; 28 - 30
  LCDCPCTL0 = 0xFFFF;
  LCDCPCTL1 = 0x713C;
  LCDCPCTL2 = 0x0000;                                //设置LCD管脚 L0 - L15; L18 - L21; L24 ; 28 - 30 pins selected

  // Initialize LCD_C
  // ACLK, Divider = 1, Pre-divider = 16; 4-pin MUX
  LCDCCTL0 = LCDDIV__1 | LCDPRE__16 | LCD4MUX | LCDLP;

  // VLCD generated internally,
  // V2-V4 generated internally, v5 to ground
  // Set VLCD voltage to 2.60v
  // Enable charge pump and select internal reference for it
  LCDCVCTL = VLCD_2_96 | VLCDREF_0 | LCDCPEN;

  LCDCCPCTL = LCDCPCLKSYNC;               // Clock synchronization enabled

  LCDCMEMCTL = LCDCLRM;                   // Clear LCD memory
   
  //Turn LCD on
  LCDCCTL0 |= LCDON;  // 打开LCD
}
QIHAO74
3楼-- · 2019-03-24 03:45
void CLOCK_Config()// MSP430FR4133
{
        P4SEL0 |= BIT1 + BIT2;                  // Select pin4.1 pin4.2 as crystal function
        do
        {
                CSCTL7 &= ~(XT1OFFG + DCOFFG);            // Clear XT1 and DCO fault flag  清除 XT1 DCO 失效标志
                SFRIFG1 &= ~OFIFG;
        }while (SFRIFG1 & OFIFG);                     // Test oscillator fault flag  如果失效标志存在

        CSCTL4 = SELA__XT1CLK;                                        // IMPORTANT. Select ACLK = XT1 = 32768Hz
}

void LCD_Config(void)   // MSP430FR4133
{
        uint8_t ui8Cnt;
        uint8_t *pLCD = (uint8_t *)&LCDM0;
       
        for (ui8Cnt = 13; ui8Cnt > 0; ui8Cnt--)                        // Clear LCD memory
        *pLCD++ = 0x00;                                        // CLR LCD

        SYSCFG2 |= LCDPCTL;                              // R13/R23/R33/LCDC1/LCDC2 pins selected  设置 LCD功耗

        LCDPCTL0 = 0xFFFF;
        LCDPCTL1 = 0x01FF;                                        //设置 LCD管脚 L0~L24 pins selected

        LCDVCTL = LCDSELVDD + LCDCPEN;                // Mode 2 设置 降低LCD 功耗 片上电荷泵

        LCDCSSEL0 = 0x000F;                                        // 设置 公共极  COM0~3
        LCDCSSEL1 = 0x0000;

  LCDM0 = 0x21;                        // L0 = COM0, L1 = COM1
  LCDM1 = 0x84;
   
        LCDCTL0 |= LCD4MUX + LCDLP + LCDON;        // 打开LCD: 4-mux 模式
}
QIHAO74
4楼-- · 2019-03-24 03:46
 精彩回答 2  元偷偷看……
tiankai001
5楼-- · 2019-03-24 08:15
ADC里面,你把REF寄存器关闭应该可以
tiankai001
6楼-- · 2019-03-24 13:04
QIHAO74 发表于 2019-3-15 11:07
void CLOCK_Config()// MSP430FR4133
{
        P4SEL0 |= BIT1 + BIT2;                  // Select pin4.1 pin ...

  LCDVCTL = LCDSELVDD + LCDCPEN;                // Mode 2 设置 降低LCD 功耗 片上电荷泵

这句话去掉试试

一周热门 更多>

相关问题

    相关文章