找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

[嵌入式/ARM] 基于PXA270的LCD显示系统的设计与实现

[复制链接]
admin 发表于 2013-3-31 22:48:34 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
本文介绍了液晶显示器(LCD)的基本工作原理和Intel Xscale PXA270的内置LCD控制器。
        设计了PXA270与LCD模块的硬件电路和针对LCD的具体参数配置了LCD控制器中的相关寄存器,最后在嵌入式的Linux操作系统中编写和加载了LCD的驱动程序。

       引言
        Xscale处理器是Intel公司推出的基于ARMv5TE体系结构的ARM处理器。PXA270是该公司于2003年第四季度推出一款全性能、高性价比、低功耗的Xscale处理器,其最高主频可达624MHz。
        PXA270拥有的 Quick Capture(快速拍摄)、Wireless MMX(无线MMX指令)和Wireless Speed Step(无线动态节能)技术,大大提升了多媒体处理能力;同时在保证CPU性能的情况下,最大限度地降低移动设备功耗。
        嵌入式Linux(Embedded Linux)是指对标准Linux经过小型化裁减处理之后,能够固化在容量只有几KB或者几MB的存储器芯片或者单片机中,适合于特定嵌入式应用场合的专用Linux操作系统。在目前已经开发成功的嵌入式系统中,大约有一半使用的是Linux。
        1  LCD液晶显示原理
        嵌入式系统一般采用液晶显示屏LCD。本系统采用的是LG Philiph的TFT6.4寸的真彩显示屏LP064V02。
        液晶显示的原理是液晶在不同电压的作用下会呈现出不同的光特性。TFT是薄膜晶体管Thin Film Transitor的缩写。FB(Frame Buffer)是帧缓冲器。
        显示屏所显示的一幅完整画面就是一个帧(Frame),其整个显示区域,在系统内会有一段存储空间与之对应,通过改变该存储空间的内容,从而改变显示屏的内容,该存储空间被称为Frame Buffer。显示屏上的每一点都必然与Frame Buffer里的某一位置对应。而计算机显示的颜色是通过RGB值来表示的,因此如果要在屏幕某一点显示某种颜色,则必须给出相应的RGB值。Frame Buffer就是用来存放整个显示的编码和像点值的外部存储器区域。帧缓冲器的每一个字节对应着LCD中的一个像素,例如LP064V02显示屏有640×480=307200个像素。
        2 PXA270中内置的LCD控制器
        2.1 LCD控制器介绍
        Frame Buffer和LCD显示屏之间的数据传输很频繁,完全由CPU通过程序直接驱动显然不合适。因此,为减轻CPU的负担,在Frame Buffer与显示屏之间还需要一个中间件,该中间件负责从Frame Buffer里提取数据,进行处理,并传输到显示屏上。
        LCD控制器由以下部分组成:LCD DMAC(本文提出的DMAC都是指集成在LCDC内部的DMAC),输入/输出FIFO,内部调色板,TMED抖动(帧速率控制),寄存器组。
        LCDC的内部操作方式会因为所接LCD类型的不同而有所不同。本系统采用的是主动16位像点模式。在这种主动彩色模式中,LCDC内部的工作方式相对简单,Frame Buffer内的数据是16位的像素数据,此时,LCDC无需加载数据到内部调色板,并且数据无需经过帧速率控制单元的处理,直接发送至LCD控制器的数据脚,通过DMAC传输到输入 FIFO后,数据又立刻被传送到输出 FIFO。
        2.2 LCD模块的硬件连接
        PXA270与LCD模块的硬件连接如图1所示。各信号引脚的说明如下:
   K25MDn070831123125850201106101558483335.gif
  
  图1  LCD接口框图
        ● L_DD[15:0]:数据线。16位数据线可以显示红、绿、蓝像点,使用5位红、6位绿和5位蓝就能实现不同颜色的显示。
        ● L_PCLK:像点时钟。用于把彩色数据输入到LCD显示器中的移位寄存器中。被动模式下,像点时钟仅在数据线上数据有效时才发生跳变;主动模式下,像点时钟连续跳变。
        ●L_LCLK:行扫描时钟。用于LCD显示器行显示的结束和把移位寄存器的行数据送到显示器中,并且将行指针加1。主动模式下,它是水平同步信号。
        ●L_FCLK:帧扫描时钟。用于LCD显示器新的帧像点的开始。显示器复位时行指针指向显示屏的顶部。在主动模式下,它是垂直同步信号。
        ●   L_BIAS:AC偏置。主动方式下,它是数据使能信号。
        3  LCD驱动程序的设计与实现
        PXA270嵌入式系统对LCD显示屏的驱动分成两方面:一方面是对LCD及相关部件的初始化,包括帧缓冲区的创建和对DMA通道的设置;另一方面就是对帧缓冲区的读写,将帧缓冲区的内容输送到LCD显示屏由硬件完成,对于驱动来说是透明的。
        3.1 帧缓冲器的初始化
        主要数据结构如下:
        struct pxafb_info:主要用于帧缓冲区设备驱动框架的搭建,也是Linux为帧缓冲设备定
        义的驱动层接口。它不仅包含了底层函数,而且还记录了帧缓冲器设备的全部信息。每个帧缓冲设备都必须与一个fb_info结构相对应。其中成员变量modename为设备名称,fontname为显示字体,fbops为指向底层操作的函数的指针。
        struct pxafb_fix_screeninfo:记录用户不能修改的显示控制器参数。它包括屏幕缓冲区的物理地址和长度。
        struct pxafb_var_screeninfo:记录用户可以修改的显示控制器参数。它包括显示屏幕的分辨率、每个像素的比特数和一些时序变量。其中变量xres定义了屏幕一行所占的像素数,yres定义了屏幕一列所占的像素数,bits_per_pixel定义了每个像素用多少个位来表示。
        帧缓冲区的初始化函数在/drivers/video/pxafb.c文件中,结构如下:
 楼主| admin 发表于 2013-3-31 22:48:45 | 显示全部楼层

  int __init pxafb_init(void)
  {
        struct pxafb_info *fbi;
        int ret;
  …………
        fbi = pxafb_init_fbinfo();     //初始化一些重要的数据结构
  …………
  /* Initialize video memory */
        ret = pxafb_map_video_memory(fbi);  //在内存中创建一个图像缓存区
        …………
        pxafb_set_var(&fbi->fb.var, -1, &fbi->fb);
     …………
        ret = register_framebuffer(&fbi->fb);   //登记,使画面缓冲区与控制台设备驱动的高层挂钩
  …………
  / * Ok, now enable the LCD controller  */
        set_ctrlr_state(fbi, C_ENABLE);
        …………
        return ret;
  }
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2025-1-10 13:46 , Processed in 0.057650 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表