Jump to content

    
Sign in to follow this  
Sanya_kv

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

Recommended Posts

просто топик про 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
Скажите, в своём проекте Вы 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
Чтобы сделать то, что Вы хотите Вам нужно сконфигурировать 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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this