PIC32 – сторожевой таймер

Views: 960


Сторожевой таймер это аппаратное устройство цель которого рестарт микроконтроллера если программа “зависла” или перестала работать корректно. Таймер может быть как включен так выключен. Если таймер выключен, то он не оказывает никого действия на работу микроконтроллера. Если включен, то задается период времени про прошествии которого (при переполнении) сторожевой таймер автоматически вызовет сброс микроконтроллера и перезапуск программы.

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

Один из методов работы сторожевого таймера это простой сброс его до момента переполнения.  В PIC32 добавлен так называемый оконный режим. Оконный режим позволяет выполнить более корректный контроль выполнения программы, если для первого варианта основная задача программы была просто сбросить сторожевой таймер и предотвратить его переполнения, то в оконном режиме сторожевой таймер должен быть сброшен, только в определенно время, не раньше и не позже, а именно в “окне”. Если программа сбрасывает сторожевой таймер строго в определенное время, то считается, что программа работает корректно, если сброс происходит вне окна или вообще не происходит, то считается, что работа программы нарушена, при этом сторожевой таймер выполняет сброс микроконтроллера и программа запускается с начала.

Рассмотрим настройку сторожевого таймера в обычном режиме.


Как настроить сторожевой таймер.

Настройка сторожевого таймера осуществляется в регистре конфигураций в нем можно настроить период и включить его.

// Watchdog Timer Postscaler
#pragma config WDTPS = PS16384          // постделитель настроен на 1:16384
// Watchdog Timer Enable
#pragma config FWDTEN = ON             // сторожевой таймер включить

В процессе работы программы  включить и выключить таймер можно использовать регистр WDTCON. Бит ON позволяет управлять работой таймера если в регистре конфигурации работа таймера отключена. Если сторожевой таймер включен в регистре конфигурации, то выключить его в регистре WDTCON невозможно.


Как сбрасывать сторожевой таймер.

Сброс сторожевого таймера можно выполнить установкой бита WDTCLR в регистре WDTCON в 1. Если вы используете библиотеку периферии plib.h можно использовать макрос ClearWDT(). Или можно создать его самостоятельно. Примеры выполнения сброса сторожевого таймера.

С применением библиотеки периферии, надо не забыть в начале программы вставить

#include <plib.h>

Далее в программе необходимо использовать макрос

ClearWDT();    // сброс сторожевого таймера

Если вы не используете библиотеку, то можно просто использовать:

WDTCONbits.WDTCLR=1;    // сброс сторожевого таймера

Или создаем макрос

#define Clear_WDT() (WDTCONbits.WDTCLR=1)

и его используем в программе для сброса сторожевого таймера

Clear_WDT();    // сброс сторожевого таймера

 


Поделись этим!