|
Неправильная работа Watch Dog Timer'a, WDT не работает |
|
|
|
Jun 19 2013, 11:50
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 19-12-08
Из: г.Северодонецк, Украина
Пользователь №: 42 608

|
Прошу помощи у Клуба!
Проблема в неправильной работе Watch Dog Timer'a на ATmega640-16AU. Суть в следующем: после запуска Watch Dog Timer'a в режиме "System Reset Mode" через запрограммированое (2 сек) время камень не перезапускается (System Reset), а тупо виснет. Проверку осуществляю при помощи вставленных циклов ожидания функции __delay_cycles().
Компилятор IAR EWB v.6.21.1. Прошивка в железо - AVReal. Инициализация в основной программе (main): // Инициализация Watchdog-таймера _WDR(); // Сброс Watchdog WDTCSR |= (1<<WDCE)|(1<<WDE); WDTCSR = (1<<WDE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0); // Установка времени срабатывания ~2 с _SEI(); // Глобальное разрешение прерывания
Фьюз WDTON=1. Сама программа без WDT или с включённым WDT, но без принудительной сверхзадержки работает без проблем. Аналогичные варианты других программ, но на камнях ATmega64 с идентичными параметрами (инициализация, фьюзы, способы проверки срабатывания WDT) работают тоже без проблем.
|
|
|
|
|
 |
Ответов
|
Jun 19 2013, 14:02
|
Участник

Группа: Участник
Сообщений: 39
Регистрация: 19-12-08
Из: г.Северодонецк, Украина
Пользователь №: 42 608

