因为看到有资料说停止看门狗可以节省功耗,但是功耗多少却没说。因为要用到(另外顺便问问用了看门狗还会怎样会引起死机?),所以想测一下。
记得以前看到有说定时器不费功耗的,所以顺便也测试一下,当然测试定时器功耗有点变态,因为实际使用中有多少不使用定时器的呢?没意义。
编写了一段程序,分为四个状态,由LaunchPad上的那个按键切换,大家看看是否合适,有问题指出来呀
视频就录了一遍,自己也没看。
结果大致是这样:(具体数字没有记,大概,用自制的电流检测放大设备+万用表电压显示)
状态1,约1.11uA:主程序LPM3
状态2,约1.47uA:主程序LPM3,打开使用32768ACLK作为时钟源的定时器,但是不产生中断
状态3,约1.50uA:主程序循环LPM3,打开使用32768ACLK作为时钟源的定时器,但是产生中断,中断中退出LPM3
状态4,约1.58uA:主程序循环LPM3,打开使用32768ACLK作为时钟源的定时器,但是产生中断,中断中打开看门狗退出LPM3,主程序清看门狗
大家有兴趣的有条件的用牛叉仪器能不能测测?
- //测试msp430G2231的定时器运行功耗及看门狗功耗
- #include "io430.h"
- volatile unsigned char buttonTimes;
- void main( void )
- {
- WDTCTL = WDTPW + WDTHOLD;
-
- P1OUT = BIT3;
- P1DIR = BIT0 + BIT1 + BIT2 + BIT4 + BIT5 + BIT6 + BIT7;
- P1REN = BIT3;
- P1IES = 0;
- P1IFG = 0;
- P1IE=BIT3;
-
- BCSCTL2 = SELM_0 + DIVM_0 + DIVS_0;
- if (CALBC1_1MHZ != 0xFF) {
- DCOCTL = 0x00;
- BCSCTL1 = CALBC1_1MHZ; /* Set DCO to 1MHz */
- DCOCTL = CALDCO_1MHZ;
- }
- BCSCTL1 |= XT2OFF + DIVA_0;
- BCSCTL3 = XT2S_0 + LFXT1S_0 + XCAP_3;
- do
- {
- IFG1 &= ~OFIFG;
- __delay_cycles(50);
- } while (IFG1 & OFIFG);
-
- buttonTimes=0;
- __bis_SR_register(GIE);
-
- while(1)
- {
- LPM3;
- if(buttonTimes==3)
- {
- WDTCTL = WDT_ARST_1000;
- }
- else{
- WDTCTL = WDTPW + WDTHOLD;
- }
- }
- }
- #pragma vector=PORT1_VECTOR
- __interrupt void PORT1_ISR_HOOK(void)
- {
- P1IFG=0;
- buttonTimes++;
- if(buttonTimes==1)
- {
- TACCR0 = 16383;
- TACCTL0=0;
- TACTL = TASSEL_1 + ID_0 + MC_1;
- P1OUT=BIT3+BIT0;
- }
- else if(buttonTimes==2)
- {
- TACCTL0|=CCIE;
- P1OUT=BIT3+BIT1;
- }
- else if(buttonTimes==3)
- {
- WDTCTL = WDT_ARST_1000;;
- P1OUT=BIT3+BIT2;
- }
- else
- {
- buttonTimes=0;
- WDTCTL = WDTPW + WDTHOLD;
- TACTL=0;
- TACCR0=0;
- P1OUT=BIT3;
- }
- }
- #pragma vector=TIMER0_A0_VECTOR
- __interrupt void TIMER0_A0_ISR_HOOK(void)
- {
- LPM3_EXIT;
- }
复制代码
[
本帖最后由 wangfuchong 于 2013-2-20 22:18 编辑 ]