fpmoleg
Nov 29 2007, 16:20
Всем привет.
Работаю сейчас с 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
Nov 29 2007, 21:20
полезная ссылка:
avr-gcc #include <avr/wdt.h>
wdt_enable(WDTO_500MS); //wdt_enable(uint8_t timeout);
wdt_reset();
fpmoleg
Nov 30 2007, 00:29
сам решил задачу немного не так как хотел (хотел через использование структуры), но все равно спасибо за внимание, тему можно закрыть
Busel Roman
Nov 30 2007, 08:27
Цитата(fpmoleg @ Nov 30 2007, 02:29)

сам решил задачу немного не так как хотел (хотел через использование структуры)
Поделитесь опытом, как удалось решить.
fpmoleg
Nov 30 2007, 10:52
Есть хедер 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() - не надо.