Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Реально ли в SiLabs 8051 передавать байты через UART без паузы?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
man with no name
Модем упрятан в железяку. Надо обновитьпрошивку. Между компом и модемом - камень от силабс.

Смотрю дш, в передатчике UART нет буфера передачи (как, например, в AVR). Возможно ли избежать паузы меджу завершением передачи стопового бита и началом передачи стартового следующего байта?

Надо для того, чтобы перенаправлять большие массивы данных из одного порта в другой, притом в обе стороны (прошивка - в одну сторону, верификация - в другую). Железки, находящиеся "по ту сторону" UART'ов таких задержек не имеют.

Буферы ввёл (по 256 байт), но они переполняются.

Длины непрерывных пакетов не знаю, но подозреваю, что порядка нескольких килобайт.

Порты полнодуплексные.
barabek
Цитата(man with no name @ Nov 17 2008, 08:07) *
Модем упрятан в железяку. Надо обновитьпрошивку. Между компом и модемом - камень от силабс.

Смотрю дш, в передатчике UART нет буфера передачи (как, например, в AVR). Возможно ли избежать паузы меджу завершением передачи стопового бита и началом передачи стартового следующего байта?

Надо для того, чтобы перенаправлять большие массивы данных из одного порта в другой, притом в обе стороны (прошивка - в одну сторону, верификация - в другую). Железки, находящиеся "по ту сторону" UART'ов таких задержек не имеют.

Буферы ввёл (по 256 байт), но они переполняются.

Длины непрерывных пакетов не знаю, но подозреваю, что порядка нескольких килобайт.

Порты полнодуплексные.

Нет, специально отведенных буферов нет. Только если у Вас достаточно низкие скорости и прерыванию от UART выставить высокие приоритеты можно приблизиться к вашему требованию. Какая у Вас скорость? Подозреваю что большая. И что должен делать камень кроме приема-передачи?
AndreyS
Цитата(man with no name @ Nov 17 2008, 01:07) *
Модем упрятан в железяку. Надо обновитьпрошивку. Между компом и модемом - камень от силабс.

Смотрю дш, в передатчике UART нет буфера передачи (как, например, в AVR). Возможно ли избежать паузы меджу завершением передачи стопового бита и началом передачи стартового следующего байта?


В UART аппарате SiLabs есть буфер передачи глубиной на 1 байт (свой для передачи и свой на прием. Только доступ к ним идет через один и тот же SFR адрес).
В AVR при использовании буфера FIFO (глубиной на 2 байта) только теоретически есть возможность передачи без пауз. А практически???
Естьу SiLabs в одном из контроллеров с FIFO UART более 2-х байт. Реализация с ним даст наименьшую паузу. Нашел его F50x серия. НО только в нем FIFO на прием. На передачу его нет.

Но тем не менее. А какая минимальная пауза у вас возможна???

Цитата
Буферы ввёл (по 256 байт), но они переполняются.


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


Какие паузы при передачи байтов по UART с той стороны???
man with no name
barabek
Спасибо. Вы полностью ответили на поставленный вопрос.
Скорости любые, но и объёмы передачи довольно большие, потому ставить 9600 бод не получится.
Цитата
AndreySВ AVR при использовании буфера FIFO (глубиной на 2 байта) только теоретически есть возможность передачи без пауз. А практически???

Но у силабс буфер передачи является выходным сдвиговым геристром, в АВР - нет.
В AVR на практике без пауз, т.к. есть флаг (и соответствующее прерывание) по опустошению буфера. При начале передачи данных первое и второе прерывания по опустошению буфера срабатывают "почти сразу", т.к. из буфера байт сразу уходит в сдвиговый регистр. Сразу заполняем буфер вторым байтом. Таким образом, получаем всегда запас по времени чуть меньше, чем в 10 бит, для того, чтобы положить очередной байт в буфер.
Цитата
Если буферы пелеполняются, то получается что входной поток данных (с той или иной стороны) огромен. И ваша прошивка попросту не справляется с ним. Тут или прошивку ускорять или поток уменьшать (это конечно если буферы у вас кольцевые).

Повторюсь: Длины непрерывных пакетов не знаю, но подозреваю, что порядка нескольких килобайт.
Буферы кольцевые. Прошивку менять особо некуда. Смотрел, что получается в ассемблере - ничего лишнего. Один простой цикл.
Цитата
Какие паузы при передачи байтов по UART с той стороны???

Ещё повторюсь: Железки, находящиеся "по ту сторону" UART'ов таких задержек не имеют.
barabek
Цитата(man with no name @ Nov 17 2008, 21:41) *
barabek
Спасибо. Вы полностью ответили на поставленный вопрос.
Скорости любые, но и объёмы передачи довольно большие, потому ставить 9600 бод не получится.

Я не зря спросил, занимается ли контроллер кроме трансляции потоков чем либо еще. Просто возможен такой вариант. Так как Вы не написали какой из силабовских камней используете, беру по максимуму smile.gif - камень с 2 UART на борту. Их приемники используем по назначению, а передатчики делаем софтверно, с использованием PCA. Сдвиговый регистр организовать - проще пареной репы. Вы будете точно знать, когда заканчивается стоп-бит (вернее Вы его сами выдаете), соответственно начинаете передачу следущего байта. Вобщем мою мысль поняли.
man with no name
Контроллер больше ничем не занимается. Разве что ждёт таймаута или парсит строчку завершения обновления. Идея хорошая, спасибо, подумаю. Камень действительно с двумя уартами.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.