Jump to content

    

32F769IDISCOVERY + MIPI DSI 720p (1280x720)?

просто топик про stm, а к stm гораздо проще добавить внешний контроллер lcd или контроллер с линуксом, нежели переползать на очередной недокамень

нет инета - тогда sd-карта

 

Share this post


Link to post
Share on other sites
просто топик про stm, а к stm гораздо проще добавить внешний контроллер lcd или контроллер с линуксом, нежели переползать на очередной недокамень

нет инета - тогда sd-карта

какой то оксюморон сами говорите, что тема о STM32, и сами же предлагаете другие контроллеры

Share this post


Link to post
Share on other sites
какой то оксюморон сами говорите, что тема о STM32, и сами же предлагаете другие контроллеры

не знаю, что у вас за юморон, но я предлагаю, как не уходить на другие мк, но расширить возможности stm

я например хочу 1080p, как это сделать на stm без дополнительного расширения ? и вообще, странно, что такого ещё никто не сделал

 

Share this post


Link to post
Share on other sites
не знаю, что у вас за юморон, но я предлагаю, как не уходить на другие мк, но расширить возможности stm

я например хочу 1080p, как это сделать на stm без дополнительного расширения ? и вообще, странно, что такого ещё никто не сделал

оксюморон - сочетание противоречащих друг другу понятий

подробнее в вики...

а насчет 1080 читаем первоисточники

http://www.st.com/content/ccc/resource/tec....DM00287603.pdf

стр. 39

а "не сделал" - значит нет потребности

и кроме того, попробуйте найти дисплей 1080 с RGB интерфейсом

 

Share this post


Link to post
Share on other sites
и кроме того, попробуйте найти дисплей 1080 с RGB интерфейсом

Там есть MIPI DSI интерфейс. К нему уже найти дисплей без особых проблем.

 

Ни кто не баловался с DMA2D. Не получается залить картинку цветом с прозрачностью в режиме RGB565. Пытаюсь сделать эффект затемнения за диалоговым окном на одном слое.

С двумя слоями работает без проблем при разрешении 1024x768.

Но мне нужно в разрешении 1280х800, а там тянет только 1 слой.

Share this post


Link to post
Share on other sites
оксюморон - сочетание противоречащих друг другу понятий

вы не поняли один юморон, и я не удивлён, что вы не поняли и другой

 

а насчет 1080 читаем первоисточники

что именно в первоисточнике ? 30 кадров 8 бит ?

 

а "не сделал" - значит нет потребности

действительно, кому такая порнуха нужна

мой коллега сделал примерно такое, хоть скорее и не по его вине, но тоже, через одно место

поэтому реального практического смысла у него тоже не получилось

 

и кроме того, попробуйте найти дисплей 1080 с RGB интерфейсом

в том вам и вопрос, а зачем ?

 

Share this post


Link to post
Share on other sites
я например хочу 1080p, как это сделать на stm без дополнительного расширения ? и вообще, странно, что такого ещё никто не сделал

 

В таблице ясно написано, что такое разрешение только на 1 слое и в 16битах, при 32х битной сдрам, что тут может быть непонятного, если достаточно таких параметров - должно работать...

 

Почему не делают, по себе скажу, что кроме собственно отрисовки картинки с таким разрешением, ее еще нужно как-то подготовить, а в случае анимированных - еще и обеспечить скорость распаковки-обновления, а с этим такие МК не справляются однозначно..

Share this post


Link to post
Share on other sites
В таблице ясно написано, что такое разрешение только на 1 слое и в 16битах, при 32х битной сдрам, что тут может быть непонятного, если достаточно таких параметров - должно работать...

 

Почему не делают, по себе скажу, что кроме собственно отрисовки картинки с таким разрешением, ее еще нужно как-то подготовить, а в случае анимированных - еще и обеспечить скорость распаковки-обновления, а с этим такие МК не справляются однозначно..

недостаточно, нужно 24 бита, или 32 - для удобства

вот пусть stm (да хоть avr) и занимается подготовкой и распаковкой

и что совсем прекрасно - в асинхронном режиме

а отрисовкой пусть занимается внешний, по отношению к stm, контроллер lcd - не понятно, что тут непонятно

 

Share this post


Link to post
Share on other sites
Ни кто не баловался с DMA2D. Не получается залить картинку цветом с прозрачностью в режиме RGB565. Пытаюсь сделать эффект затемнения за диалоговым окном на одном слое.

В чем именно проблема, напишите подробнее? У меня такой вариант работает без проблем. Да и почти вся графика работает через DMA2D.

Share this post


Link to post
Share on other sites
В чем именно проблема, напишите подробнее? У меня такой вариант работает без проблем. Да и почти вся графика работает через DMA2D.

Скажите, в своём проекте Вы RGB565 режим используете?

 

Пытался делать заливку цветом в формате ARGB8888, как оказалось для режима RGB565 он выкидывает alpha канал в функции DMA2D_SetConfig.

Понял что не так делал.

Сейчас пытаюсь разобраться как это сделать правильно.

Share this post


Link to post
Share on other sites
Да и почти вся графика работает через DMA2D

а dma2d может работать со статической памятью и с отключенным ltdc ?

 

Share this post


Link to post
Share on other sites
Скажите, в своём проекте Вы RGB565 режим используете?

Я разные режимы использую, но фреймбуфер в RGB565.

 

Пытался делать заливку цветом в формате ARGB8888, как оказалось для режима RGB565 он выкидывает alpha канал в функции DMA2D_SetConfig.

Что такое SetConfig я не знаю - STMовскими либами не пользуюсь.

 

