Skip to main content

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

Сторожевой таймер предназначен для принудительной перезагрузки системы в случае ее зависания. В основе таймера лежим счетчик разрядностью 32 бита со счетом «вниз». Модуль формирует регулярное прерывание INT_WDT в зависимости от запрограммированного значения. Каждый такт синхросигнала значение счетчика уменьшается на единицу. Когда значение счетчика достигает 0, формируется сигнал прерывания. Затем счетчик перезагружается и заново начинает отсчет к нулю. Если к моменту, когда счетчик достиг заново значения 0, прерывание не очищено, то в систему формируется сигнал сброса WDT_RST. Таким образом, сторожевой таймер предоставляет возможность восстановления системы после сбоя программного обеспечения. При необходимости модуль может быть выключен.

Регистры сторожевого таймера

АббревиатураДоступОписание
2200hWDT_LOAD0RWПериод счета сторожевого таймера 0
2201hWDT_LOAD1RWПериод счета сторожевого таймера 1
2202hWDT_LOAD2RWПериод счета сторожевого таймера 2
2203hWDT_LOAD3RWПериод счета сторожевого таймера 3
2204hWDT_VAL0RТекущее значение сторожевого таймера 0
2205hWDT_VAL1RТекущее значение сторожевого таймера 1
2206hWDT_VAL2RТекущее значение сторожевого таймера 2
2207hWDT_VAL3RТекущее значение сторожевого таймера 3
2208hWDT_CTRLRWРегистр управления
220СhWDT_CLRWРегистр сброса прерывания
2210hWDT_INTRAWRРегистр исходного прерывания
2214hWDT_INTRРегистр маскируемого прерывания
2218hWDT_LOCKRWРегистр блокировки доступа к сторожевому таймеру
221СhWDT_TCRRWРегистр перехода в тестовый режим
2220hWDT_TOPWРегистр управления в тестовом режиме

WDT_LOAD0

Регистр содержит значение, с которого счетчик начнет уменьшаться. При перезаписи данного регистра таймер немедленно стартует с записанного значения. Минимальное допустимое значение для WDT_LOAD равно 1. 32-х разрядное значение поместится в регистр сторожевого таймера в момент записи в данный регистр.

Бит76543210
НазначениеVALUE
Начальное значение0

VALUE – период счета сторожевого таймера, младшая часть.

WDT_LOAD1

Бит76543210
НазначениеVALUE
Начальное значение0

VALUE – период счета сторожевого таймера, биты <15:8>.

WDT_LOAD2

Бит76543210
НазначениеVALUE
Начальное значение0

VALUE – период счета сторожевого таймера, биты <23:16>.

WDT_LOAD3

Бит76543210
НазначениеVALUE
Начальное значение0

VALUE – период счета сторожевого таймера, старшая часть.

WDT_VAL0

Бит76543210
НазначениеCURRENT_VALUE
Начальное значение0

CURRENT_VALUE – текущее значение таймера, младшая часть.

WDT_VAL1

Бит76543210
НазначениеCURRENT_VALUE
Начальное значение0

CURRENT_VALUE – текущее значение таймера, биты <15:8>.

WDT_VAL2

Бит76543210
НазначениеCURRENT_VALUE
Начальное значение0

CURRENT_VALUE – текущее значение таймера, биты <23:16>.

WDT_VAL3

Бит76543210
НазначениеCURRENT_VALUE
Начальное значение0

CURRENT_VALUE – текущее значение таймера, старшая часть.

WDT_CTRL

Бит76543210
НазначениеРезервRST_ENINT_EN
Начальное значение0

RST_EN – разрешение на формирование сигнала сброса по завершению счета таймера:

  • 1 – сброс разрешен;
  • 0 – сброс запрещен.
     

INT_EN – разрешение на формирование прерывания по окончанию счета таймера:

  • 1 – прерывание разрешено;
  • 0 – прерывание запрещено.

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

WDT_CLR

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

Бит76543210
НазначениеCLEAR
Начальное значение0

WDT_INTRAW

Данный регистр указывает на необработанное прерывание от счетчика. На основании данного сигнала формируется маскируемое прерывание.

Бит76543210
НазначениеРезервRAW_WDT
Начальное значение0

RAW_WDT – исходное прерывание таймера:

  • 1 – прерывание произошло;
  • 0 – прерывание отсутствует.

WDT_INT

Бит76543210
НазначениеРезервINT_WDT
Начальное значение0

INT_WDT – маскируемое прерывание таймера:

  • 1 – прерывание произошло;
  • 0 – прерывание отсутствует.

Данное прерывание формируется на основании битов RAW_WDT и INT_EN и передается в систему.

WDT_LOCK

Данный регистр блокирует доступ на запись во все остальные регистры сторожевого таймера. Запись значения 55h обеспечивает доступ на запись ко всем регистрам. Запись любого другого значения блокирует доступ. По умолчанию запись во все регистры сторожевого таймера заблокирована.

Бит76543210
НазначениеРезервLOCK_WDT
Начальное значение01

LOCK_WDT – блокирование записи в регистры:

  • 1 – запись во все регистры сторожевого таймера заблокирована;
  • 0 – запись во все регистры сторожевого таймера разрешена.

WDT_TCR

Бит76543210
НазначениеРезервTEST_EN
Начальное значение0

TEST_EN – тестовый режим:

  • 1 – сторожевой таймер в тестовом режиме;
  • 0 – сторожевой таймер в рабочем режиме.

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

WDT_TOP

Бит76543210
НазначениеРезервTST_INTTST_RES
Начальное значение0

TST_INT – формирование сигнала прерывания от таймера в тестовом режиме:

  • 1 – прерывание активно;
  • 0 – прерывание не активно.

TST_RES – формирование сигнала сброса от таймера в тестовом режиме:

  • 1 – сброс активен;
  • 0 – сброс не активен.