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.

MSP430FR5724: 低功耗程序相关问题

Part Number: MSP430FR5724
Other Parts Discussed in Thread: MSPWARE

    while(1)
    {
		if(count==3)
		{
			ADC10CTL0&=~ADC10ENC;
			TB0CTL|=TBSSEL_1+TBCLR;
			TB0CCR0=50000;
			TB0CCTL0|=CCIE;
			__bis_SR_register(LPM0_bits + GIE);
			while(count==3);
		}
		while(ADC10CTL1&ADC10BUSY);
		ADC10CTL0|=ADC10ENC+ADC10SC;
	}

这里是main函数的一部分,您好,请问一下在低功耗的情况下还能用while做相关的判断吗

  • __bis_SR_register(LPM0_bits + GIE);

    执行上一句之后会进入睡眠模式 

    请问您为何要在此加一句进入低功耗呢?

  • #pragma vector=TIMER0_B0_VECTOR
    __interrupt void TIMER0_B0_ISR(void)
    {  
        if(count==3)
    	{
    		time_count++;
    		if(time_count==15)
    		{
    			datadeal();
    		}
    	}
    }

    您好,上面部分是中断里的程序,主要思路是想定时器计时0.05秒,循环14次,一共0.7s,在计时的过程中,想进入低功耗模式,datadeal()函数里有count清零的操作,当count清零以后跳出上面的循环。

  • 在计时的过程中,想进入低功耗模式,

    这个是可以在计时过程中进入低功耗的,如例程所示

    可以在mspware内找到例程 MSP430Ware_3_80_13_03\examples\devices\MSP430FR57xx\MSP430FR57xx_Code_Examples\C

      __bis_SR_register(LPM3_bits + GIE);       // Enter LPM3, enable interrupts

    进入低功耗并打开中断。建议将该语句放在while之外,不然现在的话,后面的语句不能执行

    关于各个低功耗下的时钟情况,您可以看一下用户指南的

    Table 1-2. Operation Modes 

  • 您好,请问一下将该语句放在while之外具体是什么意思,是低功耗后不要加while语句吗

  • 是低功耗后不要加while语句吗

    是的,低功耗语句放在while循环之后,如例程中的使用方式

  •   for (;;)
      {
        __delay_cycles(5000);
        ADC10CTL0 |= ADC10ENC + ADC10SC;        // Sampling and conversion start
        __bis_SR_register(CPUOFF + GIE);        // LPM0, ADC10_ISR will force exit
        __no_operation();                       // For debug only
        if (ADC_Result < 0x1FF)
          P1OUT &= ~BIT0;                       // Clear P1.0 LED off
        else
          P1OUT |= BIT0;                        // Set P1.0 LED on
      }
    
    // ADC10 interrupt service routine
    #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
    #pragma vector=ADC10_VECTOR
    __interrupt void ADC10_ISR(void)
    #elif defined(__GNUC__)
    void __attribute__ ((interrupt(ADC10_VECTOR))) ADC10_ISR (void)
    #else
    #error Compiler not supported!
    #endif
    {
      switch(__even_in_range(ADC10IV,12))
      {
        case  0: break;                          // No interrupt
        case  2: break;                          // conversion result overflow
        case  4: break;                          // conversion time overflow
        case  6: break;                          // ADC10HI
        case  8: break;                          // ADC10LO
        case 10: break;                          // ADC10IN
        case 12: ADC_Result = ADC10MEM0;         
                 __bic_SR_register_on_exit(CPUOFF);                                              
                 break;                          // Clear CPUOFF bit from 0(SR)                         
        default: break; 
      }  
    }

    您好,这是MSP430FR57xx_adc10_01.c中的一部分,想请问这里在for循环中的低功耗程序,是只有当进入中断以后退出低功耗模式才会执行之后的程序吗

  • 您可以看下例程的说明:

    In Mainloop MSP430 waits in LPM0 to save power until ADC10
    // conversion complete, ADC10_ISR will force exit from LPM0 in Mainloop on
    // reti.

    __bis_SR_register(CPUOFF + GIE);        // LPM0, ADC10_ISR will force exit

    上面的语句是进入LPM0等待ADC转换完成

  • 好的,谢谢专家