本帖最后由 lulugl 于 2024-3-9 18:41 编辑

【前言】
在细品TLI之一中,我们把背景图像放好了,如果用户需要放置自己的图像,那就需要配置TLI其的寄存器来实现。
【TLI图层介绍】
在《软件开发指南》中有介绍TLI的图层混合,如下图所示:
image.png
我们在前面只是把BG层给配置,并显示了出来。TLI还可以显示两层图像,层0与层1,最终会通过TLI进行混合显示到用户眼中。
在《指南》有介绍到像素的DMA功能,TLI支持两个独立的图层,需要用到TLI_LxFBADDR寄存器的FBADD位定义每层的帧缓冲区地址。而TLI_LxFLLEN寄存器的FLL定义了一行的长度,以字节为单位,如果一行的长度是N,那么寄存器地址FLL=N+3。再有就是图像如果是块空间,那么还需要定义STDOFF,如果第一像素的地址是M,那么下一行第一个像素的地址将是M+STDOFF。如果两行之间无间隔存储空音,则STDOFF= FLL-3。
还有一个TLI_LxFTLN寄存器的FTLN位域定义了一帧的行数。
通过以上的三个寄存器,我们就可以把一个图像定位到显示屏上。
【像素格式】
TLI可以支持ARG8888等八种像素格式如下表:
image.png
TLI_LxPPF的PPF【2:0】定了像素格,我们将上述列的值写入该寄存器。
TLI_LxCKEY寄存器定义一个RGB值 。
【层窗口和混合功能】
TLI每层都支持窗口功能以及两层的混合功能。每一层由LTI_LxHPOS和LTI_LxVPOS。定义他的位置。
在官方提供的库中,他定义了一个结构体来描述以上图层的配置,代码以及注释如下:
/* TLI layer parameter struct definitions TLI层参数结构定义 */
  • typedef struct
  • {
  •     uint16_t layer_window_rightpos;                                         /*!< window right position 窗户右侧的位置,*/
  •     uint16_t layer_window_leftpos;                                          /*!< window left position 窗口左侧位置 */
  •     uint16_t layer_window_bottompos;                                        /*!< window bottom position 窗底位置 */
  •     uint16_t layer_window_toppos;                                           /*!< window top position 窗口顶部位置 */
  •     uint32_t layer_ppf;                                                     /*!< packeted pixel format 封装的像素格式*/
  •     uint8_t  layer_sa;                                                      /*!< specified alpha 透明度*/
  •     uint8_t  layer_default_alpha;                                           /*!< the default color alpha 默认的颜色alpha */
  •     uint8_t  layer_default_red;                                             /*!< the default color red 默认颜色为红色 */
  •     uint8_t  layer_default_green;                                           /*!< the default color green 默认颜色为绿色 */
  •     uint8_t  layer_default_blue;                                            /*!< the default color blue 默认颜色为蓝色*/
  •     uint32_t layer_acf1;                                                    /*!< alpha calculation factor 1 of blending method 混合法的a计算因子1 */
  •     uint32_t layer_acf2;                                                    /*!< alpha calculation factor 2 of blending method 混合法的a计算因子2 */
  •     uint32_t layer_frame_bufaddr;                                           /*!< frame buffer base address 帧缓冲器的基地址 */
  •     uint16_t layer_frame_buf_stride_offset;                                 /*!< frame buffer stride offset  帧缓冲器跨步偏移量 */
  •     uint16_t layer_frame_line_length;                                       /*!< frame line length  帧行长度 */
  •     uint16_t layer_frame_total_line_number;                                 /*!< frame total line number 帧总行号 */
  • }tli_layer_parameter_struct;
  • 复制代码
    【代码实现】
    先定义一个图形缓冲区。
    然后添加层初始化:
    image.png
    这个图象为320*100的大小。
    最后还需要添回图层使能的代码:
        /* enable TLI layers */
  •     tli_layer_enable(LAYER0);

  •     tli_reload_config(TLI_FRAME_BLANK_RELOAD_EN);
  • 复制代码

    【效果】
    下载到开发板后,就可以成功的实现了图像的展示:
    0ee170da9ce65841517f2753004c056.jpg
    【总结】
    TLI可以说是一个强大的GPU,可以实现图像的混合以及向显示接口输出RGB信号,来实现高质量的图像处理。