Урок 69
Часть 1
HAL. LTDC. DMA2D
Продолжаем изучать интерфейс LTDC. Сегодня мы попробуем восполmзоваться графическим ускорителем Chrom-Art, встроенным в контроллер. Данный ускоритель также называют периферией DMA2D, так как основой его является технология DMA.
В принципе, мы уже им пользовались и не раз, сами того не подозревая, когда подключали библиотеку BSP и вызывали её функции. А теперь нам пора бы поработать с данной периферией самостоятельно. Причём для этого мы не будем даже писать отдельную библиотеку, а будем использовать функционал ускорителя в наших библиотеках.
Ускоритель DMA2D может выполнять следующие операции:
заливка исходного изображения (или его части) заданным цветом;
копирование исходного изображения (или его части) в заданную область конечного изображения;
копирование исходного изображения (или его части) в заданную область конечного изображения с дополнительным преобразованием формата цвета пикселей;
смешивание изображений (или их частей) с одинаковыми или различными форматами цветов пикселей и помещение в заданную область конечного изображения с дополнительным преобразованием формата цвета пикселей.
Чтобы воспользоваться той или иной операцией, нам необходимо настроить ускоритель соответствующим образом. Причём если мы внесём данные настройки в Cube MX, мы воспользуемся только одним режимом, поэтому мы научимся менять настройки периферии непосредственно в иходном коде.
Если нам будет что-то непонятно по ускорителю в процессе написания кода, с этим, я думаю, мы будем разбираться в момент написания, чтобы к этому времени ничего не забыть.
Поэтому пока поработаем над проектом. Проект мы создадим из проекта урока 67 по выводу рисунков LTDC_BMP и назовём его соответственно LTDC_DMA2D.
Запустим проект в Cube MX и включим периферию DMA2D
Зайдём в закладку «Configuration» и настроим DMA2D следующим образом
То есть мы по умолчанию включим смешивание областей памяти, а там посмотрим, какой нам будет режим нужен, такой и сделаем. Вообще мы будем использовать целых три режима в одном проекте. Вот как!
Включим прерывания
Вроде больше пока настроек никаких не надо. Сгенерируем проект, откроем его в 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 Следующая часть
Отладочную плату можно приобрести здесь STM32F746G-DISCOVERY
Смотреть ВИДЕОУРОК в RuTube (нажмите на картинку)
Смотреть ВИДЕОУРОК в YouTube (нажмите на картинку)
Добавить комментарий