Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AVR32 & WatchDog Timer
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > AVR32
fpmoleg
Всем привет.
Работаю сейчас с AVR32, есть EVK1100 плата.
Контроллер: AT32UC3A0512.
Кнопаю в AVR32 Studio под XP SP2. Пишу на С

не могу запустить сторожевой таймер.

Вот код:

#include "wdt.h"
#define WDT AVR32_WDT
void wdt_init(unsigned char set_psel){
volatile avr32_wdt_t *wdt_port = &WDT;
wdt_port->CTRL.key = 0x55;
wdt_port->CTRL.psel = set_psel;
wdt_port->CTRL.en = 1;
wdt_port->CTRL.key = 0xAA;
wdt_port->CTRL.psel = set_psel;
wdt_port->CTRL.en = 1;
}

void wdt_clear(){
volatile avr32_wdt_t *wdt_port = &WDT;
wdt_port->clr = 1;
}


содержимое хедера wdt.h:
#ifndef WDT_H_
#define WDT_H_
#include <avr32/io.h>
#include <avr32/wdt_200.h>
extern void wdt_init(unsigned char set_psel);
extern void wdt_clear();
#endif /*WDT_H_*/


После инициализации сторожевого таймера не вижу что мк делает сброс. Я вывожу строку на ЛСД дисплей, если бы был бы сброс то строка перезаписывалась бы.

За ранее спасибо за ответы.
namelos
полезная ссылка:avr-gcc

#include <avr/wdt.h>
wdt_enable(WDTO_500MS); //wdt_enable(uint8_t timeout);
wdt_reset();
fpmoleg
сам решил задачу немного не так как хотел (хотел через использование структуры), но все равно спасибо за внимание, тему можно закрыть smile.gif
Busel Roman
Цитата(fpmoleg @ Nov 30 2007, 02:29) *
сам решил задачу немного не так как хотел (хотел через использование структуры)

Поделитесь опытом, как удалось решить.
fpmoleg
Есть хедер wdt_200.h, в нем определен тип avr32_wdt_t.
Делаем указатель на эту структуру.

void wdt_init(unsigned char set_psel){
volatile avr32_wdt_t *wdt_port = &AVR32_WDT;
wdt_port->ctrl = (0x55 << AVR32_WDT_KEY_OFFSET)|(set_psel << AVR32_WDT_PSEL_OFFSET) | AVR32_WDT_CTRL_EN_MASK;
wdt_port->ctrl = (0xAA << AVR32_WDT_KEY_OFFSET)|(set_psel << AVR32_WDT_PSEL_OFFSET) | AVR32_WDT_CTRL_EN_MASK;
}

void wdt_clear(){
volatile avr32_wdt_t *wdt_port = &AVR32_WDT;
wdt_port->clr = 1;
}

Значение set_psel - должно быть не больше 32 (можно больше но я не проверял, думаю что сторожеовй таймер запуститься), почему так смотреть в мануале формулу.

Запись в старших 8 разрядов регистра CTRL значений 0x55 и 0xAA обязательно - так сказанно в мануале.

ЗЫ: инициализация watchdog timer происходит в теле ф-ции main(), вызывать ф-цию wdt_init перед запуском main() - не надо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.