Код
#fuses H4_SW, NOIESO, WDT512, NOFCMEN
void main() {
OSCTUNE = 0x40; // Разрешаем PLL - умножаем входную частоту на 4. В итоге получаем 40МГц.
delay_ms(100); // Задержка для стабилизации генератора
setup_wdt(WDT_ON); // Разрешаем тактирование WDT
printf(" Start of program ");
printf (" RCON: %u", RCON); // Узнаем причину сброса (RCON равен b'00011100' при обычной подаче питания,
// b'00011110' при сбросе от sleep, и b'00010111' при переполнении WDT)
RCON = 0xFF; // Сбрасываем флаги
sleep();
}
void main() {
OSCTUNE = 0x40; // Разрешаем PLL - умножаем входную частоту на 4. В итоге получаем 40МГц.
delay_ms(100); // Задержка для стабилизации генератора
setup_wdt(WDT_ON); // Разрешаем тактирование WDT
printf(" Start of program ");
printf (" RCON: %u", RCON); // Узнаем причину сброса (RCON равен b'00011100' при обычной подаче питания,
// b'00011110' при сбросе от sleep, и b'00010111' при переполнении WDT)
RCON = 0xFF; // Сбрасываем флаги
sleep();
}
Естественно, строки "Start of program" и значение регистра RCON выводятся почти непрерывно.
Кто-нибудь раньше сталкивался с подобными глюками?
Добавлено:
Кстати, а это может быть как-то связано с отключением какой-то периферии при переходе в sleep?
И еще одно, если перед подачей команды SLEEP бит IDLEN = 1 (т.е. при переходе в idle mode) все работает корректно. Но потребление не устраивает ~3mA...