前言: 目前在RT1052平台做了ThreadX/GUIX/FileX/USBX,因为开发功能需要将横屏显示的硬件平台通过软件修改为竖屏显示,因此研究了适合现有硬件平台的屏幕显示旋转方法,特此记录。
2D图形处理--PXP:概述: PXP是NXP设计的一种高性能的2D图形处理微构架。用于图像数据发送到LCD或者TV编码器之前的数据处理,例如图像缩放、旋转等。为无SDRAM和基于SRAM的系统提供占用内存最小的图像数据优化和性能。 特性:※PXP能将以下内容组合到一个处理引擎中: -图像缩放; -图像色彩转换; -图像旋转; -alpha混合; -颜色键算法; -像素校正。 ※PXP由多个流水线块组成,共同完成复杂算法或组合操作。 配置步骤:l 选择PXP时钟源,配置时钟频率; l 使能PXP时钟; l 复位PXP外设; l 根据要操作的具体内容配置PXP相应控制寄存器; l 设置输入缓冲区配置,包括输入像素格式,输入缓冲区地址等; l 设置输出缓冲区配置,包括输出像素格式,输出模式等; l 如果使用中断需要置位相应中断位,并使能中断号; l 若对中断优先级有要求,配置中断优先级; l 填充要进行数据处理的缓冲数据区; l 将数据区的地址填入PXP相应寄存器; l 使能PXP进行数据处理。 本文介绍使用PXP的旋转功能实现横屏转竖屏的效果。
软件实现过程:初始化:
GUIX接口函数添加旋转90°处理:
将下一帧数据复制到PXP输入帧里面,设置旋转角度为90°,输出地址设置为下一帧数据缓存。启动PXP后开始旋转计算,等待完成后下一帧的数据缓存里面就是旋转了90°的数据了,可以开始将之传入LCD显示。 局部控件刷新设置: 根据上述修改后可以将整个界面旋转90°了,但是当界面中局部空间刷新时将会显示异常。因为局部控件的刷新是在当前显示帧数据中进行数据修改的,而修改是按照旋转前的坐标和方向进行的,这就意味着横屏的局部修改数据将会填充到旋转90°后的整体数据中,这样显示就会呈现异常情况。 因此,即使是局部修改,也要触发为整体修改,这样就可以避免局部控件刷新后的显示异常。 首先需要对每一个窗口进行绑定: 然后在窗口回调函数中局部刷新时将整个窗口标记为脏: 触摸校准: 触摸校准的三个校准点是根据屏幕的长和宽设置的,翻转90°后需要将输入校准函数的长和宽对调,同时校准函数中的局部刷新也要更改为全局刷新:
总结: 使用了RT1052的PXP功能进行了旋转处理。如此旋转处理后对于局部刷新的效率有所降低,整体刷新需要增加一个旋转的过程。实际测试下来没有肉眼可见的延迟。
|