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

 
 
> Хочу писать в 16 линеек WS2812B на макс. скорости., Хочу весь буфер без участия процессора с минимумом накладных.
-=TRO=-
сообщение Dec 13 2017, 17:25
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 24-10-07
Из: zp.ua
Пользователь №: 31 690



Сразу предупреждаю, в STM32 я полный новичек, пока знакомлюсь.
Все чего пока добился, это моргать в кейле светодиодом на двухдолларовой плате с stm32f103c8t6.
До этого частенько писал для авр на бейсике и ассемблере, так что освоение stm32 вопрос времени.

Вопрос мой будет не столько про код, а про возможность выполнения нужного мне алгоритма переферией автономно.
Не буду скрывать, хочу без участия процессора выдавать поток данных сразу в 16 длинных линеек светодиодов WS2812B.
Для выдачи одного бита нужно на отдельном выводе сначала ~ на треть периода выставить 1, потом на треть данные, и на треть 0.
В принципе при помощи DMA данная задача реализуема, но вот этот ноль в начале и еденица в конце утроят размер буфера (и добавят неудобства работы с ним).

Поэтому возник вопрос, а можно ли как то внутренними или наружными выходами таймеров переводить (или заполнить) весь 16 битный порт GPIO в высокий и низкий уровни?
Вероятно можно было бы задействовать второй DMA для цикличной выдачи двух констант (с нулями и еденицами) в тот же порт, но думаю целый ДМА для этого жирновато.
Возможно не зная завязок и возможностей переферии я узковато мыслю, и есть более красивые решения, был бы рад услышать.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Plain
сообщение Dec 13 2017, 20:07
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 6 776
Регистрация: 5-03-09
Из: Москва
Пользователь №: 45 710



Отсюда и решение — все данные форматировать на сильной стороне, т.е. перетасовывать биты и избыточно кидать в SD лишние 0 и 1, а STM32 будет лишь тупой молотилкой.
Go to the top of the page
 
+Quote Post
-=TRO=-
сообщение Dec 13 2017, 20:41
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 24-10-07
Из: zp.ua
Пользователь №: 31 690



Цитата(Plain @ Dec 14 2017, 00:07) *
Отсюда и решение — все данные форматировать на сильной стороне, т.е. перетасовывать биты и избыточно кидать в SD лишние 0 и 1, а STM32 будет лишь тупой молотилкой.

Если гнать с компа то поток хотелось бы тоже не быстрый (например через UART пропихнуть), а экономить хочется оперативку, это ведь из неё через ДМА выгребатся все будет (20 кило байт оперативы, по 3 байта на цвет, уже 6 килопикселей, а это 80x80 всего, если запихнуть еще старт-стопы, то даже 50x50 не поместится).

К тому же эти самы непредсказуемые джиттеры ДМА и подначивали решать старстоповые дела без ДМА (все же нагрузка в три раза меньше).
Была мысль с аппаратным решением проблеммы, поставить буферный регистр с третьим состоянием, одним выходом таймера переводить регистр в третье состояние, а другим таймером формировать подтяжками нули и еденицы, а ДМА инициировать как раз в начале перехода регистров в Z состояние (за 80мкс старстопов ДМА должен успеть), тогда по фронтам должно быть все шоколадно... но это два корпуса регистров и 16 сопротивлений (или штук пять корпусов логики). Но ведь хочется то же самое все силами контроллера.

Сообщение отредактировал -=TRO=- - Dec 13 2017, 20:51
Go to the top of the page
 
+Quote Post
jcxz
сообщение Dec 13 2017, 20:44
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(-=TRO=- @ Dec 13 2017, 22:41) *
Но ведь хочется то же самое все силами контроллера.

Так и возьмите МК, которому заведомо это под силу. У которого есть например 4 шт. quad-SPI.
Ну или какой-нить STM32, у которого есть несколько независимых регионов памяти, с отдельными шинами. С CCM например.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- -=TRO=-   Хочу писать в 16 линеек WS2812B на макс. скорости.   Dec 13 2017, 17:25
- - DeNi   Да и с 3 каналами DMA нормальное решение от одного...   Dec 13 2017, 17:54
|- - -=TRO=-   Цитата(DeNi @ Dec 13 2017, 21:54) Да и с ...   Dec 13 2017, 19:32
|- - Огурцов   Цитата(-=TRO=- @ Dec 13 2017, 20...   Dec 14 2017, 01:50
- - jcxz   Цитата(-=TRO=- @ Dec 13 2017, 19...   Dec 13 2017, 18:05
|- - DeNi   Цитата(jcxz @ Dec 13 2017, 21:05) Можно в...   Dec 13 2017, 18:32
|- - jcxz   Цитата(DeNi @ Dec 13 2017, 20:32) И чем в...   Dec 13 2017, 19:38
|- - -=TRO=-   Цитата(jcxz @ Dec 13 2017, 23:38) Не знаю...   Dec 13 2017, 19:47
|- - jcxz   Цитата(-=TRO=- @ Dec 13 2017, 21...   Dec 13 2017, 20:08
|- - AlexandrY   Цитата(-=TRO=- @ Dec 13 2017, 21...   Dec 13 2017, 21:07
- - Огурцов   Цитата(-=TRO=- @ Dec 13 2017, 18...   Dec 13 2017, 19:15
- - Plain   А откуда задохлик STM32 будет брать такие объёмы в...   Dec 13 2017, 19:55
- - -=TRO=-   Plain, по началу с компа, потом с карточки. К том...   Dec 13 2017, 20:03
- - DeNi   Здесь можно почитать подробней про DMA в STM32 - A...   Dec 13 2017, 20:10
|- - jcxz   Цитата(DeNi @ Dec 13 2017, 22:10) По прио...   Dec 13 2017, 20:12
- - -=TRO=-   jcxz, в принципе я был готов, что под задачу понад...   Dec 13 2017, 21:09
|- - DeNi   Цитата(-=TRO=- @ Dec 14 2017, 00...   Dec 13 2017, 21:32
|- - jcxz   Цитата(DeNi @ Dec 13 2017, 23:32) Если хо...   Dec 13 2017, 21:46
- - x893   А можно использовать APA102 и забыть про геморрой....   Dec 13 2017, 21:50
- - -=TRO=-   x893, а я темнота и не знал что и такие бывают... ...   Dec 13 2017, 22:43
- - x893   я на 3 канала spi цеплял через dma на 1 MHz   Dec 13 2017, 23:58
- - -=TRO=-   Огурцов, вы знаете, а вам таки удалось меня пнуть ...   Dec 16 2017, 02:52


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

 


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


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