Ковыряю 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);
Вопрос корифеям. Где тут грабли остались? Что я пропускаю?
Хоть намекните!
Библиотека из 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;
}
Заранее благодарен!