小猫爪:i.MX RT1050学习笔记22-eLCDIF

  • 1 前言
  • 2 结构
  • 3 初始化结构体
  • 4 开启一次简单的传输过程
  • 5 PXP
  • END

1 前言

RT1052 系列芯片内部自带一个增强型液晶Parallel RGB接口外设eLCDIF(Enhanced LCD Interface),配合使用内部SRAM或外部的SDRAM作为显存,可直接控制液晶面板,无需额外增加液晶控制器芯片。RT1052 的eLCDIF 液晶控制器最高支持1366x768 分辨率的屏幕;可支持多种颜色格式,包括RGB888、RGB565、ARGB8888 等(其中的“A”是指透明像素)。下面我们就来介绍一下这个外设。(对LCD不熟悉的小伙伴可以先参考文章《小猫爪:嵌入式小知识09-LCD Parallel RGB接口(转载)》)

2 结构

eLCDIF功能结构如下图显示:

  1. LCD Pins
    eLCDIF 的通讯引脚与液晶显示面板控制信号一一对应,包含有HSYNC、VSYNC、DE、CLK 以及RGB 数据线。
  2. Panel Interface Generator
    eLCDIF 外设提供了一个面板接口生成器的功能,也称为Pigeon Mode 模式。使用该模式时,可以通过每个eLCDIF 信号线独有的计数器进行控制,计数器的起始条件和递增条件可以自由定制,从而可以使各个信号线实现延迟、翻转等功能。
  3. LUT
    在eLCDIF 外设中LUT 表是个256x24位的空间,共有2 个LUT 表,在每个表的空间中可以缓存256 种24 位的颜色,颜色的格式是RGB888。利用颜色查找表显示,实际的图像只能使用这256 种颜色,这可以使用8位数据来表示24位的显示效果。比如对于色彩要求不高的场合,可以在RAM中定义8位数据宽度来表示像素点,但是可以通过LUT表将8位像素数据转变成24像素数,然后再通过IO输出给LCD。
  4. LCD Interface
    LCD Interface是eLCDIF 外设的主要功能部件,受控制总线(Control Bus)的寄存器控制,从系统总线(System Bus)获得输入像素数据,经过一系列转换后通过eLCDIF 的通讯引脚发送至外接的液晶面板。
  5. Display clock和Bus clock
    Bus clock是eLCDIF外设时钟, Display clock则是RGB接口的像素时钟。在这里得重点说一下像素时钟,像素时钟是LCD发出的时钟,虽然我们口头经常说我们将显存数据输送给LCD,其实这种说法是不正确的,LCD控制器其实是主机,RT1050是从机,它发送像素时钟信号给RT1050,然后从显存中取数据。

3 初始化结构体

可以直接使用NXP的SDK 库中的LCD初始化结构体对其进行初始化,下面贴出LCD初始化结构体:

typedef struct _elcdif_rgb_mode_config
{uint16_t panelWidth;    /*!< Display panel width, pixels per line. */uint16_t panelHeight;   /*!< Display panel height, how many lines per panel. */uint8_t hsw;            /*!< HSYNC pulse width. */uint8_t hfp;            /*!< Horizontal front porch. */uint8_t hbp;            /*!< Horizontal back porch. */uint8_t vsw;            /*!< VSYNC pulse width. */uint8_t vfp;            /*!< Vrtical front porch. */uint8_t vbp;            /*!< Vertical back porch. */uint32_t polarityFlags; /*!< OR'ed value of @ref _elcdif_polarity_flags, used to contol the signal polarity. */uint32_t bufferAddr;    /*!< Frame buffer address. */elcdif_pixel_format_t pixelFormat; /*!< Pixel format. */elcdif_lcd_data_bus_t dataBus;     /*!< LCD data bus. */
} elcdif_rgb_mode_config_t;

每一个参数都是那么显而易见的:

