Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция_7 Сторож_таймер.doc
Скачиваний:
50
Добавлен:
12.03.2015
Размер:
556.03 Кб
Скачать

Режимы работы wdt

Сторожевые таймеры в общем случае допускают следующие режимы работы:

- режим прерывания;

- режим сброса системы;

- режим прерывания и сброса системы;

- таймер остановлен.

Установка режимов работы таймера может осуществляться как в процессе функционирования системы, так и на этапе программирования.

Управление режимами работы в процессе функционирования

Рассмотрим сначала возможности управления режимами работы таймера, которые могут быть реализованы в процессе функционирования системы. Установка указанных режимов осуществляется установкой соответствующих бит регистра управления WDTCR.

В табл. 7.2 показаны все режимы сторожевого таймера.

WDTON

WDE

WDIE

Режим работы WDT

Действие по истечении контрольного времени

0

0

0

Таймер остановлен

Нет

0

0

1

Режим прерывания

Вызов прерывания

0

1

0

Режим сброса

Системный сброс

0

1

1

Режим прерывания и сброса

Вызов прервания и переход к системному сбросу

1

х

Х

Режим сброса

Системный сброс

Если оба флага (WDE и WDIE) сброшены, то сторожевой таймер остановлен.

Нормальный режим работы (режим сброса)

Если установлен только бит WDE – то сторожевой таймер работает в режиме системного сброса. В нормальном режиме работы необходимо, чтобы программа периодически сбрасывала охранный таймер при помощи команды WDR. Программа должна быть написана таким образом, чтобы команда сброса всегда приходила раньше, чем содержимое таймера достигнет конца. Если система зависнет и перестанет перезапускать счетчик, то он досчитает конца. Это вызовет прерывание или системный сброс. В результате программа начнет работать сначала.

Режим прерывания

Если установлен только бит WDIE то сторожевой таймер работает в режиме прерывания.

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

Пробуждение происходит таким же образом, как в случае прерывания от систем­ного таймера. Один из вариантов использования такого режима – ограничение максимального времени выполнения некоторых операций. Таймер вызывает прерывание, если выполнение операции происходит дольше, чем положено.

Режим прерывания и системного сброса

Если оба флага (WDE и WDIE) установлены, охранный таймер переходит в режим прерывания со сбросом. В этом режиме первое срабатывание ох­ранного таймера установит флаг WDIF. Как только начнется процедура обработки прерывания, флаги WDIE и WDIF автоматически очистятся, а сторожевой таймер перейдет в режим сброса.

Этот режим объединяет возможности двух первых режимов. Сначала вызывается прерывание, а затем происходит системный сброс. Этот режим применяется, например, в том случае, когда перед вызовом системного сброса необходимо сохранить важные параметры.

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

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

Таймеры, реализующие режимы прерывания имеют несколько усложненную функциональную схему формирования сигналов сброса и прерывания (рис.7.2.)

Рис.7.2. Функциональная схема МК AVR AT2313.

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

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

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

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

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

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

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

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

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

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

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

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

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

Отключение сторожевого таймера с уровнем защиты 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) – сброс сторожевого таймера.

Установка с уровнем защиты – 0.

Для семейства Classic и Tiny для включения достаточно установить бит WDE в единичное состояние, одно­временно, если надо, устанавливается и период таймера битами WDP2:0 того же регистра, задающими коэффициент деления генератора (состояние 000 соответствует минимальному периоду ~ 15 мс, 110 - примерно 1 с, 111 зада­ет максимальный период немного менее 2 с). Перед такими операциями все­гда рекомендуется сбрасывать WDT командой wdr (иначе таймер может на­чать отсчет не с начала, и произойдет непроизвольный сброс МК), как пока­зано в листинге 7.2.

Листинг 7.2

сli

wdr

ldi tmp, (1<<WDE) I (l<<WDP2) I (l<<WDP1) I (l<<WDP0)

out WDTCR,tmp

sei

Установка с уровнем защиты – 1.

Для семейства Mega процедура несколько сложнее: сначала нужно устано­вить биты WDCE И WDE одновременно, потом повторно разрешить работу уста­новкой WDE и одновременно установить коэффициент деления, но при сбро­шенном WDCE: (листинг 7.3).

Листинг 7.3

сli

wdr

ldi tmp, (l<<WDCE) I (l<<WDE)

out WDTCR,tmp

ldi tinр, (l«WDE) I (l«WDP2) I (l«WDPl.) I (l«WDP0)

out WDTCR,tmp

sei

Процедура выключения одинакова для всех моделей и аналогична включе­нию в предыдущем случае (листинг 7.4).

Листинг 7.4

cli

wdr

ldi tmp, (l«WDCE) I (l«WDE)

out WDTCR,tmp

ldi tmp, (O«WDE)

out WDTCR,tmp

sei

После того как мы разобрались с включением, WDT начинает постоянно "молотить" (в том числе и в режиме энергосбережения), и чтобы избежать сброса МК в нормальном режиме работы программы, таймер следует перио­дически сбрасывать командой wdr - paньше, чем истечет заданный период. Обычно это делается по какому-либо прерыванию, например:

ЕХТ INT0:

wdr ;сброс сторожевого таймера

Предположим, что мы установили WDT на период 2 с, а прерывание должно возникать каждую секунду, то командой wdr мы сбрасываем таймер WDT заведомо раньше, чем он сработает, и тогда он начнет отсчет выдержки сначала. Если же что-то (часы или программа) "повиснет", то произойдет общий сброс МК.

Внешний сброс

Внешний или аппаратный сброс реализуется подачей сигнала низкого уровня на вывод /RST. Сигнал низкого уровня должен сохраняться как минимум два пе­риода такта системной синхронизации. Нарастающий фронт сигнала на выводе сброса /RST после превышения порогового напряжения включения V RST приводит в действие счетчик задержки Z1 (рис. 7.3), и, следовательно, - внутренний сиг­нал сброса. По истечение времени tTOUT внутренний процесс сброса заканчивается, и микроконтроллер переходит к выполнению программы, начиная с адреса 0.

Рис.7.3.

Сброс от сторожевого таймера

При срабатывании сторожевой таймер генерирует короткий импульс сброса продолжительностью один период такта системной синхронизации. Нарастающий фронт этого импульса инициирует внутренний процесс сброса, а ниспадающий фронт активизирует счетчик задержки (рис. 7.4).

Рис.7.4.

После формирования задержки tтouт внутренний процесс сброса заканчивает­ся, и микроконтроллер переходит к выполнению про граммы, начиная с адреса О. Подробнее этот процесс рассматривается в главе 5, "Сторожевой таймер".

Регистр MCUCSR

12

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]