推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

通过DMA将内存图像旋转90度

资料介绍

1. 问题背景 

    客户的 UI 应用使用了横屏,但在某个场景中需要使用竖屏显示,因此客户想通过逆时 针 90 度旋转图形,即将 framebuffer 部分内容进行旋转后显示。目前客户使用软件来进 行旋转,但效率较低,希望借助 DMA 来完成旋转操作。 

2. 解决办法 

    客户使用了 RGB565 格式,在 STM32H750 芯片上,用软件方式,已经通过两层循环 实现图像的旋转:


    原始像素数据在内存上是连续的,经过旋转后,原始像素数据在目的内存的位置已经 全部不连续,因此即使使用 DMA 搬运数据,也只能每次传输少量数据,无法有效利用 DMA burst 传输提升效率,但能释放 CPU 算力,让 CPU 处理其它事务。

2.1. 使用 STM32H7 MDMA 

    STM32H7 芯片的 MDMA 支持 LinkedList 模式,可以配置每个 List Node 传输图像 一行数据,将像素数据传输到目的地址,同时转存为一列数据。比如将源数据第一行,转 存为目的数据第一列。

    以下是 MDMA LinkedList 模式旋转图像的代码,图像像素宽度、高度分别为 WW,  HH,使用 HH 个 List Node 可完成图像旋转。如果图像较大,就会使用更多节点,会占 用较多内存。

    以 Figure 1 为例,将源数据第一行转存为目的数据第一列。源数据从 4 开 始,每传输 2 字节后,源地址递减 2;目的地址传输后不递减,但每 block 传输完成后, 目的地址偏移 HH*2 字节。将 block 长度设置为 2 字节,BlockCount 数设置为 WW,即 能保证整行数据的正确传输。

部分文件列表

文件名 大小
LAT1416_通过DMA将内存图像旋转90度_v1.0.pdf 291K

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单
  • 21下载积分 打赏60.00元   3天前

    用户:他山之石可攻玉

  • 21下载积分 打赏310.00元   3天前

    用户:小猫做电路

  • 21下载积分 打赏210.00元   3天前

    用户:zhengdai

  • 21下载积分 打赏210.00元   3天前

    用户:w993263495

  • 21下载积分 打赏10.00元   3天前

    用户:烟雨

  • 21下载积分 打赏60.00元   3天前

    用户:gsy幸运

  • 21下载积分 打赏70.00元   3天前

    用户:铁蛋锅

  • 21下载积分 打赏65.00元   3天前

    用户:xzxbybd

  • 21下载积分 打赏60.00元   3天前

    用户:jh0355

  • 21下载积分 打赏60.00元   3天前

    用户:w178191520

  • 21下载积分 打赏20.00元   3天前

    用户:jh03551

  • 21下载积分 打赏20.00元   3天前

    用户:sun2152

  • 21下载积分 打赏20.00元   3天前

    用户:kk1957135547

  • 21下载积分 打赏25.00元   3天前

    用户:w1966891335

  • 21下载积分 打赏20.00元   3天前

    用户:xuzhen1

  • 21下载积分 打赏15.00元   3天前

    用户:x15580286248

  • 21下载积分 打赏25.00元   3天前

    用户:pcb

  • 21下载积分 打赏20.00元   3天前

    用户:bhacker

  • 21下载积分 打赏15.00元   3天前

    用户:liqiang9090

推荐下载