名称 描述
panelWidth 配置要控制的液晶面板的分辨率,分别指定宽和高,即每行有多少个像素点、一共有多少行。
panelHeight 配置要控制的液晶面板的分辨率,分别指定宽和高,即每行有多少个像素点、一共有多少行。
hsw HSYNC 信号的宽度像素时钟数
hfp HSYNC 前的无效像素时钟数
hbp HSYNC 后的无效像素时钟数
vsw VSYNC 信号的宽度时钟数
vfp VSYNC 前的无效行数时钟数
vbp VSYNC 后的无效行数时钟数
polarityFlags 设置各个信号的极性,对这个结构体成员赋值时可使用枚举类型_elcdif_polarity_flags
bufferAddr 配置显存的基地址,eLCDIF 外设会从该地址中搬运数据到液晶面板,显存的位置可根据需要定义到内部SRAM 或扩展的SDRAM 空间中,该地址要求8 字节对齐(double-word aligned)
pixelFormat 配置eLCDIF 的输入源像素数据格式,它是一个_elcdif_pixel_format 枚举类型变量
dataBus 配置eLCDIF 要使用的数据信号线宽度,它是一个elcdif_lcd_data_bus_t 枚举类型

4 开启一次简单的传输过程

其实传输过程很简单,取出NXP的demo来看(已经去除其他的部分):

    /*初始化LCD相关的引脚*/ BOARD_InitPins();/*初始化LCD像素时钟*/ BOARD_InitLcdifPixelClock();/*打开LCD背光*/BOARD_InitLcd();/*初始化LCDIF控制器*/APP_ELCDIF_Init();/*使能LCD中断*/BOARD_EnableLcdInterrupt();/* Clear the frame buffer. */memset(s_frameBuffer, 0, sizeof(s_frameBuffer));/*填充显存1*/APP_FillFrameBuffer(s_frameBuffer[frameBufferIndex]);/*使能LCD传输完成中断源*/ELCDIF_EnableInterrupts(APP_ELCDIF, kELCDIF_CurFrameDoneInterruptEnable);/*开启eLCDIF的RGB模式*/ELCDIF_RgbModeStart(APP_ELCDIF);/*填充显存2*/APP_FillFrameBuffer(s_frameBuffer[frameBufferIndex]);/*设置显存地址,开始一次传输*/ELCDIF_SetNextBufferAddr(APP_ELCDIF, (uint32_t)s_frameBuffer[frameBufferIndex]);

5 PXP

PXP全称pixel pipeline,这是RT1050的一个图形处理硬件加速引擎。举个简单的例子,如果我想将一幅图片缩小后在显示在LCD屏幕上,这就需要通过软件对源图片数据进行处理后然后再输出给LCD显存,这中间则是造成了CPU和RAM 资源的大量使用,但是有了PXP,则是可以将这部分的处理工作交给PXP去完成,再将PXP处理后的数据输出给LCD显存,这不仅增加了速度,还节省了CPU和RAM资源,除了缩放,PXP可以完成叠加以及旋转等操作,在这里我就不说具体实现过程了,感兴趣的小伙伴可以参照官方和SDK的PXP例程学习。

这里提一嘴,现在市场上常见的嵌入式UI设计,有Emwin、LVGL、Embeded Wizard以及Crank等,如果我们将这些UI移植进我们的开发板中,其中间的复杂的UI操作默认都是靠软件变换去实现的,并没有用到PXP,如果想在这些UI中使用PXP,这个时候则需要针对UI的底层进行优化,不过这是一个非常考验软件功底的操作,对于开源UI一般都是需要大牛或者芯片产商去做无私的奉献,而对于收费的UI,如Embeded Wizard则就需要money去解决了。

END

