Цитата(Ruslan Konovalov @ Oct 7 2008, 07:33)

Всем добрый день.
Возникла проблема при использовании спящего режима(Idle mode) в Atmega8.
Вот код(не полный):
Код
void main(void)
{
MCUCR |= (0<<SM2)|(0<<SM1)|(0<<SM0); //Idle mode
init_Usart();
__enable_interrupt();
for(;;)
{
MCUCR |= (1<<SE); //Разрешение спящего режима
asm("sleep"); //Сон
Usart_read(); //Читаем строку
Usart_Send_Str(UsartBuff); //Возвращаем принятое
}
}
Проблема заключается в том, что при использовании спящего режима Usart читает входящие данные нормально, за исключением первого байта.
.
Idle mode enables the MCU to wake up from external triggered interrupts as well as
internal ones like the Timer Overflow and
USART Transmit Complete interrupts. If
wake-up from the Analog Comparator interrupt is not required, the Analog Comparator
can be powered down by setting the ACD bit in the Analog Comparator Control and Status
Register – ACSR. This will reduce power consumption in Idle mode. If the ADC is
enabled, a conversion starts automatically when this mode is entered.
Мне кажется функцию приема нужно организовать по прерыванию от RXC.
Цитата(VladimirYU @ Oct 7 2008, 12:04)

Idle mode enables the MCU to wake up from external triggered interrupts as well as
internal ones like the Timer Overflow and USART Transmit Complete interrupts. If
wake-up from the Analog Comparator interrupt is not required, the Analog Comparator
can be powered down by setting the ACD bit in the Analog Comparator Control and Status
Register – ACSR. This will reduce power consumption in Idle mode. If the ADC is
enabled, a conversion starts automatically when this mode is entered.
Мне кажется функцию приема нужно организовать по прерыванию от RXC.
Немного не так выделил.