NXP¶
NXP 已将 LVGL 集成到 MCUXpresso SDK 包中,支持其多种通用和跨界微控制器,从而可以轻松评估并迁移到您的产品设计中。 下载支持的开发板的 SDK 并开始您的下一个 GUI 应用程序。
使用 LVGL 创建新项目¶
建议下载 MCU SDK 示例项目作为起点。它已完全配置了 LVGL(如果模块存在,还支持 PXP/VGLite),无需额外的集成工作。
NXP iMX RT 平台的硬件加速¶
根据所使用的 RT 平台,加速可以通过 NXP PXP(像素流水线)和/或 Verisilicon GPU 通过名为 VGLite 的 API 实现。 有一个单一的 NXP 绘图上下文覆盖了两个 GPU,可以启用其中一个甚至同时启用两个。 在同时启用两个 2D 加速器时,VGLite 可用于加速小部件绘制,而 PXP 加速 BLIT 和填充操作。
支持的绘图回调可在 "src/draw/nxp/lv_gpu_nxp.c" 中找到:
nxp_draw_ctx->base_draw.draw_arc = lv_draw_nxp_arc;
nxp_draw_ctx->base_draw.draw_rect = lv_draw_nxp_rect;
nxp_draw_ctx->base_draw.draw_img_decoded = lv_draw_nxp_img_decoded;
nxp_draw_ctx->blend = lv_draw_nxp_blend;
如果同时启用了两个 GPU,PXP 是首选用于绘图操作的 GPU。实现了回退机制,因此如果 PXP 不支持某功能(或 PXP 失败),VGLite 将接管任务。 最后,CPU 将确保每个小部件的绘制都完全覆盖(如果 GPU 尚未完成)。
PXP 加速器¶
LVGL 中的几个绘图功能可以卸载到 PXP 引擎。VGLite(如果支持)和 CPU 可用于其他操作,而 PXP 正在运行。 需要一个 RTOS 来阻止 LVGL 绘图线程并切换到另一个任务或挂起 CPU 以节省电力。
支持的功能:¶
RGB565 和 ARGB8888 颜色格式
区域填充 + 可选透明度
BLIT(块图像传输)+ 可选透明度
颜色键控 + 可选透明度
重着色(颜色色调)+ 可选透明度
图像旋转(90、180、270 度)+ 可选透明度
重着色(颜色色调)+ 图像旋转(90、180、270 度)+ 可选透明度
屏幕旋转(90、180、270 度)
RTOS 集成层
提供默认的 FreeRTOS 和裸机代码
支持重着色和/或旋转 + 颜色键控/alpha 混合/透明度的组合,但 PXP 需要两步。 第一步是将图像重着色/旋转到临时缓冲区(请检查 LV_MEM_SIZE 值以了解分配限制), 另一步需要处理颜色键控、alpha 通道或应用透明度。
已知限制:¶
不支持未对齐到 16x16 像素块的图像的旋转。 PXP 设置为处理 16x16 块以优化系统的内存带宽和图像处理时间。 输出引擎本质上会在写入所需像素数量后截断任何输出像素。 当旋转源图像且输出不能被块大小整除时,可能会截断不正确的像素,最终输出图像可能看起来偏移。
基本配置:¶
在 lv_conf.h 中选择 NXP PXP 引擎:将
LV_USE_GPU_NXP_PXP设置为 1启用中断处理、PXP 启动功能和自动初始化的默认实现: 将
LV_USE_GPU_NXP_PXP_AUTO_INIT设置为 1如果定义了
SDK_OS_FREE_RTOS符号,将使用 FreeRTOS 实现,否则将包含裸机代码
基本初始化:¶
如果启用了
LV_USE_GPU_NXP_PXP_AUTO_INIT,则不需要用户代码;PXP 在lv_init()中自动初始化对于手动 PXP 初始化,可以使用默认的回调配置结构。在调用
lv_init()之前初始化 PXP
#if LV_USE_GPU_NXP_PXP
#include "src/draw/nxp/pxp/lv_gpu_nxp_pxp.h"
#endif
. . .
#if LV_USE_GPU_NXP_PXP
PXP_COND_STOP(!lv_gpu_nxp_pxp_init(), "PXP init failed.");
#endif
项目设置:¶
将 PXP 相关文件添加到项目:
src/draw/nxp/pxp/lv_gpu_nxp_pxp.c, src/draw/nxp/pxp/lv_gpu_nxp_pxp.h: 初始化、反初始化、运行/等待 PXP 设备、日志/跟踪
src/draw/nxp/pxp/lv_draw_pxp_blend.c, src/draw/nxp/pxp/lv_draw_pxp_blend.h: 填充和 BLIT(无变换)
src/draw/nxp/pxp/lv_gpu_nxp_osa.c, src/draw/nxp/pxp/lv_gpu_osa.h: OS 特定功能的默认实现(仅限裸机和 FreeRTOS)
可选,仅当
LV_USE_GPU_NXP_PXP_AUTO_INIT设置为 1 时需要
PXP 相关代码依赖于 MCU SDK 提供的两个驱动程序。这些驱动程序需要添加到项目:
fsl_pxp.c, fsl_pxp.h: PXP 驱动程序
fsl_cache.c, fsl_cache.h: CPU 缓存处理功能
日志记录:¶
默认情况下,启用了 LV_GPU_NXP_PXP_LOG_ERRORS,因此可以在 LVGL 输出上看到任何 PXP 错误
对于有关 PXP 限制或大小阈值的跟踪日志,用户可以启用 LV_GPU_NXP_PXP_LOG_TRACES
高级配置:¶
实现依赖于多个 OS 特定功能。结构
lv_nxp_pxp_cfg_t带有回调指针,用作lv_gpu_nxp_pxp_init()函数的参数。 在 lv_gpu_nxp_osa.c 中提供了 FreeRTOS 和裸机的默认实现pxp_interrupt_init(): 初始化 PXP 中断(硬件设置,OS 设置)pxp_interrupt_deinit(): 反初始化 PXP 中断(硬件设置,OS 设置)pxp_run(): 启动 PXP 作业。使用 OS 特定机制阻止绘图线程。在离开此函数之前,PXP 必须完成绘图。
有可配置的区域阈值,用于决定区域将由 CPU 还是 PXP 处理。 小于定义值的区域将由 CPU 处理,而大于阈值的区域将由 PXP 处理。这些阈值可以定义为预处理器变量。 默认值在 lv_draw_pxp_blend.h 中定义
LV_GPU_NXP_PXP_BLIT_SIZE_LIMIT: 图像 BLIT、带颜色键控的 BLIT、带重着色的 BLIT 和带旋转的 BLIT 的大小阈值(OPA >= LV_OPA_MAX)LV_GPU_NXP_PXP_BLIT_OPA_SIZE_LIMIT: 图像 BLIT、带颜色键控的 BLIT、带重着色的 BLIT 和带旋转的 BLIT 和透明度的大小阈值(OPA < LV_OPA_MAX)LV_GPU_NXP_PXP_FILL_SIZE_LIMIT: 填充操作的大小阈值(OPA >= LV_OPA_MAX)LV_GPU_NXP_PXP_FILL_OPA_SIZE_LIMIT: 带透明度的填充操作的大小阈值(OPA < LV_OPA_MAX)
VGLite 加速器¶
LVGL 中的额外绘图功能可以由 VGLite 引擎处理。VGLite(如果支持)和 CPU 可用于其他操作,而 VGLite 正在运行。 需要一个 RTOS 来阻止 LVGL 绘图线程并切换到另一个任务或挂起 CPU 以节省电力。
支持的功能:¶
RGB565 和 ARGB8888 颜色格式
区域填充 + 可选透明度
BLIT(块图像传输)+ 可选透明度
图像旋转(任意角度,带小数)+ 可选透明度
图像缩放 + 可选透明度
绘制带半径或渐变的背景矩形
绘制弧线
RTOS 集成层
基本配置:¶
在 lv_conf.h 中选择 NXP VGLite 引擎:将
LV_USE_GPU_NXP_VG_LITE设置为 1需要定义
SDK_OS_FREE_RTOS符号,以便使用 FreeRTOS 实现
基本初始化:¶
在调用
lv_init()之前,通过指定镶嵌窗口的宽度/高度来初始化 VGLite。值应为 16 的倍数;最小值为 16 像素,最大值不能大于帧宽度。 如果小于或等于 0,则不会创建镶嵌缓冲区,在这种情况下,该函数用于 BLIT 初始化。
#if LV_USE_GPU_NXP_VG_LITE
#include "vg_lite.h"
#endif
. . .
#if LV_USE_GPU_NXP_VG_LITE
VG_LITE_COND_STOP(vg_lite_init(64, 64) != VG_LITE_SUCCESS, "VGLite init failed.");
#endif
项目设置:¶
将 VGLite 相关文件添加到项目:
src/draw/nxp/vglite/lv_gpu_nxp_vglite.c, src/draw/nxp/vglite/lv_gpu_nxp_vglite.h: 缓冲区初始化、日志/跟踪
src/draw/nxp/vglite/lv_draw_vglite_blend.c, src/draw/nxp/vglite/lv_draw_vglite_blend.h: 填充和 BLIT(无变换)
src/draw/nxp/vglite/lv_draw_vglite_rect.c, src/draw/nxp/vglite/lv_draw_vglite_rect.h: 矩形绘制
src/draw/nxp/vglite/lv_draw_vglite_arc.c, src/draw/nxp/vglite/lv_draw_vglite_arc.h: 弧线绘制
日志记录:¶
默认情况下,启用了 LV_GPU_NXP_VG_LITE_LOG_ERRORS,因此可以在 LVGL 输出上看到任何 VGLite 错误
对于有关 VGLite 限制、大小阈值或步幅对齐的跟踪日志,用户可以启用 LV_GPU_NXP_VG_LITE_LOG_TRACES
高级配置:¶
有可配置的区域阈值,用于决定区域将由 CPU 还是 VGLite 处理。 小于定义值的区域将由 CPU 处理,而大于阈值的区域将由 VGLite 处理。这些阈值可以定义为预处理器变量。 默认值在 lv_draw_vglite_blend.h 中定义
LV_GPU_NXP_VG_LITE_BLIT_SIZE_LIMIT: 图像 BLIT、带缩放的 BLIT 和带旋转的 BLIT 的大小阈值(OPA >= LV_OPA_MAX)LV_GPU_NXP_VG_LITE_BLIT_OPA_SIZE_LIMIT: 图像 BLIT、带缩放的 BLIT 和带旋转的 BLIT 和透明度的大小阈值(OPA < LV_OPA_MAX)LV_GPU_NXP_VG_LITE_FILL_SIZE_LIMIT: 填充操作的大小阈值(OPA >= LV_OPA_MAX)LV_GPU_NXP_VG_LITE_FILL_OPA_SIZE_LIMIT: 带透明度的填充操作的大小阈值(OPA < LV_OPA_MAX)