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

 
 
> Чудеса с UART'ом
evgen2
сообщение Jun 29 2010, 23:28
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688



Работаю c UART'ом.. на lpc2378 на максимальной скорости и чего-то с временами не то...
Частота UART'а = 4500000, т.е. по идее это 2.2 мкс на передачу одного байта
Сделал тест. С одной стороны
Код
  for(;;)
  {      t0 = T1TC;
      while (!(U3LSR & 0x20));
         U3THR = v;
      while (!(U3LSR & 0x01));
      a = U3RBR;
      dt  = T1TC - t0;
  }


с другой стороны - тупое эхо. Меряю время - получается 7 микросекунд, вместо 2.2 *2
если же выдавать не по одному байту, то измеренное время в расчете на байт уменьшается, приближаясь к рачетному.

FIFO вроде бы тут никак не должно играть. Разве только в случае незаполненого FIFO на передачу, это самое FIFO некоторое время ждет. В документации ни про какое торможение вроде не написано.

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GetSmart
сообщение Jul 1 2010, 06:01
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Картинки с осцилла вполне нормальные. Бодрейт верный, только паузы между байтами большие, непонятно из-за чего.

FIFO можно отключать полностью, по крайней мере я на LPC213x отключал и работал без косяков. Но на 470 кбодах. То есть аппаратура работать будет, а вот программе при этом будет тяжко. Однако, в настройках FIFO есть уровень срабатывания флагов/прерываний. Чего-то там 1,..,8,14 символов. В данном случае можно выставить глубину реакции в 1 символ и включить FIFO. И флаги должны устанавливаться сразу же, без всяких таймаутов.

Цитата(evgen2)
Вот у меня зуб точится, чтоб убрать
while (!(U3LSR & 0x20));
при посылке порций, меньше размера буфера FIFO, но проведенные экперименты показывают, что так - не работает.

При включённом FIFO должно работать. Даже когда глубина реакции = 1, можно забивать полное FIFO (16 байт).

Может тормоза из-за непонятных пока ошибок (в регистре статуса). Было бы неплохо анализировать другие биты в резистре UxLSR и сигнализировать чем-то еденичные биты в флагах ошибок.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
evgen2
сообщение Jul 1 2010, 07:36
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688



Цитата(GetSmart @ Jul 1 2010, 10:01) *
FIFO можно отключать полностью, по крайней мере я на LPC213x отключал и работал без косяков. Но на 470 кбодах. То есть аппаратура работать будет, а вот программе при этом будет тяжко. Однако, в настройках FIFO есть уровень срабатывания флагов/прерываний. Чего-то там 1,..,8,14 символов. В данном случае можно выставить глубину реакции в 1 символ и включить FIFO. И флаги должны устанавливаться сразу же, без всяких таймаутов.


При включённом FIFO должно работать. Даже когда глубина реакции = 1, можно забивать полное FIFO (16 байт).

Может тормоза из-за непонятных пока ошибок (в регистре статуса). Было бы неплохо анализировать другие биты в резистре UxLSR и сигнализировать чем-то еденичные биты в флагах ошибок.


Прерывания сами по себе съедают полторы микросекунды - от них я отказался в слейве, где делается попытка ловить внешний сигнал на максимальной частоте (думали что удасться добится 1 МГц, реально получается вроде хуже, но ненамного)

Мысль о анализе ошибок надо думать. ведь надо городить огород вместо
while (!(U3LSR & 0x20));
и включать четность, которую обычно не включают.

Но похоже что это актуально, потому как ошибки передачи у меня изредко встречаются и пришлось рожать и передавать crs

Цитата(zltigo @ Jul 1 2010, 09:32) *
Забрасывание порции в FIFO не глядя cовершенно нормально работает, на то оно и FIFO.

А что уставы говорят о порядке забрасывания, паузы между байтами нужны или не нужны ?
Повторю, что речь идет о максимальной частоте UART'а
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- evgen2   Чудеса с UART'ом   Jun 29 2010, 23:28
- - bseyur   Если я правильно понял, время отсчитывается по тай...   Jun 30 2010, 06:30
|- - evgen2   Цитата(bseyur @ Jun 30 2010, 10:30) Если ...   Jun 30 2010, 08:21
|- - bseyur   Цитата(evgen2 @ Jun 30 2010, 15:21) Куда ...   Jun 30 2010, 09:29
|- - evgen2   Цитата(bseyur @ Jun 30 2010, 13:29) Попро...   Jun 30 2010, 17:26
- - GetSmart   Что говорит осциллограф?   Jun 30 2010, 08:27
|- - evgen2   Цитата(GetSmart @ Jun 30 2010, 12:27) Что...   Jun 30 2010, 08:59
- - GetSmart   ширина бита какая? паузы между байтами какие? пауз...   Jun 30 2010, 09:06
|- - evgen2   Цитата(GetSmart @ Jun 30 2010, 13:06) шир...   Jun 30 2010, 09:08
- - GetSmart   Да, я народ   Jun 30 2010, 09:18
- - zltigo   QUOTE (evgen2 @ Jun 30 2010, 02:28) FIFO ...   Jun 30 2010, 17:49
|- - evgen2   Цитата(zltigo @ Jun 30 2010, 21:49) Прием...   Jun 30 2010, 18:46
|- - zltigo   QUOTE (evgen2 @ Jun 30 2010, 20:14) Дык в...   Jun 30 2010, 18:53
|- - evgen2   Цитата(zltigo @ Jun 30 2010, 22:53) Приви...   Jun 30 2010, 19:43
|- - zltigo   QUOTE (evgen2 @ Jun 30 2010, 21:43) This ...   Jun 30 2010, 22:05
|- - evgen2   Цитата(zltigo @ Jul 1 2010, 02:05) Чрезме...   Jun 30 2010, 22:38
|- - zltigo   QUOTE (evgen2 @ Jul 1 2010, 00:38) при по...   Jul 1 2010, 05:32
- - singlskv   Цитата(evgen2 @ Jul 1 2010, 11:36) Мысль ...   Jul 1 2010, 19:46


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 10:02
Рейтинг@Mail.ru


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