Прежде чем приступать к программированию сторожевого таймера, рекомендую ознакомиться со следующей информацией:
Команды для работы со сторожевым таймером:
- #include <avr/wdt.h> - подключение библиотеки для работы со сторожевым таймером
- wdt_reset() - сброс сторожевого таймера
- wdt_enable() - включение сторожевого таймера
- wdt_disable() - выключение сторожевого таймера
Для работы со сторожевым таймером для начала необходимо подключить библиотеку "wdt.h" в которой описаны все основные команды для работы со сторожевым таймером. Пример программы №1 будет включать сторожевой таймер, который в свою очередь будет сбрасывать микроконтроллер каждые 4 секунды. Пример программы №2 будет иметь более расширенный функционал: если микроконтроллер перестал отвечать, то он будет сброшен; если же он работает нормально, то при поступлении прерывания от сторожевого таймера каждые 8 секунд сторожевой таймер будет сбрасываться и начинать отсчет времени сначала. Это позволит контролировать работу устройства на протяжении всего времени.
Пример программы №1:
#include <avr/io.h> //подключаем стандартную библиотеку ввода/вывода
#include <avr/wdt.h> //подключаем библиотеку для работы со сторожевым таймером
int main(void)
{
wdt_enable(WDTO_4S); //включаем сторожевой таймер со сбросом через 4 секунды
while(1); //любая пользовательская программа
}
Пример программы №2:
#include <avr/io.h> //подключаем стандартную библиотеку ввода/вывода
#include <avr/wdt.h> //подключаем библиотеку для работы со сторожевым таймером
#include <avr/interrupt.h> //подключаем библиотеку для работы с прерываниями
ISR(WDT_vect) //подпрограмма обработки прерывания от сторожевого таймера
{
wdt_reset(); //сброс сторожевого таймера
WDTCSR = 1 << WDIE; //разрешение прерываний от сторожевого таймера (запрещаются автоматически при сбросе сторожевого таймера)
}
int main(void)
{
sei(); //разрешаем глобальные прерывания
wdt_enable(WDTO_8S); //включаем сторожевой таймер со сбросом через 4 секунды
WDTCSR = 1 << WDIE; //разрешение прерываний от сторожевого таймера
while(1); //любая пользовательская программа
}
Параметры функции wdt_enable() обуславливают время сброса сторожевого таймера:
- WDTO_15MS
- WDTO_30MS
- WDTO_60MS
- WDTO_120MS
- WDTO_250MS
- WDTO_500MS
- WDTO_1S
- WDTO_2S
- WDTO_4S
- WDTO_8S
Комментариев нет:
Отправить комментарий