Вобщем такая проблема. конфигурирую Watchdog Timer. В основной программе искуственно вызываю зависание (ухожу в бесконечный цикл, но срабатывания не происходит. Что не так?
Код
//Собественно сама функция конфигурирования
void CnfWDT (void) {
AT91C_BASE_WDTC->WDTC_WDMR=((unsigned int) 0x00A << 0) |
((unsigned int) 0x1 << 13) |
((unsigned int) 0x0 << 12) |
((unsigned int) (0x0 << 14) |
((unsigned int) 0x00A << 16) |
((unsigned int) 0x0 << 15);
}
main
{
CnfWDT();
//плюс тут же конфигурирую другое оборудование
while (1)
{
//тут у меня выполняется программа, которая адекватно работает, связь с компом идет, все нормально
//И в её середине я делаю искуственное зависание. По пришествии события с компа ухожу в бесконечный цикл
while (1){здесь я просто сделал что переменная равна сама себе и больше ничвго нету};
//Но вот именно тут контроллер виснет наглухо, пока питанием не моргнешь
//и где то в конце ставлю строку
AT91C_BASE_WDTC->WDTC_WDCR=((unsigned int) 0x1 << 0) | ((unsigned int) 0xA5 << 24);
}
}
void CnfWDT (void) {
AT91C_BASE_WDTC->WDTC_WDMR=((unsigned int) 0x00A << 0) |
((unsigned int) 0x1 << 13) |
((unsigned int) 0x0 << 12) |
((unsigned int) (0x0 << 14) |
((unsigned int) 0x00A << 16) |
((unsigned int) 0x0 << 15);
}
main
{
CnfWDT();
//плюс тут же конфигурирую другое оборудование
while (1)
{
//тут у меня выполняется программа, которая адекватно работает, связь с компом идет, все нормально
//И в её середине я делаю искуственное зависание. По пришествии события с компа ухожу в бесконечный цикл
while (1){здесь я просто сделал что переменная равна сама себе и больше ничвго нету};
//Но вот именно тут контроллер виснет наглухо, пока питанием не моргнешь
//и где то в конце ставлю строку
AT91C_BASE_WDTC->WDTC_WDCR=((unsigned int) 0x1 << 0) | ((unsigned int) 0xA5 << 24);
}
}
Бесконечный цикл в мэйне выполняется за 100 мксек (примерно), вобщем когда происходит событие и я ухожу в еще один бесконечный цикл, где я не сбрасываю таймер, то у меня контроллер зависает ... Почему? Правильно ли сконфигурировано? Или мне нужно организовывать прерывание и смотреть там, что достиг конца таймера? то бишь нуля ....