Сторожевой таймер (Watchdog Timer, WDT) использует низкочастотный источник тактов LFCLK, предоставляя надежную защиту от зависания приложения. WDT запускается активацией задачи START.
WDT может быть приостановлен во время длительных периодов сна CPU в критичных по энергопотреблению приложениях, и когда отладчик приостанавливает CPU. WDT реализован как считающий вниз счетчик, генерирующий событие таймаута (TIMEOUT event) когда значение счетчика переваливает через 0. Когда WDT запущен задачей START, его счетчик загружается значением, предварительно записанным в регистр CRV. Этот счетчик также перезагружается значением, указанным в регистре CRV, когда был выдан запрос на перезагрузку счетчика.
Период таймаута WDT в секундах вычисляется формулой:
timeout = (CRV + 1) / 32768
Будучи запущенным, WDT автоматически, принудительно запускает внутренний RC-генератор 32.768 кГц, если пока не был сконфигурирован и запущен другой источник низкочастотных (LFCLK) тактов 32.768 кГц. Подробнее про тактирование LFCLK см. [2].
Критерий перезагрузки счетчика. У WDT есть 8 отдельных регистров для запроса перезагрузки счетчика (reload request registers, RR), которые должны использоваться чтобы перезагрузить счетчик WDT значением из регистра CRV. Чтобы произошла перезагрузка счетчика WDT, должно быть своевременно записано значение 0x6E524635 во все регистры RR, разрешенные для перезагрузки счетчика. Один или несколько регистров RR могут быть разрешены с помощью регистра RREN.
Временная приостановка WDT. По умолчанию WDT сохраняет активный счет вниз, когда CPU спит, и когда CPU приостановлен отладчиком. Однако можно сконфигурировать WDT на автоматическую приостановку счета, когда CPU спит, и когда он приостановлен отладчиком.
Watchdog reset. Событие TIMEOUT автоматически приведет к сбросу CPU и его периферийных устройств (watchdog reset).
См. раздел "18.6 Reset" даташита [1] для получения информации об источниках сброса. Если WDT сконфигурирован для генерации прерывания при событии TIMEOUT, то watchdog reset будет отложен на время 2 периодов тактов 32.768 кГц от момента генерации TIMEOUT event. Как только TIMEOUT event было сгенерировано, всегда будет сгенерирован запланированный watchdog reset, независимо от обработки прерывания.
Перед запуском WDT должен быть сконфигурирован. После того как WDT запущен, его регистры конфигурации CRV, RREN и CONFIG будут заблокированы, что предотвращает последующее изменение конфигурации WDT.
Кроме сброса от WDT, сброс CPU может быть произведен из других источников, см. секцию "18.8 Reset behavior" даташита [1]. Когда после сброса устройство запустится, или когда устройство пробуждается из режима глубокого сна (из OFF mode), регистры конфигурации WDT снова будут доступны для изменения.
[Регистры сторожевого таймера]
Таблица 1. Экземпляры WDT.
Баз. адрес
Периф. устройство
Экз.
Описание
Конфигурация
0x40010000
WDT
WDT
Сторожевой таймер
Таблица 2. Обзор регистров WDT.
Регистр
Смещ.
Описание
TASKS_START
0x000
Задача запуска WDT.
EVENTS_TIMEOUT
0x100
Событие, сигнализирующее о таймауте WDT.
INTENSET
0x304
Разрешение прерываний.
INTENCLR
0x308
Запрет прерываний.
RUNSTATUS
0x400
Рабочее состояние.
REQSTATUS
0x404
Запрос состояния.
CRV
0x504
Значение для перезагрузки счетчика WDT.
RREN
0x508
Регистр для управления разрешением регистров запросов перезагрузки счетчика RR.
Смещение адреса: 0x304. Запись 1 разрешает прерывание. Запись 0 не оказывает никакого влияния. Чтение показывает состояние разрешения прерывания: 0 прерывание запрещено, 1 разрешено.
Биты регистра INTENSET:
№ бита
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Id
A
Reset 0x00000000
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Назначение бит:
Id
RW
Поле
Описание
A
RW
TIMEOUT
Разрешение прерывания для события TIMEOUT. См. EVENTS_TIMEOUT.
Смещение адреса: 0x304. Запись 1 запрещает прерывание. Запись 0 не оказывает никакого влияния. Чтение показывает состояние разрешения прерывания: 0 прерывание запрещено, 1 разрешено.
Биты регистра INTENSET:
№ бита
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Id
A
Reset 0x00000000
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Назначение бит:
Id
RW
Поле
Описание
A
RW
TIMEOUT
Запрет прерывания для события TIMEOUT. См. EVENTS_TIMEOUT.
Смещение адреса: 0x404. Запись не оказывает никакого влияния. Чтение показывает, запущен ли WDT: 0 таймер WDT не работает, 1 работает.
Биты регистра REQSTATUS:
№ бита
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Id
H
G
F
E
D
C
B
A
Reset 0x00000001
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
Назначение бит:
Id
RW
Поле
Описание
A
R
RR0
Состояние запроса регистра RR[0]. 0: DisabledOrRequested, регистр RR[0] не разрешен, или уже была запрошена для него перезагрузка счетчика WDT. 1: EnabledAndUnrequested, регистр RR[0] разрешен, и для него пока не была запрошена перезагрузка.
B
R
RR1
Состояние запроса регистра RR[1]. 0: DisabledOrRequested, регистр RR[1] не разрешен, или уже была запрошена для него перезагрузка счетчика WDT. 1: EnabledAndUnrequested, регистр RR[1] разрешен, и для него пока не была запрошена перезагрузка.
C
R
RR2
Состояние запроса регистра RR[2]. 0: DisabledOrRequested, регистр RR[2] не разрешен, или уже была запрошена для него перезагрузка счетчика WDT. 1: EnabledAndUnrequested, регистр RR[2] разрешен, и для него пока не была запрошена перезагрузка.
D
R
RR3
Состояние запроса регистра RR[3]. 0: DisabledOrRequested, регистр RR[3] не разрешен, или уже была запрошена для него перезагрузка счетчика WDT. 1: EnabledAndUnrequested, регистр RR[3] разрешен, и для него пока не была запрошена перезагрузка.
E
R
RR4
Состояние запроса регистра RR[4]. 0: DisabledOrRequested, регистр RR[4] не разрешен, или уже была запрошена для него перезагрузка счетчика WDT. 1: EnabledAndUnrequested, регистр RR[4] разрешен, и для него пока не была запрошена перезагрузка.
F
R
RR5
Состояние запроса регистра RR[5]. 0: DisabledOrRequested, регистр RR[5] не разрешен, или уже была запрошена для него перезагрузка счетчика WDT. 1: EnabledAndUnrequested, регистр RR[5] разрешен, и для него пока не была запрошена перезагрузка.
G
R
RR6
Состояние запроса регистра RR[6]. 0: DisabledOrRequested, регистр RR[6] не разрешен, или уже была запрошена для него перезагрузка счетчика WDT. 1: EnabledAndUnrequested, регистр RR[6] разрешен, и для него пока не была запрошена перезагрузка.
H
R
RR7
Состояние запроса регистра RR[7]. 0: DisabledOrRequested, регистр RR[7] не разрешен, или уже была запрошена для него перезагрузка счетчика WDT. 1: EnabledAndUnrequested, регистр RR[7] разрешен, и для него пока не была запрошена перезагрузка.
Конфигурирование WDT либо на паузу, либо на продолжение счета, когда CPU ушел в сон. 0: Pause, постановка WDT на паузу, когда CPU в состоянии сна. 1: Run, WDT продолжает работу, когда CPU находится в состоянии сна.
C
RW
HALT
Конфигурирование WDT либо на паузу, либо на продолжение счета, когда CPU приостановлен отладчиком. 0: Pause, постановка WDT на паузу, когда CPU приостановлен отладчиком. 1: Run, WDT продолжает работу, когда CPU приостановлен отладчиком.