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

 
 
> Ох уж этот WDT!, Как заставить работать?
Мур
сообщение Jul 18 2007, 15:34
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Ковыряю AT91SAM7A3. Всё нормально, кроме последнего шага,-введение в уже отлаженную программу СОБАКИ!
Выяснил, что на самом деле WDT не работает, когда програмно вхожу в бесконечый цикл по внешней команде. Перебором вариантов проблема не решилась, если были сомнения по каждому биту в регистре статуса. Вот текст.
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
void wdt_on(void) //Инициализация
{//Простой сброс без временных ворот
AT91F_WDTC_CfgPMC (); // V-отладка
AT91F_WDTSetMode(AT91C_BASE_WDTC,(WTIMECODE|AT91C_WDTC_WDRSTEN|AT91C_WDTC_WDRPRO
C |(WTIMECODE<<16))|AT91C_WDTC_WDDBGHLT);//1 Sek
AT91F_WDTRestart(AT91C_BASE_WDTC);
}

В основном теле проставляю
AT91F_WDTRestart(AT91C_BASE_WDTC);

Вопрос корифеям. Где тут грабли остались? Что я пропускаю? 1111493779.gif
Хоть намекните!
Библиотека из IAR-а
//*----------------------------------------------------------------------------
__inline void AT91F_WDTC_CfgPMC (void)
{
AT91F_PMC_EnablePeriphClock(
AT91C_BASE_PMC, // PIO controller base address
((unsigned int) 1 << AT91C_ID_SYS));
}
//*----------------------------------------------------------------------------
__inline void AT91F_WDTSetMode(
AT91PS_WDTC pWDTC,
unsigned int Mode)
{
pWDTC->WDTC_WDMR = Mode;
}
//*----------------------------------------------------------------------------
__inline void AT91F_WDTRestart(
AT91PS_WDTC pWDTC)
{
pWDTC->WDTC_WDCR = 0xA5000001;
}
Заранее благодарен! tort.gif
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 17:54
Рейтинг@Mail.ru


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