Сообщение от Саня888
|
.
|
Чтобы включить программно собачий таймер в режиме RESET необходимо:
- очистить бит WDRF в регистре MCUSR записью в него "0"
- битами WDP3, WDP2, WDP1 и WDP0 в регистре WDTCSR выставить необходимый интервал переполнения пса
- установить в "1" бит WDE в этом же регистре (WDTCSR).
При этом сразу запускается собачий таймер, который можно периодически обнулять командой WDR. Если его не обнулять, то переполнение собачьего таймера приведет к системному сбросу микроконтроллера.
Что бы определить, кто вызвал ситемный сброс необходимо посмотреть какой флаг установлен в "1" в регистре MCUSR и очистить в нем все флаги.
Чтобы включить аппаратно собачий таймер в режиме RESET необходимо:
- при прошивке микроконтроллера установить в "0" фьюс WDTON
- далее в программе не забывать команду WDR иначе опять окажетесь в системном сбросе.
Чтобы включить программно собачий таймер в режиме INTERRUPT необходимо:
- битами WDP3, WDP2, WDP1 и WDP0 в регистре WDTCSR выставить необходимый интервал переполнения пса
- разрешить прерывание от пса записью "1" в WDIE в регистре WDTCSR
- разрешить прерывания командой SEI.
При этом сразу запускается собачий таймер, который можно периодически обнулять командой WDR. Если его не обнулять, то переполнение собачьего таймера приведет к вектору WDT OVERFLOW. WDIE должен быть установлен после обработки каждого прерывания от пса.
В комбинированном режиме ( установлены в "1" и WDIE и WDE) при первом переполнении пса произойдет прерывание (при этом очистится WDIE) при каждом последующем переполнении пса будут происходить системные сбросы.
Так как не было вопроса как выключить сторожевой таймер, на этом все.