Перейти к содержанию
    

Нет, ну внутренней... Внутренней хватает всего на 320х240. А хочется Размаха! :) 1024х768 и несколько буферов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а сколько надо ? внутренней уже вполне хватает на кое-что

Мне нужно 1.5МБ на фреймбуффер минимум. Если поиграться с прозрачностью, то еще столько же :)

 

на 720*575 хватает

Это в каком STM есть 400кБ памяти? Да и то при восьмибитном цвете и если в памяти больше ничего кроме видеобуфера нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

семисотые посмотрите

более 800*600 на встраиваемых, зачем ?

на писюках как-то вполне 640*480*4 перебивались, а 800*600*8 появились - вообще праздник, так что не жадничайте

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

семисотые посмотрите

Те, что реально доступны имеют 320кБ на борту.

 

более 800*600 на встраиваемых, зачем ?

Нет, не более, а 800х480х16бит + двойная буферизация. А если еще в два слоя то 3МБ и набегает, правда последнее в общем-то не самая нужная вещь, но кое-что в интерфейсе позволяет сделать красиво без лишних усилий.

 

на писюках как-то вполне 640*480*4 перебивались, а 800*600*8 появились - вообще праздник, так что не жадничайте

Во-первых у меня задача требует минимум 8битного цвета, но лучше выглядит в 16битном. Некоторую информацию удобно/необходимо отображать в виде двух координат X-Y, а третья координата это цвет (думаю я не уникален в этом).

Во-вторых эффективно использовать DMA2D можно только с 16битным фреймбуффером.

Изменено пользователем Шаманъ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати, у чипов st их ускоритель имеет всего две полезные функции: заливка цветом и копирование памяти с прозрачностью. Именно для последней функции требуется огромное количество памяти, иначе теряется смысл dma2d.

Тут встроенной памятью не обойтись.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати, у чипов st их ускоритель имеет всего две полезные функции: заливка цветом и копирование памяти с прозрачностью.

Та не, больше функций - есть еще копирование с преобразованием цвета. Оно позволяет выводить шрифты и хранить картинки в сжатом (в смысле индексированный цвет) виде. Я прикидывал - все, что мне нужно могу делать через DMA2D. Если бы оно еще умело разворачивать монохромные битмапы было бы просто супер, а с другой стороны потратить на шрифты в четыре раза больше флэша не есть глобальная проблема.

Изменено пользователем Шаманъ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

двойная буферизация

ну поставьте два процыка

или подождите пару лет, до какой-нибудь 9xx

Изменено пользователем Огурцов

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну поставьте два процыка

или подождите пару лет, до какой-нибудь 9xx

Зачем? Два процессора для двойной буферизации вывода графики :maniac: У Вас какие-то нездоровые идеи, то от LTDC отказаться, то от SDRAM... Если полосы SDRAM хватает, то пусть себе стоИт - стОит копейки, памяти много...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день, дорогие форумчане.

Тоже решил идти в ногу со временем и пересесть с AVR на STM32.

Подключил сенсорный дисплей 800х480 по интерфейсу RGB24 к STM32F429IIT.

Но от того, что поспешил и не предусмотрел в своей схеме SDRAM, теперь мучаюсь.

Настроил тайминги, залил задний фон, активировал слой и окно на нём, но никак не выходит корректно залить область внутри окна.

Получается примерно следующее:

 

DSC_0072.jpg

 

Заливать пробую через DMA2D Register to memory.

Краями, конечно, понимаю, что что-то неверно с адресом заливаемой области, но от неграмотности не могу совладать с DMA2D

Прошу помощи у тех, кто может совладать с DMA2D без SDRAM

Вот кусок кода для заливки

 

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) {}
}
uint32_t aBufferResult[5000];

int main (void)
    

{
          SystemInit();
      HAL_Init();
          SystemClock_Config();
      DMA2D_Config();
      Screen_Init();
          _DMA_Fill(aBufferResult+10, 50, 1, 0, 0x1F0A);
          _DMA_Fill(aBufferResult+150, 30, 2, 0, 0x1C01); 
      _DMA_Fill(aBufferResult+300, 5, 20, 0, 0xF0F0);
          while(1) {}
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подключил сенсорный дисплей 800х480 по интерфейсу RGB24 к STM32F429IIT.

Но от того, что поспешил и не предусмотрел в своей схеме SDRAM, теперь мучаюсь.

Так а видеобуфер где поместился?

 

Заливать пробую через DMA2D Register to memory.

Я бы вначале убедился, что без DMA2D все работает правильно, а потом уже подключал DMA2D.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В видеобуфере, так подозреваю, моя проблема и кроется, только от того, что я самоучка и много не знаю, пока не могу понять, где именно.

Я так понял, что адрес буфера, при отсутствии внешней ОЗУ - адрес массива aBufferResult, но это только мои мутные догадки.

Без DMA2D я менял цвет заднего фона, поигрался со слоями, залил на слое 1 окно нужного размера - предположил, что экран рабочий и подключен правильно :biggrin:

Активировал DMA2D (проверил в отладчике регистры), нашёл удобоваримый пример для режима Register-To_memory, пытаюсь вывести три разных прямоугольника, а получается то, что видим на фотографии ((

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я так понял, что адрес буфера, при отсутствии внешней ОЗУ - адрес массива aBufferResult, но это только мои мутные догадки.

Ищите где производится инициализация LTDC и смотрите где находится видеобуфер - для меня из Вашего куска кода совсем не очевидно, что aBufferResult это видеобуфер (его размер как бы должен быть побольше раз в двадцать как минимум), короче "Use the source luke" ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...