Есть хедер 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() - не надо.
|