Добрый день! Кто работал с АЦП 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); }
|