|
К регистру MCUSR я вообще не обращаюсь. Листинг функции main: 448 // Инициализация Watchdog-таймера 449 _WDR(); // Сброс Watchdog \ 000002A8 95A8 WDR 450 WDTCSR = (1<<WDCE)|(1<<WDE); \ 000002AA E108 LDI R16, 24 \ 000002AC 9300.... STS _A_WDTCSR, R16 451 // WDTCSR = (1<<WDE)|(1<<WDP3); // Установка времени срабатывания ~4 с 452 WDTCSR = (1<<WDE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0); // Установка времени срабатывания ~2 с \ 000002B0 E00F LDI R16, 15 \ 000002B2 9300.... STS _A_WDTCSR, R16 453 _SEI(); // Глобальное разрешение прерывания \ 000002B6 9478 SEI Сам файл листинга = 1,2Мб загружаться не хочет. Цитата(Палыч @ Jun 19 2013, 16:48)  А, если убрать глобальное разрешение прерываний ? Тогда ничего работать не будет: В проге задействовано 4 USARTa, SPI, 2T/C. А, вцелом, я вначале описал, что если отключить WDT, то всё прекрасно работает. Ещё одна подозрительная тонкость: после зависа проги по WDT и дальнейшей перепрошивки проги заново - завис не прекращается, нужно обязательно передёрнуть питание. После этого прога начинает работать (до следующего срабатывания WDT).
|
|
|
|
|
Jun 19 2013, 15:07
|

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(SerSh @ Jun 19 2013, 18:02)  Тогда ничего работать не будет: В проге задействовано 4 USARTa, SPI, 2T/C. А, вцелом, я вначале описал, что если отключить WDT, то всё прекрасно работает. Давайте "отделим мух от котлет"! Без WDT Ваша программа правильно работает. Вот и чудесно. WDT без Вашей программы работает ? Проверяли ? Если - нет, проверьте... Я думаю, что тоже будет работать... Для проверки работы WDT с программой Вы вставили задержку __delay_cycles(), вероятно, перед сбросом WDT (может, я и не прав, но так понял из Вашего первого сообщения). Как предположение: эта задержка приводит к краху части функционала программы, но та часть, что отвечает за сброс WDT продолжает работать, при этом, поскольку остальная часть не работает, то время на __delay_cycles(), вероятно, уменьшилось и сброс WDT производится с периодом меньшим 2 сек, что приводить к отсутствию сброса МК. Для проверки работы WDT совместно с программой я бы убрал __delay_cycles(), а вместо него либо - "глухой" цикл при запрещенных прерываниях, либо флаг и проверка флага: взведен - то сброс WDT не производить.
|
|
|
|
Сообщений в этой теме
SerSh Неправильная работа Watch Dog Timer'a Jun 19 2013, 11:50 Сергей Борщ QUOTE (SerSh @ Jun 19 2013, 14:50) WDTCSR... Jun 19 2013, 13:16 SerSh Убрал.
Стало:
// Инициализация Watchdog-таймера
... Jun 19 2013, 13:33 _Артём_ Цитата(SerSh @ Jun 19 2013, 16:33) Убрал.... Jun 19 2013, 13:40 Палыч Цитата(SerSh @ Jun 19 2013, 17:33) В рабо... Jun 19 2013, 13:48 _Артём_ Цитата(SerSh @ Jun 19 2013, 17:02) Ещё од... Jun 19 2013, 14:11  SerSh Цитата(_Артём_ @ Jun 19 2013, 17:11) Возм... Jun 19 2013, 14:12   _Артём_ Цитата(SerSh @ Jun 19 2013, 17:12) И когд... Jun 19 2013, 14:19   SerSh Цитата(SerSh @ Jun 19 2013, 17:12) И когд... Jun 19 2013, 14:20  SerSh Цитата(Палыч @ Jun 19 2013, 18:07) WDT бе... Jun 19 2013, 15:51   Палыч Цитата(SerSh @ Jun 19 2013, 19:51) Кажетс... Jun 19 2013, 16:43    SerSh Цитата(Палыч @ Jun 19 2013, 19:43) Кажетс... Jun 19 2013, 20:45 SerSh Закомментировал все команды WDR, но всё осталось п... Jun 20 2013, 06:15 Палыч Цитата(SerSh @ Jun 20 2013, 10:15) Закомм... Jun 20 2013, 06:49  SerSh Цитата(Палыч @ Jun 20 2013, 09:49) Остало... Jun 20 2013, 06:55 Сергей Борщ Заодно фуз BOOTRST проверьте Jun 20 2013, 07:30 SerSh Цитата(Сергей Борщ @ Jun 20 2013, 10:30) ... Jun 20 2013, 07:54 SerSh Неожиданное продолжение.
Стал возвращать в програм... Jun 26 2013, 07:08 Палыч Цитата(SerSh @ Jun 26 2013, 11:08) Не буд... Jun 26 2013, 07:40  SerSh Цитата(Палыч @ Jun 26 2013, 10:40) Информ... Jun 26 2013, 08:00   Палыч Цитата(SerSh @ Jun 26 2013, 12:00) ... фу... Jun 26 2013, 09:59    SerSh Цитата(Палыч @ Jun 26 2013, 12:59) Не уви... Jun 26 2013, 10:44     Палыч Беглый анализ кода показал: таки возможно встречно... Jun 26 2013, 11:32      SerSh Цитата(Палыч @ Jun 26 2013, 14:32) Беглый... Jun 26 2013, 11:44 zombi Цитата(SerSh @ Jun 26 2013, 10:08) пришёл... Jun 26 2013, 21:28  SerSh Цитата(zombi @ Jun 27 2013, 00:28) Если в... Jun 27 2013, 08:24 SerSh К сожалению, хороших результатов нет.
Установка... Jun 26 2013, 12:59 Палыч Цитата(SerSh @ Jun 26 2013, 16:59) теперь... Jun 26 2013, 13:12  SerSh Цитата(Палыч @ Jun 26 2013, 16:12) Надеюс... Jun 26 2013, 13:35 zombi Получается (если рассматривать программу в кодах а... Jun 27 2013, 08:43 Палыч Цитата(zombi @ Jun 27 2013, 12:43) Это ж ... Jun 27 2013, 10:34 SerSh Цитата(zombi @ Jun 27 2013, 11:43) Это ж ... Jun 27 2013, 19:21  Палыч Цитата(SerSh @ Jun 27 2013, 23:21) Что се... Jun 28 2013, 05:51 zombi У Вас SEI сразу после инита WDT и затем еще какие ... Jun 27 2013, 20:36 berberber Та же песня!
ATMega88 после интервала для сра... Apr 1 2015, 10:56 Сергей Борщ Цитата(berberber @ Apr 1 2015, 12:56) Дум... Apr 1 2015, 11:22  demiurg1978 ТС, вам нужно сделать переменную в ОЗУ. И придумыв... Apr 1 2015, 16:06 berberber Цитата(Сергей Борщ @ Apr 1 2015, 14:22) я... Apr 2 2015, 08:47 Сергей Борщ Цитата(berberber @ Apr 2 2015, 10:47) Ком... Apr 2 2015, 09:03 demiurg1978 Цитата(berberber @ Apr 2 2015, 14:47) Про... Apr 2 2015, 10:14
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|