Отключение сторожевого таймера с уровнем защиты 1.
Во избежание непреднамеренного отключения сторожевого таймера, разряд 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) – сброс сторожевого таймера.
Дата добавления: 2015-08-14; просмотров: 645;