СОВРЕМЕННАЯ ЭЛЕКТРОНИКА №5/2015
ЭЛЕМЕНТЫ И КОМПОНЕНТЫ 32 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 5 2015 убедиться, что бит RVU регистра IWDG_ SR сброшен. Регистр статуса IWDG_SR имеет два информационных бита. Бит 1 RVU устанавливается аппаратно и указывает, что идёт процесс обновле- ния значения перезагрузки. Очищается он аппаратно, когда операция обновле- ния значения перезагрузки завершена. Данная операция занимает до 5 циклов RC генератора на частоте 40 кГц. Зна- чение регистра перезагрузки можно обновлять только при сброшенном бите RVU. Бит 0 PVU устанавливается аппаратно и указывает, что идёт процесс обновле- ния значения предварительного дели- теля. Очищается он аппаратно, когда операция обновления значения предва- рительного делителя закончена. Данная операция также занимает до 5 циклов RC генератора на частоте 40 кГц. Зна- чение предварительного делителя мож- но обновлять только при сброшенном бите PVU. Если приложение использует не- сколько значений перезагрузки или предварительного делителя, то, прежде чем изменить значение перезагрузки, необходимо ждать, пока не будет сбро- шен бит RVU. Также, прежде чем изме- нить значение предварительного дели- теля, следует ждать, пока не будет сбро- шен бит PVU. Однако, после обновления значе- ния предварительного делителя или перезагрузки, необходимости анали- зировать состояние бит RVU и PVU, прежде чем продолжить выполнение кода, нет. Операция записи будет при- нята к исполнению и завершена даже в случае перехода в режим низкого потребления. Примеры программ для независимого сторожевого таймера В листинге 1 приведён пример функ- ций для работы с таймером IWDG. Ком- ментарии позволяют понять назна- чение всех операций, выполняемых в этой программе. Используя данные функции, задей- ствовать в программе сторожевой тай- мер IWDG и осуществлять управление им не составит труда. О КОННЫЙ СТОРОЖЕВОЙ ТАЙМЕР Таймер WWDG лучше всего подхо- дит для тех приложений, которые тре- буют, чтобы сторожевой таймер реаги- ровал на перезапуск в пределах точно- го промежутка времени, то есть окна времени. Таймер тактируется сигналом, по- лученным делением сигнала такто- вой частоты PCLK1 с шины APB1. Он имеет конфигурируемое окно времени, которое служит для пере- загрузки сторожевого таймера, и мо- жет быть задан так, чтобы обнаружи- вать неправильное поведение прог- раммы, в виде запаздывания или опе- режения в работе. Обычно этот сторожевой таймер используется для того, чтобы обнару- живать возникновение некорректной работы программного обеспечения, вызванное внешним вмешательством или непредвиденными логическими условиями, которые заставляют при- кладную программу отклоняться от своего нормального алгоритма. Функциональная схема оконного сторожевого таймера WWDG приведе- на на рисунке 2. Фактически оконный сторожевой таймер является расширен- ной версией традиционного встраива- емого сторожевого таймера. Оконный сторожевой таймер пред- ставляет собой 7-битный вычитающий счётчик, тактируемый сигналом PCLK1, поделённым на 4096 с помощью аппа- ратного 12-битного предварительного делителя и программно управляемого делителя от 1 до 8. Оконный сторожевой таймер акти- вируется путём установки бита WDGA в регистре WWDG_CR. С этого момен- та его нельзя отключить, за исключе- нием общего сброса. После активиза- ции сторожевой таймер начинает счёт в обратном направлении и генерирует сброс при изменении состояния счёт- Листинг 1 // Функция инициализации сторожевого таймера IWDG void Init_IWDG(u16 tw) // Параметр tw от 7мс до 26200мс { // Для IWDG_PR=7 Tmin=6,4мс RLR=Tмс*40/256 IWDG->KR=0x5555; // Ключ для доступа к таймеру IWDG->PR=7; // Обновление IWDG_PR IWDG->RLR=tw*40/256; // Загрузить регистр перезагрузки IWDG->KR=0xAAAA; // Перезагрузка IWDG->KR=0xCCCC; // Пуск таймера } // Функция перезагрузки сторожевого таймера IWDG void IWDG_res(void) { IWDG->KR=0xAAAA; // Перезагрузка } Таблица 2. Карта регистров IWDG и их значения после сброса Сдвиг Регистр 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 0х00 IWDG_KR Резерв KEY[15:0] Исх. значение 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0х04 IWDG_PR Резерв PR[2:0] Исх. значение 0 0 0 0х08 IWDG_RLR Резерв RL[11:0] Исх. значение 1 1 1 1 1 1 1 1 1 1 1 1 0х0С IWDG_SR Резерв RVU PVU Исх. значение 0 0
RkJQdWJsaXNoZXIy MTQ4NjUy