Quantcast
Channel: MSP 低功耗微控制器论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 3634

MSP430FR5969 ADC模块异常 重启不恢复

$
0
0

现在用定时器控制ADC以32K的频率采样,采用的是序列通道单次采样模式,可是有时候ADC模块出现异常,即当busy标志位为1时,当定时器再次开启ADC模块启动采样时,ADC不再产生中断,并且看门狗发挥作用,单片机整体重启后,ADC模块依然异常,只有当按单片机的复位按键后,busy标志位才清零,单片机才能恢复正常。

void ADC_Cfg(void)
{
P1SEL1 |= BIT2|BIT3|BIT4; // A2 A3 A4
P1SEL0 |= BIT3|BIT4;
P2SEL1 |= BIT3|BIT4; // A6 A7
P2SEL0 |= BIT3|BIT4;
P3SEL1 |= BIT3; // A15
P3SEL0 |= BIT3;

PM5CTL0 &= ~LOCKLPM5;
ADC12CTL0 &=~ ADC12ENC; //初始化在ENC = 0下修改

/*************************************************************************/

ADC12CTL0 = ADC12SHT0_0 | ADC12ON|ADC12MSC; // ADC
ADC12CTL1 = ADC12SHP|ADC12CONSEQ_1|ADC12SSEL_2; // 序列通道单次采集
ADC12CTL2 = ADC12RES_2; //12位的转换精度
ADC12MCTL0 |= ADC12INCH_2 | ADC12VRSEL_4; // 
ADC12MCTL1 |= ADC12INCH_3 | ADC12VRSEL_4; // 
ADC12MCTL2 |= ADC12INCH_4 | ADC12VRSEL_4; // 

ADC12MCTL3 |= ADC12INCH_6 | ADC12VRSEL_4; // 
ADC12MCTL4 |= ADC12INCH_7 | ADC12VRSEL_4; // 
ADC12MCTL5 |= ADC12INCH_15 | ADC12VRSEL_4|ADC12EOS; /
ADC12IER0 = ADC12IE5; // Enable ADC conv complete interrupt
ADC12CTL0 &=~ ADC12ON;
ADC12CTL0 |= ADC12ENC;

}

#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector = TIMER0_A0_VECTOR
__interrupt void TIMER0_A0_ISR (void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(TIMER0_A0_VECTOR))) TIMER0_A0_ISR (void)
#else
#error Compiler not supported!
#endif
{
uchar busy_i=0;
while(ADC12CTL1&ADC12BUSY) //启动ADC
{ busy_i++; if(busy_i>>3) break; }
ADC12CTL0 &=~ (ADC12ENC);
ADC12CTL0 |= ADC12ON|ADC12SC|ADC12ENC;
}


Viewing all articles
Browse latest Browse all 3634

Trending Articles