这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 活动中心 » 板卡试用 » 【换取逻辑分析仪】RGB屏幕移植ARM-2D库

共4条 1/1 1 跳转至

【换取逻辑分析仪】RGB屏幕移植ARM-2D库

助工
2025-03-18 22:57:56   被打赏 35 分(兑奖)     打赏

1、简介

    ARM-2D 是 Arm 公司推出的一款专为嵌入式系统优化的 2D 图形加速库,旨在提高微控制器(MCU)和嵌入式处理器的 2D 图形处理性能。它提供了一套轻量级、高效的 API,可用于 UI 渲染、图像操作和动画加速,特别适用于资源受限的嵌入式设备,如智能手表、工业显示屏和车载仪表盘等。

ARM-2D 主要特点

            可见,ARM-2D基本支持在所有的Cortex-M处理器上运行,即便是最入门级的M0处理器。ARM-2D是图形加速渲染库,不是一个专门用于GUI设计的,但它仍然提供有基本的GUI设计选项(对用户是真爱啊,点赞o( ̄▽ ̄))。它的巨大作用在于将能够统一LCD屏幕的驱动接口,为不同类型的处理器之间移植GUI应用提供便捷。同时提供软硬件渲染加速,在没有图形硬件加速外设的情况下,依旧能够提供优异的软件加速效果。

    2、ARM-2D移植

    以开发板STM32H7S78-DK为例,IDE工具为MDK Keil,介绍ARM-2D的移植过程。

    STM32H7S78-DK板载的屏幕接口为RGB并口,内部不含GRAM,因此需要使用到外部RAM。这篇文章介绍了这款屏幕的驱动过程,完成LTDC驱动后,就能够直接向屏幕写入图像数据了

    【STM32H7S78-DK评测】LTDC+DMA2D驱动RGBLCD屏幕-电子产品世界论坛

    e45ce793dd8ca0d8bf347dd9cc48f164.jpg

    将LTDC驱动色彩模式为RGB565

    41R[)MO1E3A0}H63[~N34QO.png

    定义显存地址,屏幕尺寸为800*480

    image.png

    #define GLCD_WIDTH     800
    #define GLCD_HEIGHT    480
    
    #define LCD_DB_ADDR   0x90000000
    #define LCD_DB_PTR    ((volatile uint16_t *)LCD_DB_ADDR)

    打开Keil的RTE配置窗口,勾选以下的ARM-2D库相关选项

    8N([%K6UZ9Q2VIXXMKEA](N.png

    如果提示缺少其他组件,则勾选左下角的Resolve,自动完成缺少组件的勾选

    image.png

    展开Acceleration,滑动至底部找到以下两个配置文件

    $W}4BVZ7W[}~[7X5X]1R)0Q.png

    arm_2d_cfg.h文件参数设置,支持由代码编辑转为面板编辑模式

    (9G%IUX~88K`X13(BAMNAUW.png

    arm_2d屏幕适配器文件设置,如果仅做简单移植只需关注方框内的参数设置即可,屏幕宽度、高度设置,PFB是屏幕缓存块大小设置,缓存块越大意味着屏幕刷新率会有所提升,但RAM占有量会提高,如果编译提示内存不足可以尝试减小PFB大小。

    RJS@2)GZMWNR@TV~B8YPZVA.png

    main.c文件添加头文件

    /* Private includes ----------------------------------------------------------*/
    /* USER CODE BEGIN Includes */
    #include "string.h"
    #include "arm_2d_helper.h"
    /* USER CODE END Includes */

    此时编译工程,会报错缺少Disp0_DrawBitmap函数的定义,这个函数声明来自arm-2d库,需要用户手动实现它的定义

    %76E0)1B]V4(8%$587KRQ58.png

    int32_t Disp0_DrawBitmap (uint32_t x, 
                             uint32_t y, 
                             uint32_t width, 
                             uint32_t height, 
                             const uint8_t *bitmap) 
    {
        volatile uint16_t *phwDes = LCD_DB_PTR + y * GLCD_WIDTH + x;//RGB屏幕显存基地址+坐标偏移
        const uint16_t *phwSrc = (const uint16_t *)bitmap;
        for (int_fast16_t i = 0; i < height; i++) {
            memcpy ((uint16_t *)phwDes, phwSrc, width * 2);         //逐行显示
            phwSrc += width;
            phwDes += GLCD_WIDTH;
        }
    		return 0;
    }

    LTDC初始化、运行arm-2d自带Demo

      /* USER CODE BEGIN 2 */
    	HAL_LTDC_SetAddress(&hltdc,(uint32_t)LCD_DB_ADDR,0);//将LCD显存地址更改为LCD_DB_ADDR
    	HAL_LTDC_Reload(&hltdc,LTDC_RELOAD_IMMEDIATE);      //重新加载LCD数据
    	arm_irq_safe {
    	     arm_2d_init();         //初始化arm-2d(安全模式)
    	}
    	disp_adapter0_init();       //初始化屏幕适配器
      /* USER CODE END 2 */
    
      /* Infinite loop */
      /* USER CODE BEGIN WHILE */
      while (1)
      {
        /* USER CODE END WHILE */
    
        /* USER CODE BEGIN 3 */
        disp_adapter0_task();       //运行arm_2d显示应用
      }
      /* USER CODE END 3 */

    3、实验结果

    默认的Demo如下图所示,同时显示当前帧率、Cpu占用、lcd刷新

    image.png

    这款开发板主控支持I/D Cache加速,在程序中开启

      /* USER CODE BEGIN 1 */
      SCB_EnableICache();    //Enable ICache  
     
      SCB_EnableDCache();    //Enable DCache  
      /* USER CODE END 1 */

    刷新速率改善显著,尝试增大PFB大小

    image.png

    更改PFB大小,高度PFB由48改为240

    `K8WL9`DEUTZ7H2(X8US6MW.png

    帧率大幅提高,并且cpu占有率由50%降至37%

    image.png

    4、arm-2d性能评测应用

    arm-2d内置了两个性能评测应用,用于评估当前主控芯片的GUI渲染性能,勾选第一个评测应用

    Z2$IB[_8T55OL$%_L]9]]T3.png

    main.c文件修改,导入评测应用头文件

    /* Private includes ----------------------------------------------------------*/
    /* USER CODE BEGIN Includes */
    #include "string.h"
    #include "arm_2d_helper.h"
    #include "arm_2d_disp_adapters.h"
    #include "arm_2d_scenes.h"
    #include "arm_2d_benchmark.h"
    /* USER CODE END Includes */

    运行性能评测应用

      /* USER CODE BEGIN 2 */
    	HAL_LTDC_SetAddress(&hltdc,(uint32_t)LCD_DB_ADDR,0);//将LCD显存地址更改为LCD_DB_ADDR
    	HAL_LTDC_Reload(&hltdc,LTDC_RELOAD_IMMEDIATE);      //重新加载LCD数据
    	arm_irq_safe {
    	     arm_2d_init();         //初始化arm-2d(安全模式)
    	}
    	disp_adapter0_init();       //初始化屏幕适配器
    	arm_2d_run_benchmark();     //开启性能评测
      /* USER CODE END 2 */
    
      /* Infinite loop */
      /* USER CODE BEGIN WHILE */
      while (1)
      {
        /* USER CODE END WHILE */
    
        /* USER CODE BEGIN 3 */
        disp_adapter0_task();          //运行arm_2d显示应用
      }
      /* USER CODE END 3 */

    实验效果,当前动画demo的刷新率为42fps

    screenshots.gif






    关键词: ARM-2D移植    

    菜鸟
    2025-03-19 10:39:50     打赏
    2楼

    感谢分享


    工程师
    2025-03-19 19:16:36     打赏
    3楼

    大佬对这个研究比较有意义。


    专家
    2025-03-20 20:45:52     打赏
    4楼

    这个2D应用的开发对资源要求挺高吧?


    共4条 1/1 1 跳转至

    回复

    匿名不能发帖!请先 [ 登陆 注册 ]