Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблемы с WatchDog, LPC2142
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
DreamTwister
Не запускается сторожевая собака.

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

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

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

Что делать?
DreamTwister
Может у кого есть пример инициализации работы сторожевого таймера для LPC2142?
Сергей Борщ
Цитата(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 ] (Кнопка с символом # в форме ввода сообщения).
DreamTwister
Подшаманил инициализацию, но проблема не решилась. Подача все равно не происходит.

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

Видно, что WDTV всегда содержит FF. WDFEED значение не меняет.
Может при подключенном JTAG WDT не работает?
Сергей Борщ
Цитата(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 теряет связь с процом.
S1LENCE
Здравствуйте, у меня вот такая же проблема, не могу понять почему
В симуляторе все работает а в железе не хочет...

Код
/*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
Спасибо
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.