Да. Правильно.
Причём если я spi и соответственно dma настрою на передачу байтов (8 бит соответственно) то все работает как надо, что логично.
Но на дисплей нужно отправить 320х240х2 байт, а счётчик dma может отправить за раз только 64к единиц данных. Вот и приходится делать 32х битную передачу.
Попробую полукадр преобразовать на выходе с камеры на след неделе. Думаю все взлетит.
Глянул асм для STM32, неслабо, конечно…жируете))
Есть инструкция REV -как раз реверс байт в слове.
Но я первый раз это вижу, не знаю, как сделать ассемблерную вставку , может кто подскажет, или я позже , если будет время, сам попробую
Это костыль получается, т к во время передачи части буфера, предыдущий кадр уже может измениться.
Да и опять же, в мк дури много, пусть сам работает и собственными dma перекидывает данные куда надо.
А вот тут сложный вопрос.
С камеры dcmi dma берет строго по 32 бита (так в ДШ написано, по другому не работает), соответственно я не знаю поменяны ли пиксели в 32 битном слове, к сожалению на дисплее ili9341 сложно с его разрешением понять последовательность точек.
Но я обязательно проверю поменять пиксели местами и посмотрю как больше будет чёткость.
Конечно это рабочий код, выше фото, на экране изображение с камеры.
Вы не поняли, или я не так объяснил:
С камеры идёт последовательно поток байт по 8и битной шине.
Stm32 по dcmi с помощью dma загоняет этот поток в память. Dma работает строго по 32 бита. Какой из входящих от камеры байт будет старшим, какой младший я не знаю, документацию не нашёл или не понял (слаб в английском).
Соответственно в памяти видео буфера, в 32х разрядном слове находится два пикселя. Какой из них первый и второй я могу только догадываться или провести эксперимент и посмотреть в каком варианте будет более чёткая картинка.
Если я память видеобуфера вот как она есть отправляю по spi (8и битный режим) на дисплей - с картинкой все хорошо с точки зрения цветном и, но совсем не факт что корректная передача соседних по горизонтали пикселей.
Отпишу по результатам эксперимента.
Дык я считаю по количеству передачи каждого канала dma, сколько там реальных кадров - хз.
И да, они же (dma) между камерой и дисплеем не синхронизированы и приоритеты у них разные, у камеры высший, большой экран - средний, маленький экран - минимальный приоритет.
Никакого. Работают сами по себе. Мне например не надо думать что там с камерой происходит во время рисования поверх изображения на экране, кадр вывелся, нарисовал что надо в буфере экрана, вывел.
А вот это интересно, да, при быстром движении руками перед камерой, видно, что на экран выводится на доли секунд, на грани чувствительности зрения, горизонтальные полосы со старым изображением движущегося предмета, хотя быстродействия должно хватать