Part Number:MSP430FR5724Other 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做相关的判断吗
Susan Yang:
__bis_SR_register(LPM0_bits + GIE);
执行上一句之后会进入睡眠模式
请问您为何要在此加一句进入低功耗呢?
,
user6580316:
#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清零以后跳出上面的循环。
,
Susan Yang:
user6580316 说:在计时的过程中,想进入低功耗模式,
这个是可以在计时过程中进入低功耗的,如例程所示
可以在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
,
user6580316:
您好,请问一下将该语句放在while之外具体是什么意思,是低功耗后不要加while语句吗
,
Susan Yang:
user6580316 说:是低功耗后不要加while语句吗
是的,低功耗语句放在while循环之后,如例程中的使用方式
,
user6580316:
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 onlyif (ADC_Result < 0x1FF)P1OUT &= ~BIT0;// Clear P1.0 LED offelseP1OUT |= 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)){case0: break;// No interruptcase2: break;// conversion result overflowcase4: break;// conversion time overflowcase6: break;// ADC10HIcase8: break;// ADC10LOcase 10: break;// ADC10INcase 12: ADC_Result = ADC10MEM0;__bic_SR_register_on_exit(CPUOFF);break;// Clear CPUOFF bit from 0(SR)default: break;}}您好,这是MSP430FR57xx_adc10_01.c中的一部分,想请问这里在for循环中的低功耗程序,是只有当进入中断以后退出低功耗模式才会执行之后的程序吗
,
Susan Yang:
您可以看下例程的说明:
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转换完成
,
user6580316:
好的,谢谢专家
,
Susan Yang:
不客气`~