Проц atmega48PA вводится в Power Down режим:
SMCR = (2<<SM0); // power down sei (); sleep_enable (); sleep_cpu (); // заснул // ждет прерывания sleep_disable(); // проснулся Эта последовательность команд вызывается внутри прерывания по переполнению таймера 0.
Внешнее прерывание настроено так:
void ext_int_init (void) // инициализация внешнего прерывания { EICRA = (3<<ISC00); // The rising edge of INT0 generates an interrupt request. EIMSK = (1<<INT0); }
Прерывание (вне режима сна) работает правильно.
В пдф-е сказано, что в режиме power down внешние прерывания могут быть только типа level, поскольку входные буфера не тактируются. На входе INT0 у меня "0", и будится импульсами "1" (порядка 1-4мс). Проверял, действительно ли в power down: насколько я понимаю, да, потому что таймер-счетчик стоит.
Где я ошибаюсь? Кто сталкивался, кто посоветует? Понимаю, что вопрос может быть даже чисто теоретический, правильно было бы использовать Pin change int и не морочить никому голову, но все же хочется полного понимания процесса, потому что ошибка может закрасться совсем в другом месте.
|