С чем связано такое поведение микроконтроллера - не понимаю. Частота сброса гораздо выше, чем при переполнении WDT, т.е. сразу после подачи команды SLEEP микроконтроллер сбрасывается. Конфигурация - WDT512 (период переполнения - 2 сек.), HS oscillator 10MHz with PLL x 4 (итого 40МГц). Для проверки использую такой код:
Код
#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();
}
Естественно, строки "Start of program" и значение регистра RCON выводятся почти непрерывно.
Кто-нибудь раньше сталкивался с подобными глюками?
Добавлено:Кстати, а это может быть как-то связано с отключением какой-то периферии при переходе в sleep?
И еще одно, если перед подачей команды SLEEP бит IDLEN = 1 (т.е. при переходе в idle mode) все работает корректно. Но потребление не устраивает ~3mA...
Сообщение отредактировал Nikitoc - Jun 30 2011, 13:01