小猫爪:i.MX RT1050学习笔记22-eLCDIF相关推荐

  1. 小猫爪:i.MX RT1050学习笔记3-CCM

    小猫爪:i.MX RT1050学习笔记3-CCM 1 前言 2 RT时钟的管理 3 CCM的结构 4 CCM的时钟树 5 时钟模块的具体功能 5.1 生成时钟 5.1.1 时钟源 5.1.2 7个PL ...

  2. 小猫爪:i.MX RT1050学习笔记2-下载

    小猫爪:i.MX RT1050学习笔记2-下载 1 前言 2 Flashloader和FLASH算法 2.1 FLASH算法 2.2 Flashloader 3 下载方式 END 1 前言 在前面介绍 ...

  3. 小猫爪:i.MX RT1050学习笔记7-Power Supply

    小猫爪:i.MX RT1050学习笔记7-Power Supply电源设计 1 前言 2 与电源相关的引脚 3 上电和掉电序列 4 关于片内DCDC模块 5 特殊引脚的处理 6 RT系列芯片由于电源波 ...

  4. 小猫爪:i.MX RT1050学习笔记4-IO系统

    小猫爪:i.MX RT1050学习笔记4-IO系统 1 前言 2 PAD 2.1 IORING 2.2 IOMUX 2.3 IOMUXC 3 GPIO 4 应用实例 1 前言 在介绍GPIO之前,不得 ...

  5. 小猫爪:i.MX RT1050学习笔记5-中断NVIC

    小猫爪:i.MX RT1050学习笔记5-中断NVIC 1 前言 2 中断号 3 中断优先级分组和中断优先级 4 相关操作函数 5 应用实例 5.1 RT1050 GPIO中断 5.2 中断配置过程 ...

  6. 小猫爪:i.MX RT1050学习笔记20-安全启动4-实现HAB签名和HAB加密

    小猫爪:i.MX RT1050学习笔记20-安全启动4-实现HAB签名和HAB加密 1 前言 2 准备工作 2.1 下载Flashloader 2.2 下载CST 2.3 安装OpenSSL 3 实战 ...

  7. 小猫爪:i.MX RT1050学习笔记15-FlexSPI-FLASH使用3-KEIL FLASH算法中的使用

    小猫爪:i.MX RT1050学习笔记15-FlexSPI-FLASH使用3-KEIL FLASH算法中的使用 1 前言 2 FLASH算法解析 2.1 初始化Init 2.2 写操作 END 1 前 ...

  8. 小猫爪:i.MX RT1050学习笔记23-FreeRTOS移植之宇宙最详细

    小猫爪:i.MX RT1050学习笔记23-FreeRTOS移植之宇宙最详细 1 前言 2 准备 2.1 下载FreeRTOS源代码 2.2 准备一个RT1050的普通工程 3 移植 3.1 添加文件 ...

  9. 小猫爪:i.MX RT1050学习笔记16-启动流程(Boot Flow)

    小猫爪:i.MX RT1050学习笔记16-启动流程(Boot Flow) 1 前言 2 bootROM的流程 2.1低功耗唤醒启动 2.2 正常启动 2.2.1 Serial Download 2. ...

最新文章

  1. MVC 之HTML辅助方法
  2. tvpvar模型的建模步骤_风控建模六部曲
  3. python核心编程6-14习题的解题思路
  4. ASP.NET 之 MVC框架及搭建
  5. java.io.File.setExecutable(boolean executable) 方法来设置所有者对于此抽象路径名执行权限。
  6. Spring Boot API 接口文档 Swagger 入门
  7. java 刽子手游戏_java基础(九):容器
  8. 简单的CreateRemoteThread例程-初学者必看
  9. homestead 安装mysql8_homestead安装php redis扩展
  10. [安卓] 14、安卓HTTP——POST和GET用法分析
  11. 冲刺一团队五亲亲精英队
  12. gis环境设置在哪_BIM与GIS如何融合应用?
  13. 成人高考想学计算机专业,成人高考计算机类专业有哪些?
  14. a59s刷机包卡刷 oppo_OPPO A59S刷机包
  15. Linux接蓝牙音响无声音,win10蓝牙音箱没有声音怎么办_win10蓝牙音响连接成功没声音处理方法...
  16. Linux vi 双屏显示,如何设置双屏显示器
  17. 关于VM开启黑屏的解决方法
  18. 程序员公司实行996,加班费却只有10块!网友:我们20块
  19. 求绝对值最大值 -java求绝对值
  20. EMV技术学习和研究(九)终端行为分析

热门文章

  1. 【奇葩问题】电脑玩游戏GPU高速负荷时,连接双显示器画面会在两个显示器之间跳跃
  2. 每周值得关注的人工智能头条:DOTA 2,职业选手保住了人类的尊严
  3. jxTMS--demo说明
  4. 虚拟服务器与云服务器区别,云服务器与虚拟主机的区别
  5. 淘宝客小程序制作(2)-服务器设置
  6. 【特征工程】 离散型变量 映射成 数字
  7. 射击场设备分类:自动报靶功能的精度自动靶机
  8. 3.鱼眼摄像机纠正,相机纠偏,详细源码及讲解
  9. iphone手机照片heic转换jpg
  10. Rainbond:如何制作一个可分享的云市应用?