|
LTDC + ChromART в STM, Проконсультируйте, кто работал. |
|
|
|
Mar 1 2016, 10:26
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Наконец, дошли руки до нового проекта. Изучил, насколько мозгов хватает. Мне непонятны некоторые моменты. 1. Допустим я хочу работать с LTDC в режиме L8 через CLUT. 565 на выходе. Вроде бы всё понятно никаких проблем не вижу. При копировании цветных картинок тоже проблем не вижу. Получается что их надо кратными 4 точкам делать да и запускать в 32-ух битном цвете 1 в 1. Фонты я сделал L4 b вот тут проблема. Либо вручную разворачивать L4 в L8, либо пробовать обычным DMA память - память, источник байт, получатель 16 бит, на предварительно очищенную память (если такое есть ещё). После чего делать альфа преобразование с цветом фонта. и потом прямое копирование DMA2D. 2. Допустим я хочу работать с LTDC в режиме 565 на прямую, а цветные картинки выводить через LUT. Вот тут проблема. По описанию CLUT имеет 2 режима 32/24 бита. Я что-то не пойму. То есть если я хочу преобразовать L8 -> 565(16), то такой возможности в DMA2D нет? И L4 -> 565 тоже нет. Или я чего-то недогоняю? PS: Нашёл в регистре (DMA2D output PFC control register (DMA2D_OPFCCR)) Color mode: These bits define the color format of the output image. И там режим RGB565. То есть вариант работы 2 просматривается. Для варианта L4 -> 8, только косвенные подходы. То есть сформировать CLUT на две точки Получится конструкция типа L4L4 -> L8L8. Правда размер LUT не маленький 256 * 3 = 768 по минимуму. Вроде бы где-то читал, что можно FLASH таблицу использовать. Короче буду думать пока. Наверное склоняюсь к варианту 2. === Если есть кто реализовывал аналогичные варианты - откликнитесь. Любопытно кто как делал.
|
|
|
|
|
 |
Ответов
|
Aug 24 2016, 16:43
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 21-08-16
Из: Москва
Пользователь №: 93 041

|
Всем спасибо большое за ответ!!! Понял всю фатальность ситуации, что запуск моей платы снова отодвинут на этап создания паттернов в PCAD. Для себя на пальцах представил ОЗУ, как участок земли определённой площади, которым я обладаю (в моём случае - 256 кв. м). Видеобуфер - это полотно, которое я могу расстелить в пределах моего участка. Полотно, зараза, большое. Пиксели - это кубики с площадью основания >= 2 кв.м. И чтобы мне расстелить полотно, нужно купить участок побольше, можно и в другом районе, дабы курьерская служба DMA2D может доставить кубики-пиксели куда угодно) Уважаемый SasaVitebsk, я ведь в случае варианта 2 могу не брать другой экран, а на своём задать область размером, допустим 400х300 на слое 1? Или нужно вначале инициализировать экран конкретно под это разрешение? Пока не выходит, хотя создал uint16_t aBufferResult[95000] (больше не создаётся). Может нужно как-то по-другому задавать видеобуфер? Тут мои знания уже конкретно плывут(
|
|
|
|
|
Aug 25 2016, 09:27
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(adrvyho @ Aug 24 2016, 19:43)  а на своём задать область размером, допустим 400х300 на слое 1? Или нужно вначале инициализировать экран конкретно под это разрешение? Нужно проинициализировать экран со всеми таймингами под полное разрешение, но при инициализации слоев (а именно они используют видеопамять) можно указать буфера меньшего размера. Границы будут залиты цветом фона, который можно выбрать. Можно один из слоев натравить на ПЗУ, тогда будет выводится статический логотип к примеру. Можно попробовать анимировать этот логотип, перезависывая адрес начала видеобуфера синхронно с ходом луча  PS. Я так делал - работает, но при определенных соотношениях размеров.
|
|
|
|
|
Aug 25 2016, 15:00
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 21-08-16
Из: Москва
Пользователь №: 93 041

|
Цитата(adnega @ Aug 25 2016, 09:27)  Нужно проинициализировать экран со всеми таймингами под полное разрешение, но при инициализации слоев (а именно они используют видеопамять) можно указать буфера меньшего размера. Границы будут залиты цветом фона, который можно выбрать. Именно так и сделал - задал массив aBufferResult при инициализации слоя 1, сделал заполнение 2х областей. Дык, всё равно заливаются линии, а не области!  Видимо, прокладка между рулём и сиденьем износилась) Подскажите, пожалуйста, как корректно задать видеобуфер - видимо я это совсем через пень-колоду делаю.
|
|
|
|
|
Aug 25 2016, 15:38
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 21-08-16
Из: Москва
Пользователь №: 93 041

