STM Урок 69. HAL. LTDC. DMA2D. Часть 1

 

 

 

 

Урок 69

 

Часть 1

 

HAL. LTDC. DMA2D

 

 

Продолжаем изучать интерфейс LTDC. Сегодня мы попробуем восползоваться графическим ускорителем Chrom-Art, встроенным в контроллер. Данный ускоритель также называют периферией DMA2D, так как основой его является технология DMA.

В принципе, мы уже им пользовались и не раз, сами того не подозревая, когда подключали библиотеку BSP и вызывали её функции. А теперь нам пора бы поработать с данной периферией самостоятельно. Причём для этого мы не будем даже писать отдельную библиотеку, а будем использовать функционал ускорителя в наших библиотеках.

Ускоритель DMA2D может выполнять следующие операции:

заливка исходного изображения (или его части) заданным цветом;

копирование исходного изображения (или его части) в заданную область конечного изображения;

копирование исходного изображения (или его части) в заданную область конечного изображения с дополнительным преобразованием формата цвета пикселей;

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

Чтобы воспользоваться той или иной операцией, нам необходимо настроить ускоритель соответствующим образом. Причём если мы внесём данные настройки в Cube MX, мы воспользуемся только одним режимом, поэтому мы научимся менять настройки периферии непосредственно в иходном коде.

Если нам будет что-то непонятно по ускорителю в процессе написания кода, с этим, я думаю, мы будем разбираться в момент написания, чтобы к этому времени ничего не забыть.

Поэтому пока поработаем над проектом. Проект мы создадим из проекта урока 67 по выводу рисунков LTDC_BMP и назовём его соответственно LTDC_DMA2D.

Запустим проект в Cube MX и включим периферию DMA2D

 

image00

 

Зайдём в закладку "Configuration" и настроим DMA2D следующим образом

 

image01

 

То есть мы по умолчанию включим смешивание областей памяти, а там посмотрим, какой нам будет режим нужен, такой и сделаем. Вообще мы будем использовать целых три режима в одном проекте. Вот как!

 

 

Включим прерывания

 

image13

 

Вроде больше пока настроек никаких не надо. Сгенерируем проект, откроем его в Keil, настроим программатор на авторезет, подключим к проекту файлы ltdc.c и MT48LC4M32B2.c и попробуем собрать проект.

Для работы с видеоускорителем нам потребуются ещё две области данных в памяти SDRAM, с которыми мы затем и будем работать. Добавим на них глобальные указатели в файле main.c

 

uint8_t* bmp1;

uint8_t* dma2d_in1;

uint8_t* dma2d_in2;

 

Также проинициализируем их в main(), задав адреса, которые я посчитал заранее

 

bmp1 = (uint8_t *) 0xC00FF000;

//Для файла bmp выделим на всякий случай место как под 32-битный,

//так как хоть рисунок максимум 24-битный, но в файле также

//присутствует служебная информация

dma2d_in1 = (uint8_t *)0xC017E800;

dma2d_in2 = (uint8_t *)0xC01FE000;

/* USER CODE END 1 */

 

В бесконечном цикле пока всё закомментируем, скорее всего потом это пригодится.

Идём в файл ltdc.c и добавим там указатель на наш видеоускоритель

 

extern LTDC_HandleTypeDef hltdc;

extern DMA2D_HandleTypeDef hdma2d;

 

В следующей части нашего занятия мы перепишем код некоторых наших функций по выводу различной информации на дисплей с использованием функционала видеоускорителя DMA2D и проверим это в тестах.

 

Предыдущий урок Программирование МК STM32 Следующая часть

 

 

Отладочную плату можно приобрести здесь 32F746G-DISCOVERY

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

STM HAL. LTDC. DMA2D

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*