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

 
 
 
Reply to this topicStart new topic
> Проблемы с WatchDog, LPC2142
DreamTwister
сообщение Nov 10 2008, 05:21
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 5-08-08
Из: Челябинск
Пользователь №: 39 436



Не запускается сторожевая собака.

void WDT_feed()
{
WDFEED = 0xAA;
WDFEED = 0x55;
}

void WDT_Init()
{
WDTC = 0x0000FFFF;
WDMOD &= 0xFFFFFFFFFB;
WDMOD |= 0x03;
WDT_feed();
}

Вроде последовательность правильная, сначала инициализация, потом подача.
Но сброса не происходит! При просмотре через дебаггер видно, что регистр WDTV не меняет свое значение, как при подаче, так и при отсчете.

Что делать?
Go to the top of the page
 
+Quote Post
DreamTwister
сообщение Nov 11 2008, 07:11
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 5-08-08
Из: Челябинск
Пользователь №: 39 436



Может у кого есть пример инициализации работы сторожевого таймера для LPC2142?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 11 2008, 07:38
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(DreamTwister @ Nov 11 2008, 10:11) *
Может у кого есть пример инициализации работы сторожевого таймера для LPC2142?
Есть для 2214. Не думаю, что они сильно отличаются:
Код
    WDTC = PCLK / 4 * 5;  // 5 seconds
    WDMOD = (1 << LPC_WDEN) | (1 << LPC_WDRESET);
    WDFEED = 0xAA;
    WDFEED = 0x55;


Цитата(DreamTwister @ Nov 10 2008, 08:21) *
WDMOD &= 0xFFFFFFFFFB;
Вроде последовательность правильная, сначала инициализация, потом подача.
Если не считать того, что WDMOD Read/Set регистр. Вот объясните, какой смысл использоать наложение масок, если вам все равно не нужно оставлять нетронутыми какие-то биты?
Цитата(DreamTwister @ Nov 10 2008, 08:21) *
Что делать?
Как минимум, при публикации оформлять код тегами [ code ] и [ /code ] (Кнопка с символом # в форме ввода сообщения).


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
DreamTwister
сообщение Nov 14 2008, 07:34
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 5-08-08
Из: Челябинск
Пользователь №: 39 436



Подшаманил инициализацию, но проблема не решилась. Подача все равно не происходит.

В регистр WDTFEED значения не прописываются.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 14 2008, 08:02
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(DreamTwister @ Nov 14 2008, 09:34) *
В регистр WDTFEED значения не прописываются.
Интересно, как вы об этом узнали если регистр WDFEED только для записи и читать из него невозможно?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
DreamTwister
сообщение Nov 14 2008, 09:22
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 5-08-08
Из: Челябинск
Пользователь №: 39 436



Через дебаггер IARа.

Видно, что WDTV всегда содержит FF. WDFEED значение не меняет.
Может при подключенном JTAG WDT не работает?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 14 2008, 12:16
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(DreamTwister @ Nov 14 2008, 11:22) *
Через дебаггер IARа.

Видно, что WDTV всегда содержит FF. WDFEED значение не меняет.
Еще раз: WDFEED - регистр только для записи. Дебаггер будет читать из него что угодно, но только не записанное значение. Кстати, если вы проходите вашу функцию WDT_feed() пошагово, с открытым окном регистров WDT, то вполне может ничего не работать: Между записями 0xAA и 0x55 не должно быть других обращений к регистрам WDT, а дебаггер после каждой команды в пошаговом режиме читает эти регистры и таким образом нарушает последовательность. Хотя в этом случае (судя по документации) должен происходить сброс.
Цитата(DreamTwister @ Nov 14 2008, 11:22) *
Может при подключенном JTAG WDT не работает?
Работает. Во всяком случае исправно сбрасывает проц, в результате чего дебаггер IAR теряет связь с процом.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
S1LENCE
сообщение Jan 13 2011, 12:44
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 2-01-11
Пользователь №: 61 990



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

Код
/*Configure Watchdog*/
    __disable_irq();
    WDMOD = 0x03;                      //Reset MC if no answer on 5s
    WDTC = 0x989680;                    //Watchdog timer = 5s on Pclk = 8 MHz
    WDFEED = 0xAA;                    //Start Watchdog timer
    WDFEED = 0x55;            
    __enable_irq();  

       if(WDMOD == 0x03)
        Error_Out();                                      //мигание светодиодом


Keil. LPC2148
Спасибо

Сообщение отредактировал S1LENCE - Jan 13 2011, 12:49
Go to the top of the page
 
+Quote Post

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

 


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


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