реклама на сайте
подробности

 
 
> Неправильная работа Watch Dog Timer'a, WDT не работает
SerSh
сообщение Jun 19 2013, 11:50
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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) работают тоже без проблем.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SerSh
сообщение Jun 19 2013, 14:02
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 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).
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jun 19 2013, 15:07
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 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 не производить.

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 8th July 2025 - 23:11
Рейтинг@Mail.ru


Страница сгенерированна за 0.014 секунд с 7
ELECTRONIX ©2004-2016