Возникла проблема при использовании спящего режима(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); //Возвращаем принятое
}
}
{
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 читает входящие данные нормально, за исключением первого байта.
Я так понимаю он пропускает его из-за того что процессор просыпается и начинает нормально работать в момент прихода 2-го байта.
Как решить эту проблему ?
А что если соеденить ножку RX и INT0 и будить процессор по этому прирыванию ?
Может кто нибудь уже с этим сталкивался ?
Заранее спасибо.