repstosw 18 3 июня, 2020 Опубликовано 3 июня, 2020 (изменено) · Жалоба Надо будет покурить на досуге этот DEFE... Но TCON всёравно будет, так как на нём видео-тайминги. DEFE как чисто рендерер Изменено 4 июня, 2020 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 4 июня, 2020 Опубликовано 4 июня, 2020 (изменено) · Жалоба On 6/3/2020 at 7:43 AM, sasamy said: TCON вообще может не использовать Display Engine а напрямую из DRAM читать данные Нет не может. В описании на TCON отсутствует упоминание о базовом адресе видеопамяти. Так что работа в составе DEBE. По крайней мере так сделано в sunxi-linux драйверах. Если не согласны, то пожалуйста предоставьте пруф в виде псевдо-кода! 21 hours ago, mantech said: ЗЫ. Хотя __inline__ сказал, что он только один слой использует, ему может и подойдет такой режим, если TCON может читать растр прямо из памяти... Не подошёл. Хотя бы по причине отсутствия входного формата RGB 5:6:5, что есть в DEBE :) Изменено 4 июня, 2020 пользователем repstosw Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 35 4 июня, 2020 Опубликовано 4 июня, 2020 · Жалоба 1 час назад, __inline__ сказал: Хотя бы по причине отсутствия входного формата RGB 5:6:5, что есть в DEBE :) Ну если sasamy прав и DEFE можно не использовать, а DEBE связать напрямую с памятью и TCONом, то все возможно... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 9 4 июня, 2020 Опубликовано 4 июня, 2020 · Жалоба 2 hours ago, __inline__ said: Нет не может. В описании на TCON отсутствует упоминание о базовом адресе видеопамяти. Вы не там смотрите - откройте описание DMA контроллера и в частности описание выделенных каналов DDMA DDMA_CFG_REG Quote DDMA_DST_DRQ_SEL. Dedicated DMA Destination DRQ Type 0xE: TCON0 ну и дальше разберетесь надеюсь - где там адрес указывается для источника в SDRAM DDMA_SRC_ADDR_REG Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 4 июня, 2020 Опубликовано 4 июня, 2020 · Жалоба 1 hour ago, mantech said: Ну если sasamy прав и DEFE можно не использовать, а DEBE связать напрямую с памятью и TCONом, то все возможно... DEFE я вообще не трогаю, ввиду того, что мне он по формату не подходит. А DEBE итак уже связан с TCON0 - в sunxi_display по крайней мере так. В DEBE задаются базовые адреса буферов, их логическая ширина и много чего ещё, а TCON забирает буфер с DEBE и гонит развёртку в монитор. 47 minutes ago, sasamy said: Вы не там смотрите - откройте описание DMA контроллера и в частности описание выделенных каналов DDMA DDMA_CFG_REG 47 minutes ago, sasamy said: ну и дальше разберетесь надеюсь - где там адрес указывается для источника в SDRAM DDMA_SRC_ADDR_REG То ли я дурак, или запутать пытаетесь... Читаю описание DDMA, вижу, надо задавать адрес источника и приёмника. Допустим первый - это мой буфер где я строю изображение. В второй тогда кто??? Приёмный адрес чей? У TCON0 нету дата-регистра для приёма данных в него, как это например есть в аудио-кодеке: DAC_TX_DATA_REG. Ну и что что там TCON0 DRQ прописан, это вообще триггер на срабатывание ДМА, который данном случае начнёт работу когда будет VBLANK от дисплея(TCON). Ещё раз, я не вижу прямое упоминание того, что в TCON0 можно сыпать данные из DMA. Выше mantech упомянул о возможности связки DEBE и TCON0, так это итак уже есть и оно работает! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 4 июня, 2020 Опубликовано 4 июня, 2020 · Жалоба Для внесения ясности, выкладываю картинку всего конвеера, который работает с видеосистемой. Это то, как сейчас у меня сделано: Если фильтрация изображения не нужна, то конвеер упрощается. В моей задаче нужна двойная буферизация. Поэтому сделана пересылка DMA из одного в другой буфер. Можно ещё более упростить - писать сразу в первичный буфер, но тогда придётся постоянно ждать VBLANK. Или вообще применить flip-схему. Пока 1 буфер рисуется, второй отображается. Затем смена во время VBlank. Так тоже работает, но схема с DMA мне более лучше подходит, так как flip-схема заставляет всегда обновлять страницы. Все три схемы у меня обкатаны и отлично работают на Allwinner A13. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 35 4 июня, 2020 Опубликовано 4 июня, 2020 · Жалоба 43 минуты назад, __inline__ сказал: DEFE я вообще не трогаю, ввиду того, что мне он по формату не подходит. А DEBE итак уже связан с TCON0 - в sunxi_display по крайней мере так. В DEBE задаются базовые адреса буферов, их логическая ширина и много чего ещё, а TCON забирает буфер с DEBE и гонит развёртку в монитор. Да я тут честно говоря и не заморачиваюсь, просто интересна озвученная идея использовать нафиг не нужный DEFE в качестве 2Д ДМА, получится или нет - вот в чем вопрос, надо пробовать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 4 июня, 2020 Опубликовано 4 июня, 2020 · Жалоба 11 minutes ago, mantech said: просто интересна озвученная идея использовать нафиг не нужный DEFE в качестве 2Д ДМА, получится или нет - вот в чем вопрос, надо пробовать... Мне он показался очень неудобным. Скорее всего это для видео-кодеков пойдёт. например CedarX. Ограниченный выбор пиксел-формата с преобладанием YUV вместо RGB положил конец моему интересу к DEFE. Много вакуума. Как настроить те же коэффициенты фильтра? Откуда их брать? Как связать выходной буфер DEFE с отображением на монтор ? DEFE это неумеет, так как видеотайминги задаются TCON, а сканинг пикселей идёт DEBE. Так что в чистом виде DEFE не может гнать кадр в дисплей ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 9 4 июня, 2020 Опубликовано 4 июня, 2020 · Жалоба 2 hours ago, __inline__ said: То ли я дурак, или запутать пытаетесь... запутать я не пытаюсь 2 hours ago, __inline__ said: В второй тогда кто??? Приёмный адрес чей? Спросите у производителя, у меня такая же инфа как у вас - мануал 2 hours ago, __inline__ said: я не вижу прямое упоминание того, что в TCON0 можно сыпать данные из DMA Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 4 июня, 2020 Опубликовано 4 июня, 2020 · Жалоба 1 hour ago, sasamy said: Спросите у производителя, у меня такая же инфа как у вас - мануал В общем с вами всё ясно :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 35 4 июня, 2020 Опубликовано 4 июня, 2020 (изменено) · Жалоба 2 часа назад, __inline__ сказал: Мне он показался очень неудобным. Скорее всего это для видео-кодеков пойдёт. например CedarX. Может я конечно ничего не понял в этих извращениях, но если судить по схеме DEFE, то его ДМА может брать данные по некоему адресу источника в памяти, прогонять их через всякие колор-конвертеры и результат может снова закидывать по адресу получателя обратно в память, т.е. если отключить все ненужное, получается что он берет по адресу источника нечто, прогоняет через себя и это же нечто закидывает снова в память по адресу получателя, поэтому не один фиг, что за форматы он перекачивает - это просто данные. Другое дело, может ли он брать и класть одновременно? Или я чего-то не догоняю? Изменено 4 июня, 2020 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 9 4 июня, 2020 Опубликовано 4 июня, 2020 · Жалоба 1 hour ago, __inline__ said: В общем с вами всё ясно я чета не понял - вы боитесь письмо в техподдержку написть с просьбой пояснить работу DMA у TCON ? Хотя понятно что это вам не нужно - DEBE и TCON по отдельности нафик не нужены. Да и вопрос был по 2D DMA - всё там есть, Непонятно почему у вас так подгорело от TCON :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 4 июня, 2020 Опубликовано 4 июня, 2020 · Жалоба 1 hour ago, mantech said: Может я конечно ничего не понял в этих извращениях, но если судить по схеме DEFE, то его ДМА может брать данные по некоему адресу источника в памяти, прогонять их через всякие колор-конвертеры и результат может снова закидывать по адресу получателя обратно в память, т.е. если отключить все ненужное, получается что он берет по адресу источника нечто, прогоняет через себя и это же нечто закидывает снова в память по адресу получателя, поэтому не один фиг, что за форматы он перекачивает - это просто данные. Другое дело, может ли он брать и класть одновременно? Или я чего-то не догоняю? так оно и есть. DEFE берёт данные из входного буфера, затем производит операцию скейлера (масштабирует) и фильтра (сглаживает изображение), полученное изображение кладёт в выходной буфер. А на выходной буфер можно натравить на DEBE, который передаст его в монитор(точнее в видео-цап), а TCON сформирует сигналы развёртки (Hsync, VSync, DE, PCLK и др. по необходимости). Тоесть это некий аппаратный фильтр-скейлер рендерер. Но вся беда в том, что он заточен на YUV или RGBA 8:8:8:8. Поэтому мне он не подходит. Использовать его как ДМА - сомнительное решение. Так как пиксели будут подвергнуты преобразованию из-за масштабирования и сглаживания. Даже если подобрать сжатие =1 и отключить сглаживание, то скорее всего из-за ошибок с floating point во внутренних конвеерах выходной буфер будет отличаться от входного. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 35 4 июня, 2020 Опубликовано 4 июня, 2020 · Жалоба 6 минут назад, __inline__ сказал: выходной буфер будет отличаться от входного. По идее не должно, проверял подобный модуль на IMX6 не искажалось, но были и приколы, например нужно было выравнивать адреса до 64 и 32 байта мин. пересылка, но это мелочи.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
repstosw 18 5 июня, 2020 Опубликовано 5 июня, 2020 · Жалоба 16 hours ago, mantech said: По идее не должно, проверял подобный модуль на IMX6 не искажалось, но были и приколы, например нужно было выравнивать адреса до 64 и 32 байта мин. пересылка, но это мелочи С наскоку попытался DEFE запустить, ничё не вышло. Не работает что-то. При этом его Write-Back буфер указал что это буфер отображения TCON/DEBE. Изменений не последовало, ничего он ненарендерил. В AHB разрешил тактирование, включил PLL3 для него, глобально разрешил и тотальное бездействие. Код ниже. #define DEBE_BASE 0x01E60000 #define DEFE_BASE 0x01E00000 #define CCM_BASE 0x01C20000 #define DEBE_LAYFB_L32ADD_REG (*(IO u32*)(DEBE_BASE+0x850)) #define DEBE_LAYFB_H4ADD_REG (*(IO u32*)(DEBE_BASE+0x860)) #define DEFE_EN_REG (*(IO u32*)(DEFE_BASE+0x0000)) /* DEFE Module Enable Register */ #define DEFE_FRM_CTRL_REG (*(IO u32*)(DEFE_BASE+0x0004)) /* DEFE Frame Process Control Register */ #define DEFE_WB_ADDR0_REG (*(IO u32*)(DEFE_BASE+0x0050)) /* DEFE Channel 3 Write Back Address Register */ #define DEFE_BUF_ADDR0_REG (*(IO u32*)(DEFE_BASE+0x0020)) /* DEFE Input Channel 0 Buffer Address Register */ #define DEFE_BUF_ADDR1_REG (*(IO u32*)(DEFE_BASE+0x0024)) /* DEFE Input Channel 1 Buffer Address Register */ #define DEFE_BUF_ADDR2_REG (*(IO u32*)(DEFE_BASE+0x0028)) /* DEFE Input Channel 2 Buffer Address Register */ #define DEFE_LINESTRD0_REG (*(IO u32*)(DEFE_BASE+0x0040)) /* DEFE Channel 0 Line Stride Register */ #define DEFE_LINESTRD1_REG (*(IO u32*)(DEFE_BASE+0x0044)) /* DEFE Channel 1 Line Stride Register */ #define DEFE_LINESTRD2_REG (*(IO u32*)(DEFE_BASE+0x0048)) /* DEFE Channel 2 Line Stride Register */ #define DEFE_CH0_INSIZE_REG (*(IO u32*)(DEFE_BASE+0x0100)) /* DEFE Channel 0 Input Size Register */ #define DEFE_CH0_OUTSIZE_REG (*(IO u32*)(DEFE_BASE+0x0104)) /* DEFE Channel 0 Output Size Register */ #define DEFE_CH0_HORZFACT_REG (*(IO u32*)(DEFE_BASE+0x0108)) /* DEFE Channel 0 Horizontal Factor Register */ #define DEFE_CH0_VERTFACT_REG (*(IO u32*)(DEFE_BASE+0x010C)) /* DEFE Channel 0 Vertical factor Register */ #define DEFE_CH1_INSIZE_REG (*(IO u32*)(DEFE_BASE+0x0200)) /* DEFE Channel 0 Input Size Register */ #define DEFE_CH1_OUTSIZE_REG (*(IO u32*)(DEFE_BASE+0x0204)) /* DEFE Channel 0 Output Size Register */ #define DEFE_CH1_HORZFACT_REG (*(IO u32*)(DEFE_BASE+0x0208)) /* DEFE Channel 0 Horizontal Factor Register */ #define DEFE_CH1_VERTFACT_REG (*(IO u32*)(DEFE_BASE+0x020C)) /* DEFE Channel 0 Vertical factor Register */ #define DEFE_WB_LINESTRD_EN_REG (*(IO u32*)(DEFE_BASE+0x00D0)) /* DEFE Write Back Line Stride Enable Register */ #define DEFE_WB_LINESTRD0_REG (*(IO u32*)(DEFE_BASE+0x00D4)) /* DEFE Write Back Channel 3 Line Stride Register */ #define FE_CFG_REG (*(IO u32*)(CCM_BASE+0x10C)) #define AHB1_CFG_REG (*(IO u32*)(CCM_BASE+0x064)) main() { video_hw_init(); //инитим TCON и DEBE //базовый адрес видеопамяти DEBE DEBE_LAYFB_L32ADD_REG=0x5FE00000UL<< 3; //Low DEBE_LAYFB_H4ADD_REG =0x5FE00000UL>>29; //High AHB1_CFG_REG|=(1<<14); //разрешаем тактирование DEFE FE_CFG_REG=(1<<31); //разрешаем CLK, выбор PLL3 DEFE_WB_ADDR0_REG=0x5FE00000; //это адрес выходного буфера - тут рендерер кладёт готовую картинку. Совпадает с видеопамятью DEFE_BUF_ADDR0_REG=0x5FD00000; //входный буфера. Тут мусор. YUV составляющие DEFE_BUF_ADDR1_REG=0x5FD00000+0x40000; DEFE_BUF_ADDR2_REG=0x5FD00000+0x80000; DEFE_LINESTRD0_REG=400; //ширина в пикселах на каждую компоненту YUV DEFE_LINESTRD1_REG=400; DEFE_LINESTRD2_REG=400; DEFE_WB_LINESTRD_EN_REG=1; //разрешить установку ширины на выходной буфер DEFE_WB_LINESTRD0_REG=800; //ширина выходного буфера DEFE_CH0_INSIZE_REG=((240-1)<<16)|(400-1); //размер входного кадра DEFE_CH0_OUTSIZE_REG=((480-1)<<16)|(800-1); //..выходного DEFE_CH0_HORZFACT_REG=(0<<16)|5; //масштабный коэффициент 0.5 DEFE_CH0_VERTFACT_REG=(0<<16)|5; DEFE_CH1_INSIZE_REG=((240-1)<<16)|(400-1); //тоже для компонент UV DEFE_CH1_OUTSIZE_REG=((480-1)<<16)|(800-1); DEFE_CH1_HORZFACT_REG=(0<<16)|5; DEFE_CH1_VERTFACT_REG=(0<<16)|5; DEFE_EN_REG=1; //enable DEFE DEFE_FRM_CTRL_REG=(1<<23)|(1<<16)|(1<<11)|(1<<2)|1; //start..... //....... и нифига Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться