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

 
 
> сброс atmega
siworker
сообщение Sep 24 2007, 12:16
Сообщение #1





Группа: Новичок
Сообщений: 14
Регистрация: 24-04-07
Пользователь №: 27 280



а как можно программно сбросить Atmega 128? только без WatchDog т.к. очень медленно. надо быстрее
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
prottoss
сообщение Sep 24 2007, 12:44
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Код
void (*fn_reset)(void) = NULL;
...
void my_fn(void)
{
...
if(error)
{
fn_reset();
}
...
}


--------------------
Go to the top of the page
 
+Quote Post
ReAl
сообщение Sep 24 2007, 22:08
Сообщение #3


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(prottoss @ Sep 24 2007, 14:44) *
Код
void (*fn_reset)(void) = NULL;
...
if(error)
{
    fn_reset();
}
...

А вот так:
Код
#define FN_RESET ((void (*)()) 0)
...
  if(error) {
     FN_RESET();
  }
...

не сожрёт лишнего ОЗУ на переменную fn_reset
Только этого мало - сначала надо прерывания запретить и привести вручную все регистры устройств в исходное состояние. И того может не хватить - например, если не ошибаюсь, в USART незавершённая передача будет продолжать молотить даже если TXEN снять, т.е. будет не полный эквивалент аппаратного сброса.
В каждом конкретном случае надо очень аккуратно смотреть.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
prottoss
сообщение Sep 25 2007, 11:06
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(ReAl @ Sep 25 2007, 06:08) *
А вот так:
Согласен, так лучше. А IO можно быстро обнулить в небольшом цикле. И молотить ничего не будет, ибо TXEN = 0, а порт IO настроится на ввод без пуллап-резистора. ТОже с остальными интерфейсами.


--------------------
Go to the top of the page
 
+Quote Post
ReAl
сообщение Sep 25 2007, 11:53
Сообщение #5


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(prottoss @ Sep 25 2007, 13:06) *
И молотить ничего не будет, ибо TXEN = 0, а порт IO настроится на ввод без пуллап-резистора.

Наружу не будет, так как передатчик отключится от вывода, а вот что будет происходить внутри - ещё вопрос. Дока на всякие мега64-мега2560 гласит:
Цитата
Disabling the Transmitter The disabling of the Transmitter (setting the TXENn to zero) will not become effective until ongoing and pending transmissions are completed, i.e., when the Transmit Shift Register and Transmit Buffer Register do not contain data to be transmitted. When disabled, the transmitter will no longer override the TxD pin.
Я не занимался выяснением - что они имеют ввиду и как себя будет вести передатчик после того, как посреди передачи записать 0 в TXEN, потом через какое-то время заново записать UBRR и режимы и опять поднять TXEN, но... похоже, что запись 0 в TXEN таки не всегда эквивалентна аппаратному сбросу.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 17:17
Рейтинг@Mail.ru


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