AirDevil 0 2 июня, 2009 Опубликовано 2 июня, 2009 (изменено) · Жалоба Доброго времени. Настраиваю вотчдог от внешнего кварца (Selects the APB peripheral clock (PCLK)). Всего один раз заметил такую вещь: При сбросе мк от вотчдога, прыгнул в 0 и далее застрял на защелкивании внешнего кварца. После этого проц так и стоял в этом положении не сбрасываясь. Это было в режиме дебаг. Вот теперь думаю как быть. Изменено 2 июня, 2009 пользователем AirDevil Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 2 июня, 2009 Опубликовано 2 июня, 2009 · Жалоба Это было в режиме дебаг. :) типа копаясь в потрохах контроллера, слегка стуча по периферии через JTAG и притормаживая ядро я добился каког-то эффекта c контроллерной периферией.... Неужели это случилось с Вами впервые? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AirDevil 0 3 июня, 2009 Опубликовано 3 июня, 2009 · Жалоба :) типа копаясь в потрохах контроллера, слегка стуча по периферии через JTAG и притормаживая ядро я добился каког-то эффекта c контроллерной периферией.... Неужели это случилось с Вами впервые? В этих камнях ни разу еще до этого момента не использовал вотчдог. Разве что только для перезагрузки камня. йа понял. Вы только скажите, возможна ли такая ситуация в релизе. Может стоит выбрать другой ватчдог таймер клок сурс? Вообще наиболее надежным какой является ист синхр? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HARMHARM 0 3 июня, 2009 Опубликовано 3 июня, 2009 · Жалоба Наиболее надежная вещь - внешний вочдог. Мало знаю людей, которые используют внутренний. Хотя бы потому, что его можно отключить из софта, или даже не включить... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AirDevil 0 3 июня, 2009 Опубликовано 3 июня, 2009 (изменено) · Жалоба Наиболее надежная вещь - внешний вочдог. Мало знаю людей, которые используют внутренний. Хотя бы потому, что его можно отключить из софта, или даже не включить... Я тоже его использовал, но решил отказаться. Хоть и не много элементов, но в ограниченом корпусе впихать места не хватило. Можно его включать до всех инициализаций в самом начале выполнения программы. Всё таки. Какой ист клоков лучше использовать? Изменено 3 июня, 2009 пользователем AirDevil Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vesago 0 3 июня, 2009 Опубликовано 3 июня, 2009 · Жалоба Наиболее надежная вещь - внешний вочдог. Мало знаю людей, которые используют внутренний. Хотя бы потому, что его можно отключить из софта, или даже не включить... +1. Я в кончном итоге отказался от внутреннего и пользую внешний. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
etoja 0 3 июня, 2009 Опубликовано 3 июня, 2009 · Жалоба Наиболее надежная вещь - внешний вочдог. Мало знаю людей, которые используют внутренний. Хотя бы потому, что его можно отключить из софта, или даже не включить... В LPC213x один раз включенный вочдог отключить нельзя. Работает он стабильно. Читайте документацию и аккуратно программируйте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 3 июня, 2009 Опубликовано 3 июня, 2009 · Жалоба В LPC213x один раз включенный вочдог отключить нельзя.До перезагрузки (пусть той же собакой). Поэтому самое надежное - включать его в самом начале программы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AirDevil 0 3 июня, 2009 Опубликовано 3 июня, 2009 · Жалоба До перезагрузки (пусть той же собакой). Поэтому самое надежное - включать его в самом начале программы. Под началом понимаете место после 0x00000000? Или же можно и после инициализаций PLL и внешнего кварца? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
etoja 0 3 июня, 2009 Опубликовано 3 июня, 2009 · Жалоба Под началом понимаете место после 0x00000000? Или же можно и после инициализаций PLL и внешнего кварца? Можно когда угодно. С этого момента таймер вочдога начнёт считать и остановить счёт невозможно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AirDevil 0 3 июня, 2009 Опубликовано 3 июня, 2009 (изменено) · Жалоба Покритикуйте пожалуйста: reset_handler: /* инициализация вотчдога. */ /* WDCLKSEL= 0x00; internal oscillator; */ ldr r0, =WDT_BASE mov r1, #0x00 str r1, [r0, #WDCLKSEL_OFFSET] /*WDTC = 0xffffff; */ mov r1, #0xffffff str r1, [r0, #WDTC_OFFSET] /* WDMOD = 3; */ mov r1, #0x03 str r1, [r0, #WDMOD_OFFSET] /* Enable WotchDog */ mov r1, #0xAA str r1, [r0, #WDFEED_OFFSET] mov r1, #0x55 str r1, [r0, #WDFEED_OFFSET] /* конец инициализации вотчдога. */ Далее инициализация плл. Внешнего кварца. ... Правильно? Изменено 3 июня, 2009 пользователем AirDevil Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
etoja 0 3 июня, 2009 Опубликовано 3 июня, 2009 · Жалоба Для LPC213x: // -------------------------------------------------------------------------------- void KickTheDog(void) // Reset the watchdog timer { // __DISABLE_INTERRUPT(); // Disable all interrupts WD_WDFEED=0xaa; // Reset the watchdog with back to back writes WD_WDFEED=0x55; // __ENABLE_INTERRUPT(); // Enable all interrupts } // -------------------------------------------------------------------------------- void wdt_init(void) // Configure Watchdog { WD_WDTC=(peripheralClockFrequency/4)*30; // Watchdog timeout set to 30 second WD_WDMOD=0x00000003; // Watchdog no interrupts and causes reset WD_WDFEED=0xaa; // Start the watchdog WD_WDFEED=0x55; } // -------------------------------------------------------------------------------- Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 2 3 июня, 2009 Опубликовано 3 июня, 2009 · Жалоба // __DISABLE_INTERRUPT(); // Disable all interrupts WD_WDFEED=0xaa; // Reset the watchdog with back to back writes WD_WDFEED=0x55; // __ENABLE_INTERRUPT(); // Enable all interrupts А что будет, если это вызвать из секции с запрещенными прерываниями :( void wdt_init(void) // Configure Watchdog { WD_WDTC=(peripheralClockFrequency/4)*30; // Watchdog timeout set to 30 second WD_WDMOD=0x00000003; // Watchdog no interrupts and causes reset WD_WDFEED=0xaa; // Start the watchdog WD_WDFEED=0x55; } Надо: void wdt_init(void) // Configure Watchdog { WD_WDTC=(peripheralClockFrequency/4)*30; // Watchdog timeout set to 30 second WD_WDMOD=0x00000003; // Watchdog no interrupts and causes reset KickTheDog(); } Ибо тоже атомарность должна быть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
etoja 0 3 июня, 2009 Опубликовано 3 июня, 2009 · Жалоба Ибо тоже атомарность должна быть. Верно, если длины стека хватает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться