Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЦМПУ / Новая папка (1) / ЦИМПУ(atmega 128).doc
Скачиваний:
102
Добавлен:
16.04.2015
Размер:
4.2 Mб
Скачать

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

Основная функция сторожевого таймера − защита устройства от сбо­ев. Благодаря сторожевому таймеру можно прервать выполнение зацик­лившейся программы или выйти из других непредвиденных ситуаций, препятствующих нормальному выполнению программы.

Структурная схема сторожевого таймера приведена на рисунке 9.7.

Рис. 9.7 Структурная схема сторожевого таймера

Сторожевой таймер имеет независимый генератор, поэтому он работает даже во время нахождения микроконтроллера в режиме Power Down. Час­тота этого генератора зависит от напряжения питания устройства, темпера­туры, технологического разброса. Типовое значение частоты равно 1 МГц при VCC = 5 В и 350 кГц при VCC = 3 В.

Если сторожевой таймер включен, то через определенные промежутки времени (при наступлении тайм-аута) выполняется сброс микроконтролле­ра. Чтобы избежать сброса ми­кроконтроллера при нормальном выполнении программы, сторожевой тай­мер необходимо регулярно сбрасывать через промежутки времени, меньше его периода. Сброс сторожевого таймера осуществляется командой WDR. Для управления сторожевым таймером предназначен регистр WDTCR, расположенный по адресу $21 ($41). Формат этого регистра приведен на рисунке 9.8.

Бит

7

6

5

4

3

2

1

0

$21($41)

-

-

-

WDTOE

WDE

WDP2

WDP1

WDP0

Чт./зап.

Нач.знач.

R

0

R

0

R

0

R

0

R/W

0

R/W

0

R/W

0

R/W

0

Рис. 9.8 Регистр управления сторожевым таймером − WDTCR

Для включения/выключения сторожевого таймера используются два разряда регистра WDTCR - WDE и WDTOE. Если разряд WDE установ­лен в “1”, сторожевой таймер включен, если сброшен в “0” − выключен. Непосредственно перед включением таймера рекомендуется также выпол­нять его сброс командой WDR.

Чтобы избежать непреднамеренного выключения таймера/счетчика, предназначен разряд WDTOE. Дело в том, что выключение сторожевого таймера (сброс разряда WDE) можно осуществить только при установлен­ном разряде WDTOE. Причем через 4 машинных цикла после установки в “1” этот разряд аппаратно сбрасывается, благодаря чему практически ис­чезает возможность случайного выключения сторожевого таймера.

Исходя из сказанного, для выключения сторожевого таймера рекомен­дуется следующая последовательность действий:

  1. Одной командой записать лог. “1” в разряды WDE и WDTOE.

  2. В течение следующих четырех машинных циклов записать лог. “0” в разряд WDE.

Период наступления тайм-аута сторожевого таймера задается с помощью разрядов WDP2...WDPO регистра WDTCR согласно таблице 9.16.

Таблица 9.16 Задание периода сторожевого таймера

WDP2

WDP1

WDP0

Период времени

0

0

0

16 мс

0

0

1

32 мс

0

1

0

64 мс

0

1

1

128 мс

1

0

0

256 мс

1

0

1

512 мс

1

1

0

1024 мс

1

1

1

2048 мс

Чтобы избежать непреднамеренного сброса микроконтроллера при из­менении периода сторожевого таймера, необходимо перед записью разря­дов WDP2:WDP0 либо запретить работу сторожевого таймера, либо сбро­сить его.

Соседние файлы в папке Новая папка (1)