| AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
RESET в AVR
08.02.2013, 14:00
|
|
|
Временная регистрация
Регистрация: 08.01.2007
Сообщений: 92
Сказал спасибо: 17
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: RESET в AVR
Сообщение от omercury
|
Почему?
Создаёте переменную типа boolean (флаг) и по завершении приёма пакета данных из UART устанавливаете этот флаг. В основном цикле опрашиваете этот флаг и, обнаружив его, переходите к исполнению нужной вам части кода.
WatchDog вообще-то для аварийных ситуаций.
|
Понимаете: основная программа довольно имеет довольно длинные процедуры... например особенно в начале... инициализация по другому юарту ЖСМ модема, там 15 команд ... ну не буду же я вставлять чтение "флага" через строчку???!! не логично...
Нужно конкретно отловить последовательность... Тем более софт для ПК уже есть... и он работает с другими блоками на основе PIC. мне нужно сделать преемственно....
После подачи последовательности следует пауза в 1-1.5 секунды... а потом идет отработка (чтение/запись номеров, считывание данных с флеши)
|
|
|
|
08.02.2013, 14:36
|
|
|
Вид на жительство
Регистрация: 05.07.2006
Адрес: Tashkent
Сообщений: 454
Сказал спасибо: 24
Сказали Спасибо 67 раз(а) в 44 сообщении(ях)
|
Re: RESET в AVR
Понимаете, у вас есть два варианта:
1)Продолжать делать так как сейчас со всеми недостатками с которыми вы уже столкнулись;
2)Сделать правильно как вам здесь советуют. Разрисуйте весь алгоритм на бумаге, разбейте его по блокам-задачам. Каждую задачу попытаться повесить на свой аппаратный ресурс(например вывод буфера UART по прерываниям, задержки только по таймерам и т.д.). Да, это дольше и надо тут включать мозги. Но в итоге ваша система заработает как надо.
Можно конечно прикрутить сюда RTOS, но задача того не стоит ИМХО.
|
Цитата:
|
Но все же:
W=MCUSR&0x08;
while(W)
{
}
Согласно ДШ 3 й бит это указатель на то что был сброс по WDT.
|
Маска по 3-му биту запишется как W=MCUSR&0x04;
Или W = MCUSR & ( 1 ‹‹ 3 );
|
|
|
|
08.02.2013, 14:41
|
|
|
Временная регистрация
Регистрация: 08.01.2007
Сообщений: 92
Сказал спасибо: 17
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: RESET в AVR
Сообщение от uk8amk
|
|
Маска по 3-му биту запишется как W=MCUSR&0x04;
|
Может я не догоняю? Но по моему нумерация битов идет с "0" и Ваша комбинация маскируем "2" бит
|
|
|
|
08.02.2013, 14:42
|
|
|
Временная регистрация
Регистрация: 08.01.2007
Сообщений: 92
Сказал спасибо: 17
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: RESET в AVR
И все же? кто нибудь знает как в CVAVR прочитать MCUSR ?
|
|
|
|
08.02.2013, 15:06
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: RESET в AVR
Сообщение от papa_n
|
|
Может я не догоняю?
|
В самую дырочку!
Команда W = MCUSR & ( 1 ‹‹ 3 ); три раза сдвигает единичку влево из бита "0", грузит это в аккумулятор и складывает результат с содержимым MCUSR по "И". То есть читает бит4 регистра статуса.
Вам нужен МК с двумя UART и почитать про прерывания.
Причём последнее нужнее всего.
|
|
|
|
08.02.2013, 15:47
|
|
|
Временная регистрация
Регистрация: 08.01.2007
Сообщений: 92
Сказал спасибо: 17
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: RESET в AVR
Мой МК имеет 4 ре Uart -a
Ну хоть кто нибуть подскажет как в CVAVR прочитать регистр MCUSR?
Выше кто то написал что надо
|
Цитата:
|
|
Опрос MCUSR надо поставить в секцию "_no_init" (Или как-то она там называется, нет примера под руками. Если это GCC). Т.е. что-бы инфа оттуда была считана во временную переменную до выполнениея пролога Си-программы.
|
Как это сделать на Си в CVAVR  ?
Последний раз редактировалось papa_n; 08.02.2013 в 15:49.
|
|
|
|
08.02.2013, 16:27
|
|
|
Гражданин KAZUS.RUN
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: RESET в AVR
Сообщение от papa_n
|
Как это сделать на Си в CVAVR ?
|
|
Код:
|
unsigned char mcusr_reg=MCUSR; |
|
|
|
|
08.02.2013, 16:28
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,457
Сказал спасибо: 3,225
Сказали Спасибо 3,511 раз(а) в 2,392 сообщении(ях)
|
Re: RESET в AVR
Сообщение от papa_n
|
|
Как это сделать на Си в CVAVR ?
|
Мануал к нему есть? Выложите сюда, посмотрим наискосок.
|
|
|
|
08.02.2013, 16:54
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: RESET в AVR
Я б туды volatile дописал.
UPD:
А зачем его вообще читать?
Обычно делается так:
|
Код:
|
if (MCUSR & _BV(имя флага))код... |
Последний раз редактировалось omercury; 08.02.2013 в 17:14.
|
|
|
|
08.02.2013, 17:13
|
|
|
Временная регистрация
Регистрация: 08.01.2007
Сообщений: 92
Сказал спасибо: 17
Сказали Спасибо 9 раз(а) в 9 сообщении(ях)
|
Re: RESET в AVR
Сообщение от omercury
|
|
Я б туды volatile дописал.
|
Обрадую Вас!
Не так не так не читает(((
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 17:45.
|
|