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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Чудеса с UART'ом
evgen2
сообщение Jun 30 2010, 22:38
Сообщение #16


Местный
***

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



Цитата(zltigo @ Jul 1 2010, 02:05) *
Чрезмерно узкая трактовка слова proper. Отключайте, если уверены, что будете успевать работать без буферизации.


в тесте - будет, в боевых условиях - нет.
В принципе я выяснил, что есть задержка порядка 0.5 микросекунд на приеме одиночного байта или первого байта - хотя бы буду про это знать и помнить при расчетах.
---
Вот у меня зуб точится, чтоб убрать
while (!(U3LSR & 0x20));
при посылке порций, меньше размера буфера FIFO, но проведенные экперименты показывают, что так - не работает.
А код для этого while достаточно большой и добавляет тормозов.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 1 2010, 05:32
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (evgen2 @ Jul 1 2010, 00:38) *
при посылке порций, меньше размера буфера FIFO, но проведенные экперименты показывают, что так - не работает.

Забрасывание порции в FIFO не глядя cовершенно нормально работает, на то оно и FIFO.



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jul 1 2010, 06:01
Сообщение #18


.
******

Группа: Участник
Сообщений: 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
Сообщение #19


Местный
***

Группа: Участник
Сообщений: 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
singlskv
сообщение Jul 1 2010, 19:46
Сообщение #20


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(evgen2 @ Jul 1 2010, 11:36) *
Мысль о анализе ошибок надо думать. ведь надо городить огород вместо
while (!(U3LSR & 0x20));
и включать четность, которую обычно не включают.
Вы таки о передаче или о приеме ? (0x20 в LSR == THRE)
Если о передаче то у Вас все правильно происходит.
При использовании FIFO и однобайтовых передачах сигнал THRE появляется ровно
через N-1(где N общая длительность посылки символа в битовых интервалах) битовых
интервалов на выбранной скорости.
Так что, если хотите скорости, отправляйте в FIFO до 16 байт не глядя ни на какие флаги,
для >16 там конечно есть нюансы по общей организации потока...

Go to the top of the page
 
+Quote Post

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

 


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


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