Краткий рассказ:
Каковы условия сброса, которые не устанавливают бит в MCUSR
процессора ATmega, но все же вызывают сброс?
Длинная история:
Я использую обнаружение отключения в ATmega168, и в моем коде есть место для его обработки.Если моя система теряет мощность, конденсатор удерживает ее выше уровня отключения примерно полсекунды, а когда я восстанавливаю питание, процедура обработки отключения отключается успешно.(Я проверяю бит отключения в MCUSR
.)
Однако, когда я медленно уменьшаю напряжение в системе и медленно возвращаю его обратно, процессор перезагружается, и процедура обработки отключения вызываетне работает: MCUSR
равен нулю !!!(Я использую внешний отладчик через DebugWire, чтобы проверить его.)
Что может вызвать это?Если бы это было что-то еще, например, если сторожевой таймер был случайно включен (я не использую его, и отключаю его при запуске), в MCUSR
.
было бы по крайней мере что-то, но это не былони сброса сторожевого таймера (бит 3), сброса отключения (бит 2), внешнего сброса (бит 1) или сброса при включении питания (бит 0), поэтому что не вызвало сброса, если нииз вышеизложенного ??
Еще одна странная вещь: после такого условия в некоторых случаях периодически происходит сброс, всегда со значением ноль в MCUSR.
В противном случае, когда этоне происходит, система работает всегда идеально.
Редактировать:
В другом месте я не смог найти окончательного ответа, какой сброс приводит к переполнению стека, илипохожая ошибка программного обеспечения приводит к?Может быть, это те условия, которые могут перезагрузить процессор и оставить MCUSR в покое?Я думал, что такие условия просто повреждают ОЗУ или, возможно, даже счетчик программ, но не вызывают сброса.