Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
10.04.2010, 03:18
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: AVR USART+прерывания=потеря данных
Сообщение от picavr
|
в PIC можно было взять 2 байта из UDR пока принимается ещё один в сдвиговый.
|
И в АВР можно. Просто об этом не знает Александр. И Вы
|
|
|
|
10.04.2010, 03:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: AVR USART+прерывания=потеря данных
Сообщение от picavr
|
А по логике вещей должен быть ещё хотя бы 1 регистр - буфер. Между сдвиговым и UDR.
|
Зачем? В старых контроллерах буфер был на один принятый байт. Вот он и перезаписывался в UDR. В более новых ( смешно - М8 новая ) уже двойной буфер.
Там FIFO, так же как и в ARM-ах от NXP, правда глубина значительно мельче. И нельзя уровень для прерываний назначать. Фактически буфер даже на 3 байта - два готовых и один в сдвиговом регистре.
|
|
|
|
10.04.2010, 13:43
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: AVR USART+прерывания=потеря данных
Если можно было бы взять байт из сдвигового регистра напрямую, то можно было бы получить половину принятого байта. Это очевидный бред. Поэтому сдвиговый регистр дублируется (Например как в 595). Но от этого ничего не меняется. В at90s8515 если не сделать обработку за период равный длине символа + служебка, то данные будут потеряны. В atmega8515 можно обработать 1 прерывание за период в 2 символа. Если при этом забрать 2 байта, то переполнения не произойдёт. Этим и определяется фактический размер буфера.
Говорить об аппаратной реализации этого, глядя на картинки в даташите - считаю бессмысленным. Как давешний спор о принципиальной схеме АЦП, по её структурной схеме. Мне кажется, здесь уж что кому привидится. Да и какая разница не пойму? Здесь мы ведём речь о программной модели данного устр-ва.
Далее, не хотел конечно затевать этот спор, но уж вывели.
Если вы кроме фуза посмотрите и на сам блок, то увидите что в at90s8515 он называется UART, а в atmega8515 называется USART. В at90s возможно только 2 режима 8 и 9 бит и 1 стоп бит, в atmega - 5,6,7,8,9 и стоп 1,2. То есть различия более глубокие на самом деле. Кроме того, есть различия и в новых UART относительно более древних. Например между atm8 и atm88. Введён режим SPI. Таким образом блоки модифицируются постоянно.
|
|
|
|
10.04.2010, 14:02
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: AVR USART+прерывания=потеря данных
|
|
|
|
10.04.2010, 16:22
|
|
Частый гость
Регистрация: 15.01.2007
Сообщений: 20
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: AVR USART+прерывания=потеря данных
Во нафлудили, пока работал )
Проблема решена без замены или переделок.
С момента, как только мне обьяснили, что я ошибся в подсчете производительности прерывания таймера были исключены полностью. На случай возникновения прерывания INT0 у меня сбрасывается таймер и время ожидания в цикле основного тела уменьшается пропорционально натикавшему.
Все теперь работает, спасибо экспертам.
На тему остального: ваше мнение в части советов я принимаю с благодарностью. В части оценок - бесит ) Иначе не писал бы, верно ? )
Но в целом - совершенно не интересует. )
Всем спасибо.
Последний раз редактировалось umgah; 10.04.2010 в 16:26.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:53.
|
|