Появилась необходимость задействовать внутренний АЦП, для измерения сигнала на одном канале - А3 (Р6.3), запуск вручную битом "ADC12SC". Вроде бы все просто. Но где то по видимому допустил ошибку, потому что после запуска преобразования бит "ADC12BUSY" в регистре "ADC12CTL1" устанавливается и... стоит. Т.е. sample-and-conversion начинается, но не заканчивается.
Вот код инициализации АЦП:
Код
ADC12CTL0 = 0;
ADC12CTL1 = 0;
ADC12IE = 0;
// ножку подключим к АЦП (ADC_SEL_PORT - P6SEL, A3_I1 - 3)
ADC_SEL_PORT |= A3_I1;
// АЦП включен, опора внутренняя - 1.5В
ADC12CTL0 = SHT0_0|SHT1_0|REFON|ADC12ON;
// клоки - от АCLK (38400)
ADC12CTL1 = CSTARTADD_0|ADC12SSEL_1;
// VR+ = VREF+ and VR-- = AVSS
ADC12MCTL0 = SREF_1 | INCH_3 | EOS;
// прерывания не нужны
ADC12IE = 0;
ADC12IFG = 0;
ADC12CTL1 = 0;
ADC12IE = 0;
// ножку подключим к АЦП (ADC_SEL_PORT - P6SEL, A3_I1 - 3)
ADC_SEL_PORT |= A3_I1;
// АЦП включен, опора внутренняя - 1.5В
ADC12CTL0 = SHT0_0|SHT1_0|REFON|ADC12ON;
// клоки - от АCLK (38400)
ADC12CTL1 = CSTARTADD_0|ADC12SSEL_1;
// VR+ = VREF+ and VR-- = AVSS
ADC12MCTL0 = SREF_1 | INCH_3 | EOS;
// прерывания не нужны
ADC12IE = 0;
ADC12IFG = 0;
а вот так выглядит запуск преобразования:
Код
ADC12CTL0 |= ENC|ADC12SC;
__no_operation();__no_operation();__no_operation();__no_operation();
while ( ADC12CTL1 & ADC12BUSY ) __no_operation();
__no_operation();__no_operation();__no_operation();__no_operation();
while ( ADC12CTL1 & ADC12BUSY ) __no_operation();
В "ADC12CTL1" ADC12BUSY не снимается (по ЮзерМануалу он только для чтения, т.е. сбрасывать его руками вроде как не нужно...).
Может кто заметит какой нибудь косяк?

П.С. АCLK пашет, от него работает один таймер, и пробовал выводить наружу аппаратно через Р5.6 (ACLK), смотрел осциллом - все нормально.