Опять у меня проблемы с этми 4217 - теперь АЦП не хочет работать. Не завершает измерение - нет готовности. Вот код:
ADC12CTL0 = 0; // Сбросим ENC.
// Синхронизация преобразования - MCLK / 8, однократный одноканальный режим,
// запуск по ADC12SC биту, сохранение в ADC12MEM0.
ADC12CTL1 = ADC12DIV_7 | ADC12SSEL_2;
// Время выборки - 8 циклов, АЦП включено, прерывания запрещены, опора 1.5 Вольта включена.
ADC12CTL0 = SHT0_1 | REFON | ADC12ON;
for(register BYTE i = 0; i < 0xff; i++);
// Измеряем половину питания.
ADC12MCTL0 = EOS | SREF1 | INCH_11;
ADC12CTL0 |= ENC;
ADC12CTL0 |= (ENC | ADC12SC);
BYTE i = 255; while(((ADC12CTL1 & ADC12BUSY) != 0) && (--i != 0));
// Выключаем опору и АЦП.
ADC12CTL0 = 0; // Сбросим ENC.
ADC12CTL0 = 0; // Выключим все.
// Возвращаем откорректированное измеренное значение.
return (ADC12MEM0 + Coeff.Power_Level_Adj);
В общем не хочет флаг ADC12BUSY сбрасываться. При этом разрешал прерывания - их так-же нет. Такое ощущение, что частоты синхронизции на АЦП нет. Пробовал и от внутреннего генератора не помогает.
Да - код скопирован с 2274 (ADC10), подправлен под ADC12.