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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Сколько байт можно гарантированно запихивать в UART LPC (UART0 LPC2292) по прерыванию THRE?, Видимо 16
Alex03
сообщение Oct 13 2006, 08:54
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 9-12-05
Пользователь №: 12 034



Цитата(zltigo @ Oct 13 2006, 13:58) *
В расхождение старших (маскируемых) битов полного 'указателя' отражает
и факт переполнения и количество потерянных буферов/байтов.


Для контроля переполнения обязательно использовать и младшие биты, т.е. разность индексов головы и хвоста!

Иначе контроль не переполнения, а разбега в +/-размер буфера.
Если равны - хорошо
Если отличаются на единицу (в смысле старшие биты без младших) - то возможно переполнение
Если отличаются более чем на единицу - то точно переполнение

Цитата(zltigo @ Oct 13 2006, 13:58) *
Причем это может быть проконтролировано в любой момент времени а не только в момент занесения, как в случае принудительного зацикливания.


Если у Вас процессы занесения и вытаскивания както синхронизированны, то между ними в любой момент контролировать может и получится.
Если эти процессы полностью асинхронные, то в моменты контроля всё может быть хорошо, но между ними переполнение и соответственно искажение данных на выходе.
Ну и по всей видимости так (бесконтрольно) можно поступать там где выгребание из FIFO гарантированно быстрей чем засовывание туда.


Цитата(zltigo @ Oct 13 2006, 13:58) *
Странно, Вы написали 'кучу' строчек в стиле
"А я что то всегда их циклю.." а тут одна :-)


Под циклю я понимал то, что у меня старшие биты индексов всегда нулевые.
И Ваш вариант их использования мне понравился, но только в плане количественной оценки прошедших через FIFO данных. Потому я и спросил, вдруг ещё чего я не увидел.

PS Впрочем это всё уже оффтопик.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 13 2006, 09:29
Сообщение #17


Гуру
******

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



Цитата(Alex03 @ Oct 13 2006, 11:54) *
Если у Вас процессы занесения и вытаскивания както синхронизированны, то между ними в любой момент контролировать может и получится.

Получится, читаем еще раз внимательно что контролировать - "факт переполнения буфера".
Без всяких "может".
Цитата
Ну и по всей видимости так (бесконтрольно) можно поступать там где выгребание из FIFO гарантированно быстрей чем засовывание туда.

Или, что гораздо боее часто - система с отказами и пиковая/аварийная нагрузка гарантировано забьет FIFO. Или в случае, если источник торможению по своей природе не поддается. Достаточно 'если'?
Кроме того, даный механизм не отвергает и прикручивание контроля наличия места в буфере перед
занесением, причем сие тоже делается проще и быстрее одним действием, нежели вычисление размера по двум 'коротким' указателям и размеру кольцевого буфера.

Цитата
И Ваш вариант их использования мне понравился, но только в плане количественной оценки прошедших через FIFO данных. Потому я и спросил, вдруг ещё чего я не увидел.

Таки не увидели.
Цитата
PS Впрочем это всё уже оффтопик.

Да, Sapienti Sap


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 13 2006, 12:20
Сообщение #18


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Alex03 @ Oct 12 2006, 06:18) *
Вы ж сами сказали
Цитата
The U0THR is the top byte of the UART0 Tx FIFO.

Т.е. U0THR это голова FIFO, а не отдельный регистр. И если в FIFO чтото есть то THR не пуст.

ИМХО у Филипса тут дока кривоватая. Все эти THRE (как прерывание и как бит в LSR) THR (как U0THR) и т.д. Вроде всё просто, но понимание приходит со временем.

В общем я уже на практике убедился в своих словах.
Не поверив провел эксперимент. Действительно этот флаг сбрасывания при засовывании первого же байта. Обратился к прародителю, т.е. к TL16C550. Там расписано более подробно, и вот что нашлось:
Цитата
In the FIFO mode, this bit is set when the transmit FIFO is empty; it is cleared when at least 1 byte is written to the transmit FIFO.
Теперь все сходится, но осталось некоторое недоумение - внимательно перечитав доку на 550 я так и не нашел индикатора "в FIFO есть место". Получается если у меня есть один байт на передачу я его могу положить только в пустое FIFO, в противном случае никаких гарантий что я порушу предыдущие байты в FIFO. Выходит не только у филипса дока кривоватая, но и реализация у прародителя крива :-(


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 13 2006, 15:06
Сообщение #19


Гуру
******

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



Цитата(Сергей Борщ @ Oct 13 2006, 15:20) *
Выходит не только у филипса дока кривоватая, но и реализация у прародителя крива :-(

Реализация не 'крива', она просто сбалансировано-минималистична и ввиду этого является
индустриальным стандартом работающим многие годы и несущим на себе в том числе и совместимость в линейке 50->450->550x.
Да было-бы иногда не плохо узнать о факте наличия места в FIFO, а потом и о размере этого места а
потом и FIFO побольше, а потом....
В принципе столь небольшое FIFO в большинстве случаев просто не годится на роль заменителя буфера передачи :-(, посему внешний программный организовывать надо, ну а при внешнем - не слишком накладно, (а во многих случаях и быстрее, нежели лезть по 8bit к шине к медленной железке ) организовать подпитывание FIFO фиксированными проциями по прерыванию THRE.
Если-бы FIFO у нее было, например, 512 байт, то я первый-бы назвал ее кривой и вопрошал-бы -
ну где хоть "FIFO полупустое!"
А так в общем совершенно нормальная железка со сбалансированными возможностями.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th June 2025 - 23:18
Рейтинг@Mail.ru


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