Вот текст процедуры измерения.. Насчет битов, которые можно изменять только при ENC=0 - не нашел нигде (SLAU144B - может устарел уже?). Про ENC есть только фраза, что если сбросить его во время измерения - результат будет непредсказуем.
Вот исходник процедуры измерения. Уже подправлен под "двойной" сброс регистра. MCLK у меня 12 МГц, так какд делитель 8 и время выборки 8 циклов - то времена (те самые 1.4 мксек) должны выдерживаться (я то-же сразу обратил на них внимание, когда не получилось как надо).
/*--------------------------------------------------------------------------------------------*/
/* Процедура измерения напряжения питания AVDD. */
/* Принимает: ничего не принимает. */
/* Возвращает: измеренное значение напряжения питания в единицах АЦП. */
/*--------------------------------------------------------------------------------------------*/
WORD Measure_Power_Level(void)
{
// Включаем внутреннюю опору 2.5В, даем время на ее установление.
ADC10CTL0 = REF2_5V + REFON;
for(register BYTE i = 0; i < 0xff; i++);
// Включаем АЦП:
// опора - внутренняя, относительно "земли", время выборки - 8 циклов,
// выход опорника выключен, однократная выборка,
// АЦП включено, прерывания запрещены,
ADC10CTL0 |= SREF0 + ADC10SHT0 + ADC10ON;
// Измеряем половину питания, источник запуска - ADC10SC,
// двоичное представление результата, синхронизация - MCLK / 8,
// режим однократного измерения по одному каналу.
ADC10CTL1 = 0xb0e0 + ADC10SSEL1;
ADC10DTC0 = ADC10DTC1 = 0;
// Запускаем измерение.
ADC10CTL0 |= (ENC + ADC10SC);
while((ADC10CTL0 & ADC10IFG) == 0);
// Выключаем опору и АЦП.
ADC10CTL0 = 0; // Сбросим запрос прерывания.
ADC10CTL0 = 0; // Выключим все.
// Возвращаем измеренное значение.
return ADC10MEM;
}
Кстати - уведомления об ответах так и не пришли на почту.....