Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Контроллер (lpc2132) умер после добавления фунцкии ресета
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
SanvaldYV
Всем доброго времени суток!

Понадобилось мне в приложении иметь возможность в определенной ситуации перезагрузить контроллер(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 режиме контроллер, то клоков нет, то еще какие то сообщения.

Подскажите, пожалуйста, что такого криминального я написал???
vesago
к сожалению, когда приложение ресетится по вачдогу оно гробит и жтаг. Я намедни тоже бился, бился - проклинал мтлинк за глючность, пока не догодался отключить вачдог. Сказывается привычка работы с авр. В вашем случае надобно потереть приложение штатным загрузчиком.
Andy Mozzhevilov
Цитата(Юрий Санвальд @ 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 при отладке включать не нужно.
SanvaldYV
Спасибо за разъяснение! a14.gif

А правильно ли я понял из ЮзерГида, что для перевода в режим бутлоадера достаточно только притянуть ножку Р0.14 к 0 на время ресета (внешнего)?
Просто есть такая фраза:"If P0.14 is sampled low and the watchdog overflow flag is set, the external hardware request to start the ISP command handler is ignored."
Maximm
Цитата(Юрий Санвальд @ Nov 1 2007, 20:30) *
Спасибо за разъяснение! a14.gif

А правильно ли я понял из ЮзерГида, что для перевода в режим бутлоадера достаточно только притянуть ножку Р0.14 к 0 на время ресета (внешнего)?
Просто есть такая фраза:"If P0.14 is sampled low and the watchdog overflow flag is set, the external hardware request to start the ISP command handler is ignored."


Да, именно так и нужно переводить в бутлоад режим!
SanvaldYV
Всем спасибо, контроллер реанимировался!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.