Отключение сторожевого таймера с уровнем защиты 1.

Уровни защиты установленного режима работы WDT

Установка режимов работы таймера на этапе программирования.

 

В некоторых моделях Tiny и во всех Mega есть специальные fusе- регистры, доступные только при подключении программаторов (отладчиков), указанные регистры доступны только на этапе программирования кристаллов и соответственно на этом этапе могут быть использованы для установки требуемого режима.

Один из битов fusе- регистра, а именно бит WDTON в некоторых моделях МК серии AVR используется для установки режима сброса. Т.е. при помощи соответствующего fusе- переключателя (WDTON) можно установить режим, при котором сторожевой таймер постоянно включен, и при этом срабатыва­ние таймера всегда вызывает сброс системы. В результате выполнения указанной операции бит системного сброса (WDE) и бит режима прерывания (WDIE) приобретают фиксиро­ванные значения 1 и 0 соответственно.

По умолчанию fusе- бит WDTON находится в незапрограммиро­ванном состоянии (лог. 1), означающее, что WDT выключен, и для приведе­ния в действие его следует специально инициализировать.

Наличие WDTON - довольно удобное свойство для того, чтобы не возиться с включением WDT самостоятельно, но оно в значительной мере обесценива­ется тем фактом, что по умолчанию сторожевой таймер запрограммирован на минимальный интервал (~15 мс), который все равно, как правило, приходится увеличивать.

Это так называемое аппаратное включение охранного таймера (WDTON) для режима повышенной надежности.

 

Если установлен разряд WDE (WatchdogЕnable), то сторожевой таймер акти­вен. Если разряд WDE сброшен (лог. 0), то сторожевой таймер отключен.

Для предотвращения самопроизвольного, например, при понижении напряжения питания, или непреднамеренного изменения режима работы WDTдолжна быть реализована специальная последовательность действий. Сложность этой последовательности (количество операций, которое необходимо выполнить для изменения режима работы таймера) определяется уровнем защиты режима.

Возможна реализация трех уровней защиты режимов работы WDT.

0 – защита отсутствует и режимы работы могут быть изменены путем изменения одного бита WDE (WatchdogЕnable);

1 – защита установлена, при этом режимы работы могут быть изменены путем выполнения специальной последовательности команд, изменяющих бит WDE и WDTOE(Watchdog Turn Off Еnable);

2 – выключить таймер программными средствами невозможно, можно только изменить его параметры (длительность).

 

 

Во из­бежание непреднамеренного отключения сторожевого таймера, разряд WDE мо­жет быть сброшен только в том случае, если установлен разряд WDTOE.

Для отключения активного сторожевого таймера необходимо выполнить сле­дующую последовательность действий.

1. С помощью одной команды должны быть установлены разряды WDE и WDTOE. Если сторожевой таймер активен, разряд WDE необходимо устано­вить даже в том случае, если ранее он уже был установлен.

2. На протяжении последующих четырех импульсов такта системной синхрони­зации в разряд WDE записывается лог. 0, что приводит к отключению сторо­жевого таймера.

После установки разряда WDTOE он в течение четырех периодов такта системной синхронизации остается в состоянии лог. 1, а затем аппаратно сбрасывается в лог. 0. Программа пользователя имеет возможность отключить сторожевой таймер посредством записи лог.0 в разряд WDE только во время этих четырех тактов системной синхронизации.

Рассмотрим в качестве примера короткую программу, демонстрирующую от­ключение активного сторожевого таймера.

 

 

Листинг 7.1

 

sbr r16, 1<<WDTOE | 1<<WDE ;установка разрядов WDE и WDTOE

out WDTCR, r16 ;WDTCR обратно, WDE+WDTOE=1

cbr r16, 1<<WDE ;стираем разряд WDE

out WDTCR, r16 ; WDTCR записываем повторно

nop ;

nop ;

nop ; WDTOE сбрасывается аппаратно

 

 

Ожидать истечения времени до сброса разряда WDTOE не обязательно. Три команды пор в представленном выше листинге предназначены только для обозна­чения момента времени сброса.

 

Для активизации сторожевого таймера в подобной процедуре нет необходи­мости. Достаточно просто установить разряд WDE в лог. 1.

 

Команда сброса сторожевого таймера в исходное состояние : WDR.

 

WDR – (Watchdog Reset) – сброс сторожевого таймера.