Перейти к содержанию
    

AVR32 & WatchDog Timer

Всем привет.

Работаю сейчас с 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_*/

 

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

 

За ранее спасибо за ответы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

сам решил задачу немного не так как хотел (хотел через использование структуры), но все равно спасибо за внимание, тему можно закрыть :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

сам решил задачу немного не так как хотел (хотел через использование структуры)

Поделитесь опытом, как удалось решить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...