Программирование ARM nRF52: сторожевой таймер Tue, January 25 2022  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

nRF52: сторожевой таймер Печать
Добавил(а) microsin   

Сторожевой таймер (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.
CONFIG 0x50C Регистр конфигурации WDT.
RR[0] 0x600 Регистр запроса 0 на перезагрузку счетчика WDT.
RR[1] 0x604 Регистр запроса 1 на перезагрузку счетчика WDT.
RR[2] 0x608 Регистр запроса 2 на перезагрузку счетчика WDT.
RR[3] 0x60C Регистр запроса 3 на перезагрузку счетчика WDT.
RR[4] 0x610 Регистр запроса 4 на перезагрузку счетчика WDT.
RR[5] 0x604 Регистр запроса 5 на перезагрузку счетчика WDT.
RR[6] 0x618 Регистр запроса 6 на перезагрузку счетчика WDT.
RR[7] 0x61C Регистр запроса 7 на перезагрузку счетчика WDT.

Смещение адреса: 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.

Смещение адреса: 0x400. Запись не оказывает никакого влияния. Чтение показывает, запущен ли WDT: 0 таймер WDT не работает, 1 работает.

Биты регистра RUNSTATUS:

№ бита 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 R RUNSTATUS Текущее состояние WDT - считает его счетчик, или нет.

Смещение адреса: 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] разрешен, и для него пока не была запрошена перезагрузка.

Смещение адреса: 0x504.

Биты регистра CRV:

№ бита 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 A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
Reset 0xFFFFFFFF 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

Назначение бит:

Id RW Поле Описание
A RW CRV Значение перезагрузки счетчика в периодах тактов 32.768 кГц (0x00000000 .. 0xFFFFFFFF).

Смещение адреса: 0x508. Регистр разрешения для регистров запросов перезагрузки счетчика RR[n] (n = 0 .. 7).

Биты регистра RREN:

№ бита 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 RW RR0 Запрет или разрешение регистра RR[0].
0: регистр RR[0] запрещен.
1: регистр RR[0] разрешен.
B RW RR1 Запрет или разрешение регистра RR[1].
0: регистр RR[1] запрещен.
1: регистр RR[1] разрешен
C RW RR2 Запрет или разрешение регистра RR[2].
0: регистр RR[2] запрещен.
1: регистр RR[2] разрешен
D RW RR3 Запрет или разрешение регистра RR[3].
0: регистр RR[3] запрещен.
1: регистр RR[3] разрешен
E RW RR4 Запрет или разрешение регистра RR[4].
0: регистр RR[4] запрещен.
1: регистр RR[4] разрешен
F RW RR5 Запрет или разрешение регистра RR[5].
0: регистр RR[5] запрещен.
1: регистр RR[5] разрешен
G RW RR6 Запрет или разрешение регистра RR[6].
0: регистр RR[6] запрещен.
1: регистр RR[6] разрешен
H RW RR7 Запрет или разрешение регистра RR[7].
0: регистр RR[7] запрещен.
1: регистр RR[7] разрешен

Смещение адреса: 0x50C. Регистр конфигурации.

Биты регистра CONFIG:

№ бита 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                                                         C     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 RW SLEEP Конфигурирование WDT либо на паузу, либо на продолжение счета, когда CPU ушел в сон.
0: Pause, постановка WDT на паузу, когда CPU в состоянии сна.
1: Run, WDT продолжает работу, когда CPU находится в состоянии сна.
C RW HALT Конфигурирование WDT либо на паузу, либо на продолжение счета, когда CPU приостановлен отладчиком.
0: Pause, постановка WDT на паузу, когда CPU приостановлен отладчиком.
1: Run, WDT продолжает работу, когда CPU приостановлен отладчиком.

Смещение адреса: 0x600 + 4 * n.

Биты регистра RR[n]:

№ бита 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 A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A 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 W RR Reload: когда RR[n] разрешен, для запроса перезагрузки счетчика WDT в регистр RR[n] надо загрузить магическое число 0x6E524635.

[Электрические параметры WDT]

Символ Описание min Typ. MAX Ед.
IWDT Ток, потребляемый WDT в активном состоянии.   0.3 2 мкА
tWDT Интервал таймаута 458 мкс   36 часов  

[Ссылки]

1. nRF52832 Product Specification site:nordicsemi.com.
2. nRF52: управление тактированием.
3. nRF52: управление питанием и тактирование.

 

Добавить комментарий


Защитный код
Обновить

Top of Page