|
Цитата(adnega @ Aug 25 2016, 15:27)  Кусок кода покажете? CODE #define PIXELWIDHT 2
#define LCD_WIDTH 800 #define LCD_HEIGHT 480
#define HFP 40 #define HSYNC 48 #define HBP 40
#define VFP 13 #define VSYNC 3 #define VBP 29
#define ACTIVE_W (HSYNC + LCD_WIDTH + HBP - 1) #define ACTIVE_H (VSYNC + LCD_HEIGHT + VBP - 1) #define DISP_ACCUM_HORIZ_BACKPORCH (HSYNC + HBP - 1) #define DISP_ACCUM_VERT_BACKPORCH (VSYNC + VBP - 1) #define TOTAL_WIDTH (HSYNC + HBP + LCD_WIDTH + HFP - 1) #define TOTAL_HEIGHT (VSYNC + VBP + LCD_HEIGHT + VFP - 1)
uint16_t aBufferResult[95000];
void Screen_Init(void) { LTDC_HandleTypeDef displayTypeDef; LTDC_LayerCfgTypeDef displayLayer1; LTDC_LayerCfgTypeDef displayLayer2; GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5| GPIO_PIN_6|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; GPIO_InitStruct.Alternate = 14; HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_10| GPIO_PIN_11; HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1| GPIO_PIN_2|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_9|GPIO_PIN_10;
HAL_GPIO_Init(GPIOI, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3| GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_1 4|GPIO_PIN_15;
HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_12; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); HAL_GPIO_WritePin(GPIOE, GPIO_PIN_12, 1); __LTDC_CLK_ENABLE(); // PLL /* LCD clock configuration */ /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 MHz */ /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 192 MHz */ /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 192/5 = 38.4 MHz */ /* LTDC clock frequency = PLLLCDCLK / LTDC_PLLSAI_DIVR_4 = 38.4/4 = 9.6MHz */ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC; PeriphClkInitStruct.PLLSAI.PLLSAIN = 192; PeriphClkInitStruct.PLLSAI.PLLSAIR = 5; PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_4; HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); // enable clock for LTDC RCC->APB2ENR |= RCC_APB2ENR_LTDCEN;
// LTDC HAL_LTDC_Init(&displayTypeDef); displayTypeDef.Instance = LTDC; displayTypeDef.Init.HSPolarity = LTDC_HSPOLARITY_AL; displayTypeDef.Init.VSPolarity = LTDC_VSPOLARITY_AL; displayTypeDef.Init.DEPolarity = LTDC_DEPOLARITY_AL; displayTypeDef.Init.PCPolarity = LTDC_PCPOLARITY_IPC; displayTypeDef.Init.HorizontalSync = HSYNC-1; displayTypeDef.Init.VerticalSync = VSYNC-1; displayTypeDef.Init.AccumulatedHBP = DISP_ACCUM_HORIZ_BACKPORCH; displayTypeDef.Init.AccumulatedVBP = DISP_ACCUM_VERT_BACKPORCH; displayTypeDef.Init.AccumulatedActiveW = ACTIVE_W; displayTypeDef.Init.AccumulatedActiveH = ACTIVE_H; displayTypeDef.Init.TotalWidth = TOTAL_WIDTH; displayTypeDef.Init.TotalHeigh = TOTAL_HEIGHT; displayTypeDef.Init.Backcolor.Blue = 200; displayTypeDef.Init.Backcolor.Green = 0; displayTypeDef.Init.Backcolor.Red = 200;
HAL_LTDC_Init(&displayTypeDef);
// Layer 1 displayLayer1.WindowX0 = 210; displayLayer1.WindowX1 = 590; displayLayer1.WindowY0 = 100; displayLayer1.WindowY1 = 380; displayLayer1.PixelFormat = LTDC_PIXEL_FORMAT_ARGB4444; displayLayer1.Alpha = 255; displayLayer1.Alpha0 = 250; displayLayer1.BlendingFactor1 = LTDC_BLENDING_FACTOR1_CA; displayLayer1.BlendingFactor2 = LTDC_BLENDING_FACTOR2_CA; displayLayer1.FBStartAdress = (uint32_t)&aBufferResult; displayLayer1.ImageWidth = 0; displayLayer1.ImageHeight = 0; displayLayer1.Backcolor.Blue = 250; displayLayer1.Backcolor.Green = 0; displayLayer1.Backcolor.Red = 200; HAL_LTDC_ConfigLayer(&displayTypeDef, &displayLayer1, 0); }
static void DMA2D_Config(void) { __HAL_RCC_DMA2D_CLK_ENABLE(); /* Register to memory mode with ARGB4444 as colorMode */ Dma2dHandle.Init.Mode = DMA2D_R2M; Dma2dHandle.Init.ColorMode = DMA2D_ARGB4444; Dma2dHandle.Init.OutputOffset = 0x0;
Dma2dHandle.XferCpltCallback = TransferComplete; Dma2dHandle.XferErrorCallback = TransferError; Dma2dHandle.Instance = DMA2D; /* DMA2D Initialization */ if(HAL_DMA2D_Init(&Dma2dHandle) != HAL_OK) { } }
static void _DMA_Fill(void * pDst, int xSize, int ySize, int OffLine, uint32_t ColorIndex) {
DMA2D->CR = 0x00030000UL | (1 << 9); // Register to memory and TCIE DMA2D->OCOLR = ColorIndex; // Color to be used DMA2D->OMAR = (uint32_t)pDst; // Destination address DMA2D->OOR = OffLine; // Destination line offset DMA2D->OPFCCR = 4; // Defines the number of pixels to be transfered DMA2D->NLR = ((uint32_t)xSize << 16) | ySize; // Size configuration of area to be transfered DMA2D->CR |= 1; // Start operation // // Wait until transfer is done // while (DMA2D->CR & DMA2D_CR_START) { //__WFI(); // Sleep until next interrupt } Код _DMA_Fill(aBufferResult+10, 10, 10, 0, 0x1F0A); _DMA_Fill(aBufferResult+200, 20, 2, 0, 0x1C01); _DMA_Fill(aBufferResult+300, 50, 20, 0, 0xF0F0);
Сообщение отредактировал IgorKossak - Aug 25 2016, 17:20
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
|
|
|
|
Сообщений в этой теме
SasaVitebsk LTDC + ChromART в STM Mar 1 2016, 10:26 Шаманъ Цитата(SasaVitebsk @ Mar 1 2016, 12:26) К... Mar 1 2016, 15:03 SasaVitebsk Спасибо.
А всё же. Кто-нибудь реализовывал графику... Mar 2 2016, 07:15 DrGluck Вечер добрый !
Тут лучше начать с "конца... Mar 2 2016, 17:52 adnega Цитата(DrGluck @ Mar 2 2016, 20:52) В дис... Mar 2 2016, 18:53 SasaVitebsk Цитата(DrGluck @ Mar 2 2016, 20:52) Тут л... Mar 4 2016, 07:51  NaughtyFreak Цитата(SasaVitebsk @ Mar 4 2016, 10:51) А... Mar 4 2016, 08:29  skripach Цитата(SasaVitebsk @ Mar 4 2016, 10:51) L... Mar 6 2016, 04:52 Rash если с SDRAM проблемы, то почему не подключить обы... Mar 2 2016, 18:15 NaughtyFreak Модно я здесь спрошу не совсем в тему?
Есть диспле... Mar 3 2016, 14:16 Obam Цитата(NaughtyFreak @ Mar 3 2016, 18:16) ... Mar 3 2016, 14:31 aaarrr Цитата(NaughtyFreak @ Mar 3 2016, 17:16) ... Mar 3 2016, 14:48  NaughtyFreak Цитата(aaarrr @ Mar 3 2016, 17:48) Если п... Mar 3 2016, 14:50 NaughtyFreak никак, это готовый модуль с интерфейсом RGB 24 bit... Mar 3 2016, 14:35 Obam Цитата(NaughtyFreak @ Mar 3 2016, 18:35) ... Mar 3 2016, 14:42 NaughtyFreak Есть даташит с распинвокой и таймингами Mar 3 2016, 14:46 Obam Цитата(NaughtyFreak @ Mar 3 2016, 18:46) ... Mar 3 2016, 14:54  NaughtyFreak Цитата(Obam @ Mar 3 2016, 17:54) Может по... Mar 3 2016, 15:07   Obam Цитата(NaughtyFreak @ Mar 3 2016, 19:07) ... Mar 4 2016, 09:02    SasaVitebsk Цитата(Obam @ Mar 4 2016, 12:02) Да, инте... Mar 4 2016, 12:07     Obam Цитата(SasaVitebsk @ Mar 4 2016, 16:07) Н... Mar 4 2016, 12:21      SasaVitebsk Цитата(Obam @ Mar 4 2016, 15:21) Не надо ... Mar 4 2016, 12:28 DrGluck "... если с SDRAM проблемы, то почему не подк... Mar 3 2016, 15:00 NaughtyFreak Да понятно, что так правильно, но у меня всего ост... Mar 4 2016, 11:31 SasaVitebsk Вроде бы со всем разобрался, но некоторые вопросы ... Mar 11 2016, 08:01 SasaVitebsk Короче пишу на всех парах приложение. Сейчас лабаю... Mar 30 2016, 07:19 lleeloo Нужно больше гуев, хороши и разных=) Чем не устрои... Mar 31 2016, 21:34 SasaVitebsk Цитата(lleeloo @ Apr 1 2016, 00:34) Нужно... Apr 1 2016, 05:42 AleksBak Цитата(lleeloo @ Apr 1 2016, 01:34) Нужно... Apr 1 2016, 07:35 scifi Цитата(lleeloo @ Apr 1 2016, 00:34) Нужно... Apr 1 2016, 08:11  lleeloo Цитата(scifi @ Apr 1 2016, 11:11) У меня ... Apr 1 2016, 20:06   scifi Цитата(lleeloo @ Apr 1 2016, 23:06) Ляпае... Apr 1 2016, 20:19    lleeloo Цитата(scifi @ Apr 1 2016, 23:19) Я не де... Apr 1 2016, 20:28     scifi Цитата(lleeloo @ Apr 1 2016, 23:28) В так... Apr 1 2016, 20:33      lleeloo Цитата(scifi @ Apr 1 2016, 23:33) Это обо... Apr 1 2016, 20:55       SasaVitebsk Цитата(lleeloo @ Apr 1 2016, 23:55) Да, л... Apr 4 2016, 09:28 mantech Цитата(lleeloo @ Apr 1 2016, 00:34) Нужно... Apr 2 2016, 14:12 Rash смотрели, не всё гладко, но полностью написать сво... Apr 1 2016, 06:52 Огурцов лучше бы веб-браузер под stm кто написал Apr 2 2016, 15:25 Rash Цитата(mantech @ Apr 2 2016, 18:12) Напри... Apr 2 2016, 18:36 mantech Цитата(Rash @ Apr 2 2016, 21:36) ИМХО, Em... Apr 5 2016, 08:12 Rash при удалении окна память высвобождается, но вот ка... Apr 4 2016, 13:53 SasaVitebsk Цитата(Rash @ Apr 4 2016, 16:53) Про рабо... Apr 5 2016, 05:58 Rash Про ускоритель понятно, но это драйвер и на какой ... Apr 5 2016, 07:58 SasaVitebsk Цитата(Rash @ Apr 5 2016, 10:58) Про уско... Apr 5 2016, 08:49  mantech Цитата(SasaVitebsk @ Apr 5 2016, 11:49) Д... Apr 5 2016, 11:39 Rash Цитата(SasaVitebsk @ Apr 5 2016, 12:49) С... Apr 5 2016, 10:44 mantech Цитата(Rash @ Apr 5 2016, 13:44) А если з... Apr 5 2016, 13:01 Rash ну тут каждому своё, мне он подходит как раз из-за... Apr 5 2016, 12:43 Rash есть ещё виджеты для которых это необходимо как: г... Apr 5 2016, 13:52 картошка Делал на 429 . Запускал режим LUT8, дисплей 800x60... Apr 7 2016, 15:20 Шаманъ Цитата(картошка @ Apr 7 2016, 18:20) Дела... Apr 7 2016, 17:27  SpyBot Цитата(Шаманъ @ Apr 7 2016, 20:27) 40*2^2... Apr 11 2016, 16:47   niXto Цитата(SpyBot @ Apr 11 2016, 19:47) Какие... Apr 11 2016, 17:27 Шаманъ Цитата(SpyBot @ Apr 11 2016, 19:47) Какие... Apr 11 2016, 18:32 SpyBot Цитата(Шаманъ @ Apr 11 2016, 21:32) Очень... Apr 11 2016, 20:53  aaarrr Цитата(SpyBot @ Apr 11 2016, 23:53) Еще о... Apr 11 2016, 21:04   SpyBot Цитата(aaarrr @ Apr 12 2016, 00:04) А у и... Apr 11 2016, 21:29  SasaVitebsk Цитата(SpyBot @ Apr 11 2016, 23:53) Подсв... Apr 12 2016, 06:29   SpyBot Цитата(SasaVitebsk @ Apr 12 2016, 09:29) ... Apr 14 2016, 00:43    AVI-crak Вся разница в 16 и 32 бита шины sdram на st чипе -... Apr 14 2016, 08:46     Шаманъ Цитата(AVI-crak @ Apr 14 2016, 11:46... Apr 14 2016, 08:56      AVI-crak Цитата(Шаманъ @ Apr 14 2016, 15:56) По се... Apr 14 2016, 16:50       mantech Цитата(AVI-crak @ Apr 14 2016, 19:50... Apr 14 2016, 18:02        AVI-crak Цитата(mantech @ Apr 15 2016, 01:02) Вы к... Apr 14 2016, 18:48     SpyBot Цитата(AVI-crak @ Apr 14 2016, 11:46... Apr 14 2016, 10:43 Шаманъ Цитата(SpyBot @ Apr 11 2016, 23:53) У мен... Apr 12 2016, 06:31 SasaVitebsk Спасибо.
Но вроде как для светодиодов глубоко по б... Apr 12 2016, 07:40 aaarrr Цитата(SasaVitebsk @ Apr 12 2016, 10:40) ... Apr 12 2016, 07:57 Огурцов какой интерес считывать из внешнего озу в мк, чтоб... Apr 14 2016, 20:52 Шаманъ Цитата(Огурцов @ Apr 14 2016, 23:52) како... Apr 15 2016, 07:53  SpyBot Цитата(Шаманъ @ Apr 15 2016, 10:53) Кто б... Apr 15 2016, 21:43 mantech Цитата(Огурцов @ Apr 14 2016, 23:52) како... Apr 15 2016, 08:31 Огурцов не надо плиску, с плиской может и стм не потребова... Apr 15 2016, 18:00 Огурцов а сколько надо ? внутренней уже вполне хватает на ... Apr 16 2016, 07:14 SpyBot Нет, ну внутренней... Внутренней хватает всего на ... Apr 16 2016, 12:12 Огурцов на 720*575 хватает Apr 16 2016, 14:47 Шаманъ Цитата(Огурцов @ Apr 16 2016, 10:14) а ск... Apr 16 2016, 18:09 Огурцов семисотые посмотрите
более 800*600 на встраиваемых... Apr 16 2016, 19:02 Шаманъ Цитата(Огурцов @ Apr 16 2016, 22:02) семи... Apr 17 2016, 04:38 AVI-crak Кстати, у чипов st их ускоритель имеет всего две п... Apr 17 2016, 07:06 Шаманъ Цитата(AVI-crak @ Apr 17 2016, 10:06... Apr 17 2016, 07:41 Огурцов Цитата(Шаманъ @ Apr 17 2016, 04:38) двойн... Apr 17 2016, 08:33 Шаманъ Цитата(Огурцов @ Apr 17 2016, 11:33) ну п... Apr 17 2016, 17:26 Огурцов у меня разные идеи - а вы выбираете Apr 17 2016, 18:13 Шаманъ Цитата(Огурцов @ Apr 17 2016, 21:13) у ме... Apr 18 2016, 06:23 adrvyho Добрый день, дорогие форумчане.
Тоже решил идти в ... Aug 22 2016, 14:39 Шаманъ Цитата(adrvyho @ Aug 22 2016, 17:39) Подк... Aug 22 2016, 15:42 adrvyho В видеобуфере, так подозреваю, моя проблема и крое... Aug 22 2016, 16:05 Шаманъ Цитата(adrvyho @ Aug 22 2016, 19:05) Я та... Aug 22 2016, 18:11 Rash без SDRAM или SRAM нужного размера под видео буфер... Aug 22 2016, 19:40 adrvyho Цитатабез SDRAM или SRAM нужного размера под видео... Aug 22 2016, 20:51 SasaVitebsk Цитата(adrvyho @ Aug 22 2016, 23:51) Необ... Aug 23 2016, 06:54 Rash под ваш LCD нужен видео буфер 800*480*2 иначе прос... Aug 23 2016, 05:41 SasaVitebsk В доке на МК имеется достаточно детальное описание... Aug 25 2016, 08:34
2 страниц
1 2 >
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|