|
Вотчдог у LPC, Заметил такую вещь: |
|
|
|
 |
Ответов
(1 - 13)
|
Jun 3 2009, 04:39
|

Частый гость
 
Группа: Участник
Сообщений: 98
Регистрация: 3-03-09
Пользователь №: 45 590

|
Цитата(zltigo @ Jun 3 2009, 00:02)   типа копаясь в потрохах контроллера, слегка стуча по периферии через JTAG и притормаживая ядро я добился каког-то эффекта c контроллерной периферией.... Неужели это случилось с Вами впервые? В этих камнях ни разу еще до этого момента не использовал вотчдог. Разве что только для перезагрузки камня. йа понял. Вы только скажите, возможна ли такая ситуация в релизе. Может стоит выбрать другой ватчдог таймер клок сурс? Вообще наиболее надежным какой является ист синхр?
|
|
|
|
|
Jun 3 2009, 05:19
|

Частый гость
 
Группа: Участник
Сообщений: 98
Регистрация: 3-03-09
Пользователь №: 45 590

|
Цитата(HARMHARM @ Jun 3 2009, 09:06)  Наиболее надежная вещь - внешний вочдог. Мало знаю людей, которые используют внутренний. Хотя бы потому, что его можно отключить из софта, или даже не включить... Я тоже его использовал, но решил отказаться. Хоть и не много элементов, но в ограниченом корпусе впихать места не хватило. Можно его включать до всех инициализаций в самом начале выполнения программы. Всё таки. Какой ист клоков лучше использовать?
Сообщение отредактировал AirDevil - Jun 3 2009, 05:20
|
|
|
|
|
Jun 3 2009, 08:01
|

Частый гость
 
Группа: Участник
Сообщений: 98
Регистрация: 3-03-09
Пользователь №: 45 590

|
Цитата(Сергей Борщ @ Jun 3 2009, 11:29)  До перезагрузки (пусть той же собакой). Поэтому самое надежное - включать его в самом начале программы. Под началом понимаете место после 0x00000000? Или же можно и после инициализаций PLL и внешнего кварца?
|
|
|
|
|
Jun 3 2009, 09:05
|

Частый гость
 
Группа: Участник
Сообщений: 98
Регистрация: 3-03-09
Пользователь №: 45 590

|
Покритикуйте пожалуйста: Код 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] /* конец инициализации вотчдога. */ Далее инициализация плл. Внешнего кварца. ... Правильно?
Сообщение отредактировал AirDevil - Jun 3 2009, 09:24
|
|
|
|
|
Jun 3 2009, 10:04
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
Цитата(etoja @ Jun 3 2009, 12:46)  // __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(); } Ибо тоже атомарность должна быть.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|