реклама на сайте
подробности

 
 
> AVR32 & WatchDog Timer
fpmoleg
сообщение Nov 29 2007, 16:20
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 33
Регистрация: 13-08-07
Пользователь №: 29 751



Всем привет.
Работаю сейчас с 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_*/


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

За ранее спасибо за ответы.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
fpmoleg
сообщение Nov 30 2007, 10:52
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 33
Регистрация: 13-08-07
Пользователь №: 29 751



Есть хедер 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() - не надо.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 04:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01332 секунд с 7
ELECTRONIX ©2004-2016