Чтобы сделать то, что Вы хотите Вам нужно сконфигурировать DMA2D для полной обработки (режим Memory-to-memory with blending, см. описание регистра DMA2D->CR). Далее в качестве переднего плана указать формат цвета А8, с заменой альфа канала на указанное Вами значение, установить регистр DMA2D->FGCOLR в требуемый цвет, в качестве заднего плана нужно использовать тот же кусок фреймбуфера куда будете рисовать.

 

Тогда у Вас будет прочитано исходное изображение произведен блендинг с указанным Вами цветом переднего плана и прозрачностью, и результат записан обратно. В Reference Manual DMA2D блок достаточно хорошо описан - там нет ничего сложного.

 

Надеюсь Вы поняли меня :)

 

 

а dma2d может работать со статической памятью и с отключенным ltdc ?

Да, это независимый блок. Может и с внутренней и со статической, читать из флеша может и т.д.

Share this post


Link to post
Share on other sites
Надеюсь Вы поняли меня :)

Спасибо за развернутый ответ. Честно говоря уже и не рассчитывал. :)

Share this post


Link to post
Share on other sites
Чтобы сделать то, что Вы хотите Вам нужно сконфигурировать DMA2D для полной обработки (режим Memory-to-memory with blending, см. описание регистра DMA2D->CR). Далее в качестве переднего плана указать формат цвета А8, с заменой альфа канала на указанное Вами значение, установить регистр DMA2D->FGCOLR в требуемый цвет, в качестве заднего плана нужно использовать тот же кусок фреймбуфера куда будете рисовать.

 

Тогда у Вас будет прочитано исходное изображение произведен блендинг с указанным Вами цветом переднего плана и прозрачностью, и результат записан обратно. В Reference Manual DMA2D блок достаточно хорошо описан - там нет ничего сложного.

Сделал как вы рекомендовали, все завилось с пол пинка. Попутно избавился от СТМовских библиотек в LTDC и DMA2D, лишнего там ... .

Ещё раз благодарю "Шаманъ" за помощь . Неизвестно сколько мне одному пришлось разбираться. По началу банально не был уверен в позитивном результате.

На будущие, может кому пригодится, примерный набросок рабочей функции заливки области цветом с прозрачностью.

//=============== Заполнить буфер цветом с коэффициентом  прозрачности ========
void LCD_DRV_LL_FillBufferAlphaColor(uint32_t BufferAddr, uint32_t xSize, uint32_t ySize, uint32_t OffLine, uint32_t  OutputColorMode, uint32_t ColorRGB888, uint8_t Alpha)
{
 // Копирование с замешиванием 
 MODIFY_REG(DMA2D->CR, DMA2D_CR_MODE, DMA2D_M2M_BLEND);

 //Конфигурация переднего плана
 DMA2D->FGPFCCR  = (DMA2D_FGPFCCR_CM & DMA2D_INPUT_A8)// Формат цвета
     |(DMA2D_FGPFCCR_AM & (1 << DMA2D_FGPFCCR_AM_Pos))//Замена альфа канала
     |(DMA2D_FGPFCCR_ALPHA & (Alpha << DMA2D_FGPFCCR_ALPHA_Pos));//Алфа канал

 DMA2D->FGCOLR = ColorRGB888;
 DMA2D->FGMAR = BufferAddr;
 DMA2D->FGOR = OffLine;

 //Конфигурация заднего плана
 DMA2D->BGPFCCR  = DMA2D_BGPFCCR_CM & OutputColorMode;// Формат цвета

 DMA2D->BGMAR = BufferAddr;
 DMA2D->BGOR = OffLine; 


 //Выходной буфер    
 // Формат цвета 
 DMA2D->OPFCCR = DMA2D_OPFCCR_CM & OutputColorMode;


 DMA2D->OMAR = BufferAddr;//адрес буфера для заполнения
 DMA2D->OOR = OffLine; // установка смещения (xSize + OffLine = LayerXSize) 

 // установка количества пикселей на линию и количество линий 
 DMA2D->NLR = (DMA2D_NLR_NL|DMA2D_NLR_PL) & (ySize| (xSize << DMA2D_NLR_PL_Pos)); 

 //Запуск
 DMA2D->CR |= DMA2D_CR_START;

 if((DMA2D->CR & DMA2D_CR_START) != RESET)
 {
   uint32_t tickstart = HAL_GetTick();
   __IO uint32_t DMA2D_ISR;
   uint32_t ErrorCode;
   //Ожидаем конца выполнения рисования
   while(((DMA2D_ISR = DMA2D->ISR) & DMA2D_FLAG_TC) == RESET)
   {
     if ((DMA2D_ISR & (DMA2D_FLAG_CE|DMA2D_FLAG_TE)) != RESET)
     {//Ошибка 
       if ((DMA2D_ISR & DMA2D_FLAG_CE) != RESET)
       {
         ErrorCode |= HAL_DMA2D_ERROR_CE;        
       }
       if ((DMA2D_ISR & DMA2D_FLAG_TE) != RESET)        
       {
         ErrorCode |= HAL_DMA2D_ERROR_TE;        
       }

       DMA2D->IFCR = DMA2D_FLAG_TC | DMA2D_FLAG_CTC;        
       return;//произошла ошибка
     }
     if((HAL_GetTick() - tickstart ) > DMA2D_TIMEOUT)
     {//Вышло время ожидания
       DMA2D->CR |= DMA2D_CR_ABORT;//
       DMA2D->IFCR = DMA2D_FLAG_TC | DMA2D_FLAG_CTC;        
       return;
     }
   }
 }
 DMA2D->IFCR = DMA2D_FLAG_TC|DMA2D_FLAG_CTC;
}

Share this post


Link to post
Share on other sites

ещё вопрос: есть мысли как подключить к stm второй дисплей ? с разными картинками, конечно

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this