fpmoleg 0 29 ноября, 2007 Опубликовано 29 ноября, 2007 · Жалоба Всем привет. Работаю сейчас с 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 0 29 ноября, 2007 Опубликовано 29 ноября, 2007 · Жалоба полезная ссылка:avr-gcc #include <avr/wdt.h> wdt_enable(WDTO_500MS); //wdt_enable(uint8_t timeout); wdt_reset(); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fpmoleg 0 30 ноября, 2007 Опубликовано 30 ноября, 2007 · Жалоба сам решил задачу немного не так как хотел (хотел через использование структуры), но все равно спасибо за внимание, тему можно закрыть :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Busel Roman 0 30 ноября, 2007 Опубликовано 30 ноября, 2007 · Жалоба сам решил задачу немного не так как хотел (хотел через использование структуры) Поделитесь опытом, как удалось решить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fpmoleg 0 30 ноября, 2007 Опубликовано 30 ноября, 2007 · Жалоба Есть хедер 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() - не надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться