|
Опять WatchDog Timer, Atmega64 |
|
|
|
Jan 23 2013, 16:46
|
Знающий
   
Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458

|
В коде программы команд сброса сторожевого таймера нет вообще, инициилизирую WD-таймер, хочу увидеть, как каждые 2 секунды будет моргать экран и инициализироваться меню, однако, после инициализации WD-таймера ничего не происходит. Что я упустил? Процессор Atmega64 Fusebits: WDTON=1 MC103=1 Код void WatchDogStart() { #asm("wdr") //на всякий случай сбросить сторожевой таймер WDTCR=0x1F; //WDCE=1, WDE=1, делитель 2 сек. WDTCR=0x0F; //WDCE=0, WDE=1, }
void WatchDogStop() { #asm("wdr") //сбросить сторожевой таймер WDTCR = 0x1F; //выключить сторожевой таймер WDTCR = 0x00; }
Сообщение отредактировал IgorKossak - Jan 23 2013, 19:56
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
|
|
|
|
|
 |
Ответов
|
Jan 23 2013, 18:41
|

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

|
Цитата(AndreyVN @ Jan 23 2013, 20:46)  Что я упустил? Упустили значения битов WDP при установке WDCE и WDE. Посмотрите как это сделано в примере от Atmel Цитата /* Write logical one to WDCE and WDE */ WDTCR |= (1<<WDCE) | (1<<WDE); Ой, не зря это они так сделали !
|
|
|
|
|
Jan 24 2013, 04:14
|
Знающий
   
Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458

|
Цитата(Палыч @ Jan 23 2013, 21:41)  Упустили значения битов WDP при установке WDCE и WDE. Посмотрите как это сделано в примере от Atmel Ой, не зря это они так сделали ! Насколько я понял из описания, бит WDCE=1 разрешает изменение состояния "собаки" и сбрасывается аппаратно через 4 цикла. То есть, мой вариант манипуляции с WDTCR, вроде должен быть работоспособен. Попробую как Вы советуете... Цитата Что вы понимаете под MC103=1? Процессор в режиме совместимости или нет? Fusebits активируются нулевым уровнем. Единичка соответствует значению Unprogrammed.
|
|
|
|
|
Jan 24 2013, 15:59
|

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

|
Цитата(AndreyVN @ Jan 24 2013, 08:14)  Насколько я понял из описания, бит WDCE=1 разрешает изменение состояния "собаки" и сбрасывается аппаратно через 4 цикла. То есть, мой вариант манипуляции с WDTCR, вроде должен быть работоспособен. Да, должен быть работоспособен... Тогда, вариант один - между двумя обращениями к регистру WDTCR проходит более 4 тактов: либо транслятор так "криво" код генерит, либо мешают разрешенные прерывания. Кстати, макросы, которые советует alexeyv, и время обращения к WDTCR выдерживают правильное и от прерываний во время своего выполнения защищены.
|
|
|
|
|
Jan 25 2013, 09:04
|
Знающий
   
Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458

|
Цитата(Палыч @ Jan 24 2013, 19:59)  Да, должен быть работоспособен... Тогда, вариант один - между двумя обращениями к регистру WDTCR проходит более 4 тактов: либо транслятор так "криво" код генерит, либо мешают разрешенные прерывания. Кстати, макросы, которые советует alexeyv, и время обращения к WDTCR выдерживают правильное и от прерываний во время своего выполнения защищены. Лазил по документам Atmel, советуют перед последовательностью присвоений WDTCR=0x1F; WDTCR=0x0F; запретить оптимизацию кода, иначе компилятор может две команды в одну слепить. Однако, пока ничего не получилось, не заводится WDT. Работает только вариант включения WDT через Fusebits WDTON=0. Тут все работает на ура, собачий таймер стартует по включению питания экран моргает как бешеный. Но меня этот режим не устраивает, мне надо включать таймер, только в том случае, если регистратор запущен на длительный режим сбора данных. В остальное время услуги собаки не требуются. У меня в CodeVision библиотеки wdt.h нет. Можно её где-то скачать? Цитата И желательно включать Watchdog во Fuse-битах (включается нулем) Эта фраза не понятна, в Fusebits можно выбрать разные режимы безопасности, но во всех режимах можно включить WDT командой или последовательностью команд. Может помимо WDTON и MC103 есть еще какой-то Fusebits, влияющий на работу WD-таймера, который я не заметил?
|
|
|
|
|
Jan 25 2013, 11:24
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (AndreyVN @ Jan 25 2013, 11:04)  советуют перед последовательностью присвоений WDTCR=0x1F; WDTCR=0x0F; запретить оптимизацию кода, иначе компилятор может две команды в одну слепить. Покажите, где такая чушь написана? Не имеет права компилятор такое делать. QUOTE (AndreyVN @ Jan 25 2013, 11:04)  Однако, пока ничего не получилось, не заводится WDT. Покажите листинг вашей функции WatchDogStart().
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 25 2013, 15:54
|
Знающий
   
Группа: Свой
Сообщений: 754
Регистрация: 29-06-06
Из: Volgograd
Пользователь №: 18 458

|
Цитата(Сергей Борщ @ Jan 25 2013, 14:24)  Покажите, где такая чушь написана? Не имеет права компилятор такое делать. Покажите листинг вашей функции WatchDogStart(). "Слепить две в одну"- я добавил от себя, а код внизу и совет по поводу отключения оптимизации попался в документах Atmel, где именно уже не вспомню. Код //FuseBits: WDTON=1 MC103=1 void WatchDogStart() { StringPrepare("WDT On"); Scroll(); ScrollUpdate(); #asm("wdr") //сбросить сторожевой таймер #pragma optsize- WDTCR=0x1F; WDTCR=0x0F; #ifdef _OPTIMIZE_SIZE_ #pragma optsize+ #endif }
|
|
|
|
Сообщений в этой теме
AndreyVN Опять WatchDog Timer Jan 23 2013, 16:46 _Артём_ Цитата(AndreyVN @ Jan 23 2013, 18:46) Что... Jan 23 2013, 17:16      ARV Цитата(AndreyVN @ Jan 25 2013, 19:54) ... Feb 14 2013, 16:29       _Артём_ Цитата(ARV @ Feb 14 2013, 18:29) если мне... Feb 14 2013, 17:10        artic Да, реализованно на ассемблере. Иначе при компиляц... Feb 14 2013, 17:48         _Артём_ Цитата(artic @ Feb 14 2013, 19:48) Что уч... Feb 14 2013, 19:05          artic После "программного сброса" ничего не ра... Feb 15 2013, 05:28 alexeyv Не парьтесь и воспользуйтесь "avr\wdt.h... Jan 24 2013, 04:14 artic День добрый!
Есть программка в которой с помо... Feb 14 2013, 12:33 _Артём_ Цитата(artic @ Feb 14 2013, 14:33) Господ... Feb 14 2013, 13:48  artic Видимо нет.
Память aplication залитая программат... Feb 14 2013, 15:29   _Артём_ Цитата(artic @ Feb 14 2013, 17:29) В вари... Feb 14 2013, 16:04    artic Загрузчик выключает WDT.
Как раз с загрузчиком и ... Feb 14 2013, 16:30 ILYAUL Ну так сравни два асм кода с разными оптимизациями... Feb 14 2013, 18:06 artic Я ж говорю, при любой оптимизации работает если ши... Feb 14 2013, 18:22 RabidRabbit Мож где при инициализации оборудования оптимизатор... Feb 15 2013, 05:51 ILYAUL ЦитатаЯ ж говорю, при любой оптимизации работает е... Feb 15 2013, 06:32 artic Загрузчик не компилирую. Он изначально есть только... Feb 15 2013, 07:23
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|