Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
08.04.2010, 16:02
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: AVR USART+прерывания=потеря данных
Сообщение от umgah
|
второй таймер вообще крошечный, INT0=266байт 0,3325мкС.
|
Так прямо за два такта выполнятся? Если учесть что только вход и выход из прерывания это 4+4 такта и на частоте 8МГц занимает ровно 1uS. Это с пустым обработчиком, где одно команда RETI!
|
|
|
|
08.04.2010, 16:03
|
|
Прописка
Регистрация: 09.08.2006
Сообщений: 198
Сказал спасибо: 14
Сказали Спасибо 27 раз(а) в 20 сообщении(ях)
|
Re: AVR USART+прерывания=потеря данных
Сообщение от umgah
|
Немного впритык, но не длиннее. UART - 80 байт, 0,1мкС, второй таймер вообще крошечный, INT0=266байт 0,3325мкС.
|
0.125мкс - длительность выполнения одной команды (для Ваших 8МГц тактовой). Кстати, преобразование символов в обработчике UART можно сделать вне прерывания.
|
|
|
|
08.04.2010, 16:03
|
|
Частый гость
Регистрация: 15.01.2007
Сообщений: 20
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: AVR USART+прерывания=потеря данных
Сообщение от kison
|
Вообще мне подход не нравится. При жестком реалтайме, а при периодичности прерываний 10uS на INT0 - всего 80 тактов процессора при 8МГЦ тактировании и обработчики явно перегружены. ВСЕ! Требуется оптимизировать как алгоритм, так и код.
И буфер UART тут не при чем - вся программа сплошной тормоз.
|
Аминь ! Толковый коммент. То есть я неверно расчитал кристалл и он тупо перегружен.
По прерыванию:
//TIMER2 initialize - prescale:64
// WGM: Normal
// desired value: 10uSec
// actual value: 8,000uSec (20,0%)
void timer2_init(void)
{
TCCR2 = 0x00; //stop
ASSR = 0x00; //set async mode
TCNT2 = 0xFF; //setup
OCR2 = 0x01;
TCCR2 = 0x04; //start
}
Да, 8uSec в реалиях. Но для 8Мгц МК это разве оставляет 80 тактов на все остальное ? Оо Я извиняюсь за идиотские вопросы, АВР немного не моя область..
|
|
|
|
08.04.2010, 16:07
|
|
Частый гость
Регистрация: 15.01.2007
Сообщений: 20
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: AVR USART+прерывания=потеря данных
Сообщение от ish0
|
0.125мкс - длительность выполнения одной команды (для Ваших 8МГц тактовой). Кстати, преобразование символов в обработчике UART можно сделать вне прерывания.
|
Еще один отличный коммент. Спасибо, теперь очевидно что я неверно расчитал загрузку процессора, тема исчерпана.
|
|
|
|
08.04.2010, 16:16
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: AVR USART+прерывания=потеря данных
Сообщение от umgah
|
Да, 8uSec в реалиях. Но для 8Мгц МК это разве оставляет 80 тактов на все остальное ?
|
Не, меньше. 64 минус время работы этого обработчика Тактов 20-30 может останется.
Последний раз редактировалось kison; 08.04.2010 в 16:27.
|
|
|
|
08.04.2010, 16:27
|
|
Частый гость
Регистрация: 15.01.2007
Сообщений: 20
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: AVR USART+прерывания=потеря данных
Пересчитал, число инструкций INT0 = 133, при 16Мгц, как я понял это 8,3 мкс, UART = 40 инструкций, еще 2,5 мкс. И еще таймеры. итого примерно 12мкс.
Если я все понял правильно, то увеличив тайминги TMR1 до 15мкс я должен плотно, но "влезть".
Огромное спасибо всезнающим ALL )) Сам я еще долго пербывал бы в уверенности, что имею 10х резерва.. Видимо где-то с ноликом промахнулся в расчетах ((( Идиотизм, но бывает )
|
|
|
|
08.04.2010, 16:33
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: AVR USART+прерывания=потеря данных
Сообщение от umgah
|
UART = 40 инструкций, еще 2,5 мкс.
|
Проверяйте - у АВР не все инструкции однотактовые. Проще всего посмотреть в симуляторе такты. Ну или на бумажке высчитывать с учетом ветвлений, которые в обработчиках есть.
|
|
|
|
09.04.2010, 10:00
|
|
Гражданин KAZUS.RU
Регистрация: 16.06.2005
Сообщений: 944
Сказал спасибо: 25
Сказали Спасибо 174 раз(а) в 123 сообщении(ях)
|
Re: AVR USART+прерывания=потеря данных
Кстати, если такие жесткие временные рамки, что важен каждый такт - никаких операций с массивами, только с указателями. Ну и асемблерные вставки.
|
|
|
|
09.04.2010, 11:36
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: AVR USART+прерывания=потеря данных
Нравятся мне "эмбеддеры со стажем", которые не в курсе, что в USART AVR
буферизуется 1 байт. Причём в первых и этого не было, как собственно и в x51, например. То есть я, к примеру, это воспринял как шаг вперёд.
Более того, если вы предполагали, что имеется буфер, то с ним ведь надо работать. Что ж вы не почитали? Ведь даже беглый взгляд на этот узел в даташите не оставляет ни малейших сомнений в размерах буфера.
Но UART, как я вижу, не единственный пробел в ваших знаниях. Даже краткие выдержки из ваших выссказываний не оставляют сомнений в том, что в области прерываний у вас тоже зияет дыра. Приоритеты и уровни - для вас одно и тоже. А напрасно. С системой команд, в смысле "оценить" - тоже напряг. Управление кольцевым буфером - в зачаточном состоянии. Управление потоком - похоже, не слышали.
Короче, я понимаю, что вы сейчас в штыки моё сообщение воспримите, а вы просто попробуйте успокоится и почитайте материал на обозначенные темы. И всё получится.
|
|
|
|
09.04.2010, 11:43
|
|
Прописка
Регистрация: 09.10.2007
Сообщений: 235
Сказал спасибо: 27
Сказали Спасибо 24 раз(а) в 24 сообщении(ях)
|
Re: AVR USART+прерывания=потеря данных
SasaVitebsk,
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:20.
|
|