Для дисплеев ILI9341 и ST7735 при передачи цвета в формате RGB565 нормальным при отображении (корректные цвета) считается передача сначала старшего байта, потом младшего.
При использовании SPI с шириной передачи данных 16 бит или 32 бита, сначала отправляется младший байт, потом старший.
На STM32H743 не нашел как байты местами менять, только порядок бит MSB/LSB.
Исходные данные c камеры аналогично не меняется порядок.
Вопрос: Есть ли у дисплеев регистр, отвечающий за хамену байт меставми в памяти?
ДШ на дисплеи как смог прочитал - не нашел
Картинка идёт с DCMI камеры ov7725, соответственно я её не создаю, она уже готовая.
А преобразование, код которого выше, не даёт быстрой частоты отображения, при быстром движении в кадре - появляются артефакты на дисплее.
Байты менять местами.
Rgb565 один пиксель занимает два байта.
И хочется чтоб дисплей ili9341 понимал эту замену, что бы не тратить время процессора на преобразование.
В ДШ дисплея не нашёл команды установки последовательности хранения байт изображения в памяти.
А что быстрее - сдвиг битов или как изначально цикл?
То есть - три переменные по байту, или даже может две хватит.
В каждую сдвигом нужное и объединить.
Не знаю, о каком контроллере речь. Если он поддерживает ДМА то можно передавать один буфер по дма и в это время перекодировать другой, это ускорит процесс примерно вдвое
Нет, не проще, это не работает.
Замена цветов в rgb565 это не то же самое что замена байтов в двухбайтовом слове.
ЗЫ. И конечно я интернет перерыл прежде чем постить тут, на буржуйском форуме были аналогичные вопросы, вот только решения не нашлось. Поэтому и надеюсь найдётся спец по ili9341.
Я не имел ввиду весь экран сдвигать. Так же в цикле, но сдвигать.
Что там изначально GBR? А нужно RGB?
Запоминаешь по маске R, двигаешь GB и в начало по маске «вставляешь» R. Или там как-то иначе?
половину кадра не очень выгодно, да и по памяти затратно. Пока вы первую половину обрабатываете, экран будет простаивать.
Лучше взять буфер поменьше, скажем 1/32 экрана. Быстро обработали, скормили буфер ДМА и переходите к следующему кусочку. В общем, размер надо подобрать по принципу минимального простоя как экрана, так и контроллера
Не, памяти там хватит + у каждого устройства свой dma поток, т е мне тупо надо каждый полукадр исходного изображения закинуть В полукадр дисплейной памяти, а отображение уже пусть dma разруливает.
На след неделе попробую, отпишусь.
я так понимаю сенсор выплевывает пиксел в rgb565 например 0xDDCC
что бы его правильно отобразил экран ему ТАК И надо передать 0xDD 0xCC
но SPI передает сначала младший потом старший 0xCC и 0xDD
отсюда весь гемор, @andycat я правильно мысль понял?