воскресенье, 17 марта 2013 г.

Сторожевой таймер

Сторожевой таймер предназначен для контроля безотказной работы микроконтроллера. Он может осуществлять программный сброс микроконтроллера через определенные промежутки времени. При этом если микроконтроллер работает в нормальном режиме, то он может обнулить счетчик сторожевого таймера до сброса.

Характеристики сторожевого таймера:
  • Отдельный генератор тактовых импульсов (128 кГц)
  • Прерывания и возможность сброса системы
  • Выбор режима генерации сброса от 16 миллисекунд до 8 секунд
  • Режим защиты от сбоев при отключении только программированием fuse
Сторожевой таймер имеет всего один регистр WDTCSR.

7
6
5
4
3
2
1
0
WDIF
WDIE
WDP3
WDCE
WDE
WDP2
WDP1
WDP0

Бит WDIF (7) - флаг поступления прерывания от сторожевого таймера (1 - если поступило прерывание (сбрасывается записью 1 во флаг)).
Бит WDIE (6) - разрешение прерывания от сторожевого таймера при записи в него 1.
Бит WDCE (4) - разрешение изменения режима работы сторожевого таймера (перед изменением режима работы или предделителя необходимо записать 1).
Бит WDE (3) - разрешение сброса системы сторожевым таймером при записи в него 1.
Бит WDP3 (5) и биты WDP2-WDP0 (2 - 0) управляют временем, через которое произойдет сброс или поступит прерывание от сторожевого таймера:
  • 0000 - 2048 циклов (16 мс)
  • 0001 - 4096 циклов (32 мс)
  • 0010 - 8192 цикла (64 мс)
  • 0011 - 16384 цикла (0.125 с)
  • 0100 - 32768 циклов (0.25 с)
  • 0101 - 65536 циклов (0.5 с)
  • 0110 - 131072 цикла (1 с)
  • 0111 - 262144 цикла (2 с)
  • 1000 - 524288 циклов (4 с)
  • 1001 - 1048576 циклов (8 с)
  • 1010 - 1111 - резерв
Стоит также отметить, что при режиме работы (сброс и прерывание) сначала выполняется прерывание, а затем сброс. И если Fuse бит WDTON установлен в 0, в независимости от битов WDE и WDIE регистра WDTCR таймер будет сбрасывать систему по истечении времени на которое он настроен.
Также для сброса системы сторожевым таймером необходимо в бит WDRF (3) регистра MCUSR записать 1 (сбрасывается в 0 принудительно или по включению питания микроконтроллера).