Добрый день!
Кто работал с АЦП MSP430F5528? В DataSheet (slau208m) написано, что "запускающий" бит ADC12SC в регистре
ADC12CTL0 должен сбрасываться сам. У меня не сбрасывается - программа уходит в вечный цикл при проверке
ADC12BUSY. Порогает только принудительный сброс ADC12SC. Привожу исходники, может, кто подскажет,
что я не так понял?
Инициализация:
//
// Initialization of the ADC.
//---------------------------------------------------------------------------
void Init_ADC (void)
{
ADC12CTL0 &= ~ADC12ENC; // ADC12 enable of configuration
ADC12CTL0 |= ADC12REF2_5V + ADC12REFON + ADC12ON; // Set of the reference voltage and ADC12 On.
ADC12CTL1 |= ADC12SSEL0 + ADC12SSEL1; // Set of the SMCLK for ADC.
ADC12MCTL0 = 0x08 ; // Select of the 8 Channel.
}
Работа:
//
// Measure of the battery voltage.
//---------------------------------------------------------------------------
unsigned int Meas_Bat (void)
{
ADC12CTL0 &= ~ADC12ENC; // ADC12 enable of configuration
ADC12MCTL0 = 0x8 ; // Select of the 8 Channel.
ADC12CTL0 |= ADC12ENC + ADC12SC; // ADC12 enable of the conversion.
ADC12CTL0 &= ~ADC12SC; // ADC12 Reset of the Start bit.
// Без этой строки ожидание в следующей строке - бесконечно. А по описанию этот бит должен сбрасываться сам.
while ((ADC12CTL1 & ADC12BUSY) == ADC12BUSY)
{
Clr_WDT; // Clear of trhe Watch Dog Timer.
}
ADC12CTL0 &= ~ADC12ENC; // ADC12 enable of configuration
return (ADC12MEM0);
}