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

DMA2D - копирование прямоугольной области

Друзья, контроллер STM32F7, рисуется у меня картинка - сначала фон на весь экран, потом мелкий фрагмент. Хочу предварительно сохранить фон где-нибудь за пределами графической области,  а потом вставлять оттуда при случае.

Для того, чтобы понять принцип DMA2D копирования в режиме Memory-to-Memory, написала простенький код. который сначала делит экран на 4 области и раскрашивает каждую разными цветами, затем копирует одну область экрана в другую. Все это в цикле, переменные на лету меняю в отдладчике, дабы не перепрошивать каждый раз

 

uint32_t offset=0x00000000;
	uint32_t source_addr=0xD0000000;
	uint32_t dest_addr=0xD00F0000;
	uint16_t width=500;
	uint16_t height=450;

while(1)
	{	
		
		
	TFT_FillRectangle(0,0,511,299,0xFF0000); // левый верхний - в красный цвет
	TFT_FillRectangle(512,0,1024,299,0x00FF00); //правый верхний - в зеленый
	TFT_FillRectangle(0,300,511,600,0x0000FF); //левый нижний - в синий
	TFT_FillRectangle(512,300,1024,600,0xFFFF00); //правый нижний - в желтый
		HAL_Delay(500);	// Смотрим
		hdma2d.Init.Mode = DMA2D_M2M;
	hdma2d.Init.ColorMode = DMA2D_OUTPUT_RGB888;
	hdma2d.Init.OutputOffset =offset;
	if(HAL_DMA2D_Init(&hdma2d) == HAL_OK)// Настраиваем
	{
		if(HAL_DMA2D_Start(&hdma2d, source_addr, dest_addr,	width, height) == HAL_OK)  // копируем
		{
			HAL_DMA2D_PollForTransfer(&hdma2d, 10);
		}
	}
	HAL_Delay(500);
}

С указанными начальными данными  полоса из верхней области экрана, шириной во весь экран, копируется куда-то вниз.  Параметры source_addr, dest_addr, width, height мне интуитивно понятны. Но так и не получилось скопировать ограниченную прямоугольную область.

Подскажите, как этой функцией скопировать прямоугольник размерами 100х100 из координат 50,50 в координаты 400,400 ?

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

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


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

https://github.com/ua1arn/hftrx/blob/567e22fa03f3a080c959507b499723a4aee1c994/src/display/framebuf.c#L1213

 

Для каждой из обоастей надо указать, сколько осталось до 1024 полной ширины экрана

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

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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