ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
27 ноября
104038 Топик полностью
rezident (31.10.2007 19:05, просмотров: 89) ответил Алехин Александр на Вот текст процедуры измерения..
Ответ >> Насчет битов, которые можно изменять только при ENC=0 - не нашел нигде (SLAU144B - может устарел уже?) Про ENC есть только фраза, что если сбросить его во время измерения - результат будет непредсказуем. Дык в разделе ADC10 Registers имеется примечание Modifiable only when ENC = 0 во всех ревизиях (A, B, C) User's Guide. У меня Rev.C последняя числится. Еще два замечания по стилю написания программы. 1) Не пользуйтесь арифметическим сложением "+" при формировании байта/слова из отдельных битов. Пользуйтесь логическим ИЛИ "|". При использовании сложения легко ошибиться, а дважды просуммировав один бит уже получится совсем другое значение REFON + REFON == REF2_5V а вот REFON | REFON == REFON 2) по возможности используйте общепринятые TI символьные обозначения битов. Иначе текст слабочитаемый получается. Приходится долго и нудно, сверяясь с описанием регистров, проверять какие именно биты установлены, а какие сброшены. Вот мой вариант вашей процедуры (для IAR EW430), который должен работать. Проверьте и сообщите результат. <c> unsigned Measure_Power_Level(void) { unsigned cntr; ADC10CTL0 &=~ENC; ADC10CTL0 = SREF0 | ADC10SHT0 | REF2_5V | REFON | ADC10ON; for (cntr=0; cntr<0xff; cntr++); ADC10CTL1 = INCH_11 | ADC10DIV_7 | ADC10SSEL_2; ADC10DTC0 = ADC10DTC1 = 0; ADC10CTL0 |= ENC | ADC10SC; while((ADC10CTL0 & ADC10IFG) == 0); ADC10CTL0 &=~ (ENC | ADC10SC | ADC10IFG); cntr = ADC10MEM; ADC10CTL0 &=~ (REFON | ADC10ON); return (cntr); } </c>