现象:设备自运行一段时间出现死机,目前200台中出现6台,死机后不会被狗咬重启(狗失效),外部无源晶振停振(示波器抓不到波形),只有通过拔插电池或者拉低rest脚才能重启,重启后又正常,在放置一段时间才会出现。
功能:设备启了2个定时器,TA3周期处理主业务,TA2定时触发ADC采集数据。TA3识别采集值,判断被采设备状态,如果异常mcu会从LPM3唤醒进入AM状态,上送数据到汇集,然后在切回LPM3;其中ADC由定时器触发,采用内部基准(初始化时候设置REFON=0),ADC采集完成触发中断,中断搬移数据到数据池。
配置:
定时器:
TA2CTL = 0;
TA2CTL |= TASSEL__ACLK
|MC__UP
|TACLR;
TA2CCTL0 = 0;
TA2CCTL1 = 0;
TA2CCTL0 &= ~(CCIE|CCIFG);
TA2CCTL1 &= ~(CCIE|CCIFG);
TA2R = 0;
TA2CCR0 = 0;
TA2CCR1 = 0;
TA2CCTL1 |= OUTMOD_7;
TA2EX0 = 0;
TA3CTL = 0;
TA3CTL |= TASSEL__ACLK
|MC__UP
|TACLR;
TA3CCTL0 = 0;
TA3CCTL0 &= ~(CCIE|CCIFG);
TA3R = 0;
TA3CCR0 = 0;
TA3EX0 = 0;
初始化完成后配置TA2CCR0,TA2CCR1(TA2CCR0>TA2CCR1); TA3CCR0, 及TA3中断使能。
ADC:
REFCTL0 |= REFVSEL_3;
REFCTL0 &= ~REFON;
ADC12CTL1 |= ADC12SHP
|ADC12CONSEQ_1
|ADC12SHS_5
|ADC12SSEL_0;
ADC12CTL2 |= ADC12RES_2;
ADC12CTL3 |= ADC12CSTARTADD_5 | ADC12TCMAP | ADC12BATMAP;
ADC12MCTL5 |= ADC12VRSEL_1 | ADC12INCH_2 ;
ADC12MCTL6 |= ADC12VRSEL_1 | ADC12INCH_3 | ADC12EOS;
ADC12MCTL7 |= ADC12VRSEL_1 | ADC12INCH_6;
ADC12MCTL8 |= ADC12VRSEL_1 | ADC12INCH_30;
ADC12IER0 = ADC12IE6;
ADC12CTL0 |= ADC12ON
| ADC12MSC
| ADC12ENC
| ADC12SHT1_7;
时钟配置:
PJSEL0 |= PJ_LFXIN + PJ_LFXOUT;
FRCTL0 = FRCTLPW | NWAITS_1;
PM5CTL0 &= ~LOCKLPM5;
CSCTL0_H = CSKEY >> 8;
CSCTL1 = DCOFSEL_4 + DCORSEL;
CSCTL2 = SELA__LFXTCLK |SELM__DCOCLK;
CSCTL3 = DIVA__1
|DIVS__16
|DIVM__1;
CSCTL4 &= ~(LFXTOFF);
do {
CSCTL5 &= ~(LFXTOFFG|HFXTOFFG);
SFRIFG1 &= ~OFIFG;
} while (SFRIFG1&OFIFG);
SFRIE1 |= (OFIE | VMAIE);
CSCTL0_H = 0;
目前怀疑踩到MSP430FR5969Erratasheet.pdf 中PMM24和PMM31
Device may enter lockup state during wake-up from LPM3 and LPM4
Device may enter lockup state during transition from AM to LPM2/3/4
The device might enter lockup state if the MODOSC is requested (e.g. triggered by
ADC) or removed (e.g. end of ADC conversion) during a power mode transition from AM
to LPM2/3/4 (e.g. during ISR exits or Status Register modifications).
麻烦各位大神帮忙看下,谢谢!!