Цитата(Юрий Санвальд @ Nov 1 2007, 19:41)

Всем доброго времени суток!
Понадобилось мне в приложении иметь возможность в определенной ситуации перезагрузить контроллер(lpc2132). Решил осуществлять это при помощи watchdog'a. Добавил следующую функцию:
Код
__disable_interrupt();
WDTC = (u32)(F_PCLK/1000); // установка задержки перед сбросом (размер не важен)
WDMOD_bit.WDRESET = 1; WDMOD_bit.WDEN = 1; // разрешен ресет и прерывание
WDFEED = 0xAA; WDFEED = 0x55; // запуск
__enable_interrupt();
for(;;);
Поставил просто в мэйне в пустой рабочий цикл, вся инициализация проведена нормально, взята из рабочего приложения, после загрузки этого приложения контроллер нельзя ни стереть, ни перешить (использую JLink). То идентификатор ядра не определяется, то не в JTAG режиме контроллер, то клоков нет, то еще какие то сообщения.
Подскажите, пожалуйста, что такого криминального я написал???
Переведите контроллер в режим бутлоадера, он станет доступным по JTAG.
Когда контроллер программируется по JTAG программа из внутренней флеши успевает запустаться, и отрабатывать по WDT, сбрасывая контроллер, поэтому у вас JTAG начинает глючить.
Ровно тот же эффект будет при отладке, если вы включите WDT. При останове на брейкпоинте у вас контроллер аппаратно пересброситься, и будет все глючить.
WDT при отладке включать не нужно.
Пасу котов...