Из всех найденных описаний (рабочих примеров не встретил) я понял, что после установки режима проц должен остановится потом отработать прерывание ADC и продолжить выполнение основного кода. Делал так:
Код
...
ISR (ADC_vect)
{
// Тут ничего
}
...
void main(void)
{
init_uart();
init_adc();
sei();
while(1)
{
ADCSRA |= (1<<ADSC); // Запуск преобразования
MCUCR |= (1<<7); // Разрешение засыпания
MCUCR |= (1<<SM0); // Включение в ADC Noise Reduction
uart_putchar(ADCH); // ADCH, поскольку 8-ми разрядный режим.
}
}
ISR (ADC_vect)
{
// Тут ничего
}
...
void main(void)
{
init_uart();
init_adc();
sei();
while(1)
{
ADCSRA |= (1<<ADSC); // Запуск преобразования
MCUCR |= (1<<7); // Разрешение засыпания
MCUCR |= (1<<SM0); // Включение в ADC Noise Reduction
uart_putchar(ADCH); // ADCH, поскольку 8-ми разрядный режим.
}
}
Пробовал разные вариации, первой была сначала разрешить засыпание, потом инициировать преобразование, потом включить режим ADC Noise Reduction. Все равно не получается.
Общая картина такова, не взирая на желание усыпить проц, он продолжает выполнять команды. Изредка цикл прерывается выполненным преобразованием.
Может быть инициировать преобразование после переключения в ADC NR режим? Но по идее, к этому времени он уже должен спать.
Подскажите как побороть этот режим

PS. Заметил странность VMLAB бит SE регистра MCUCR считает 6-тым, в то время как по ДШ он 7-ой (последний). Я пробовал и так и так. Камень - Atmega32.