基于ARM9处理器S3C2410的LCD显示系统设计

发布者:梦中徐来最新更新时间:2011-07-14 关键字:ARM9处理器  S3C2410  LCD显示系统 手机看文章 扫描二维码
随时随地手机看文章

  0 引言

  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所示。各信号引脚的说明如下:

基于PXA270的LCD显示系统的设计与实现

  图1 LCD接口框图

  ● L_DD[15:0]:数据线。16位数据线可以显示红、绿、蓝像点,使用5位红、6位绿和5位蓝就能实现不同颜色的显示。

  ● L_PCLK:像点时钟。用于把彩色数据输入到LCD显示器中的移位寄存器中。被动模式下,像点时钟仅在数据线上数据有效时才发生跳变;主动模式下,像点时钟连续跳变。

  ●L_LCLK:行扫描时钟。用于LCD显示器行显示的结束和把移位寄存器的行数据送到显示器中,并且将行指针加1。主动模式下,它是水平同步信号。

  ●L_FCLK:帧扫描时钟。用于LCD显示器新的帧像点的开始。显示器复位时行指针指向显示屏的顶部。在主动模式下,它是垂直同步信号。[page]

  ●  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文件中,结构如下:

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;
}

  首先是pxafb_init_fbinfo()的调用,目的在于对几个数据结构进行初始化,并设置有关的基本的参数,例如所用的字体、显示屏的规格等,还有为了搭建帧缓冲器的设备驱动框架做一些准备。接着通过pxafb_map_video_memory()函数在内存中创建帧缓冲区,实际上是为一个内存区间另外建立一个映射。这里分配用于帧缓冲区的内存区间应该是不经高速缓存、不加写缓冲的,这样才可以一经写入便立即反映在显示屏上,而无需先对高速缓存进行刷新。

  pxafb_set_var()函数是为控制台设备驱动的高层提供一个驱动帧缓冲区的界面。同时也确定一些与画面缓冲区有关的参数,并记录在一个fb_var_screeinfo数据结构中。确定了这些参数以后,如果目标帧缓冲区属于当前选定的控制台设备,就通过pxa_activate_var()函数把这些参数分门别类地组合生成PXA270各有关寄存器的映像,并最终设置到PXA270的各个LCD控制寄存器中。

  这里用到6个寄存器:

  DBAR1:DMA通道1的基地址寄存器,用于调色板;

  DBAR2:DMA通道2的基地址寄存器,用于画图;

  LCCR0:黑白/彩色模式选择,单画面/双画面显示方式、被动/主动显示模式选择;

  LCCR1:控制着水平方面的扫描,包括每行的像素、水平同步脉冲宽度、在水平扫描行的开头和末尾各空出几个像素等参数;

  LCCR2:控制着垂直方面的扫描,包括每个画面的行数、垂直同步脉冲宽度、在画面的顶部和底部各空出几行等参数;

  LCCR3:控制着像素时钟的频率以及各种同步脉冲的极性。

  这些宏操作都在/drivers/video/pxafb.h文件里。

#if defined(CONFIG_FB_LB064v02)
#define LCD_PIXCLOCK    250000//54000//150000
#define LCD_BPP       16
#define LCD_XRES      640
#define LCD_YRES      480
#define LCD_HORIZONTAL_SYNC_PULSE_WIDTH 46
#define LCD_VERTICAL_SYNC_PULSE_WIDTH  1
#define LCD_BEGIN_OF_LINE_WAIT_COUNT  96
#define LCD_BEGIN_FRAME_WAIT_COUNT  35
#define LCD_END_OF_LINE_WAIT_COUNT   4
#define LCD_END_OF_FRAME_WAIT_COUNT  0
#define LCD_SYNC  (FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT)
#define LCD_LCCR0  (LCCR0_OUC | LCCR0_CMDIM | LCCR0_RDSTM | LCCR0_OUM | LCCR0_BM | LCCR0_QDM | LCCR0_PAS |LCCR0_EFM | LCCR0_IUM | LCCR0_SFM | LCCR0_LDM )
#define LCD_LCCR3          (LCCR3_PCP | LCCR3_HSP | LCCR3_VSP)
#endif

[page]

  最后是通过register_framebuffer()进行各项登记,使帧缓冲区与控制台设备驱动的高层相连。参数fbi是一个指向fb_info数据结构的指针,通过这个数据结构使帧缓冲区与文件系统连接起来。

  3.2 帧缓冲区的操作

  对帧缓冲区的操作,应用程序首先要打开代表帧缓冲区的设备文件,帧缓冲区的file_operations数据结构是fb_fops。

static struct file_operations fb_fops = {
   owner:         THIS_MODULE,
   read:      fb_read,  // 读操作
   write:          fb_write, // 写操作
   ioctl:      fb_ioctl, // 控制操作
   mmap:         fb_mmap, // 映射操作
   open:          fb_open, // 打开操作
   release:    fb_release,  // 关闭操作
#ifdef HAVE_ARCH_FB_UNMAPPED_AREA
   get_unmapped_area: get_fb_unmapped_area,
#endif
};

  应用程序层对帧缓冲设备的访问同对文件的访问操作类似。在应用程序中,对帧缓冲设备(dev/fb)的操作只需调用文件层的操作函数。首先打开/dev/fb设备文件;随后用ioctl操作取得屏幕的分辨率和bpp值,从而计算出屏幕缓冲区的大小,并将屏幕的缓冲区映射到用户空间;最后就可直接对屏幕缓冲区进行图片显示。对帧缓冲区的打开文件操作是由fb_open()完成等。

  驱动程序编写完成后,开发者可以将其编译为动态加载模式,或静态地编译入内核中。

  4 结束语

  随着后PC时代的到来,嵌入式系统得到了越来越广泛的应用。现在的嵌入式系统一般都需要提供图形化的人机界面。本文所设计的系统运行良好,性能稳定。在实际产品中取得了比较满意的经济效益。

关键字:ARM9处理器  S3C2410  LCD显示系统 引用地址:基于ARM9处理器S3C2410的LCD显示系统设计

上一篇:基于ARM的除法运算优化策略
下一篇:uC/OS-II在ARM系统上的移植与实现

推荐阅读最新更新时间:2024-03-16 12:38

使用S3C2410设计三导联远程心电监护
  主要介绍一种基于S3C2410平台的三导联远程心电监护系统。该系统能够不受时间、空间的限制对心脏病患者进行实时监护,从而方便患者与医护人员随时进行沟通。经过临床测试受到医疗界专家和心脏病患者的高度评价。   1 引 言   随着人们生活水平的提高、生活节奏的加快,心血管疾病的发病率迅速上升,已成为威胁人类身体健康的主要因素之一。而心电图则是治疗此类疾病的主要依据,具有诊断可靠,方法简便,对病人无损害的优点,在现代医学中,变得越来越重要。常规心电图是病人在静卧情况下由心电图仪记录的心电活动,历时仅为几s~1 m,只能获取少量有关心脏状态的信息,所以在有限时间内即使发生心率失常,被发现的概率也是很低的。因此有必要通过相
[医疗电子]
基于S3C2410设计三导联远程心电监护设计
 1 引 言    随着人们生活水平的提高、生活节奏的加快,心血管疾病的发病率迅速上升,已成为威胁人类身体健康的主要因素之一。而心电图则是治疗此类疾病的主要依据,具有诊断可靠,方法简便,对病人无损害的优点,在现代医学中,变得越来越重要。常规心电图是病人在静卧情况下由心电图仪记录的心电活动,历时仅为几s~1 m,只能获取少量有关心脏状态的信息,所以在有限时间内即使发生心率失常,被发现的概率也是很低的。因此有必要通过相应的监护装置对患者进行长时间的实时监护,记录患者的心电数据。又由于心脏病的发生具有突发性的特点,患者不可能长时间地静卧在医院,但又需实时得到医护人员的监护,所以研发相应的便携式无线心电监护产品就显得更加重要。   
[医疗电子]
基于<font color='red'>S3C2410</font>设计三导联远程心电监护设计
关于ARM9处理器CP15及MCR和MRC指令
在ARM芯片资料中,针对协处理器CP15的介绍非常少,但是CP15又十分重要,例如在使用MMU编写虚拟地址映射表时,最后的一步重要工作就是要将映射表的基地址存储到CP15的寄存器C2中,还有一些控制的TLB,Cache等访问控制权限等等。。。 在基于ARM的嵌入式应用系统中,存储系统通常是通过系统控制协处理器CP15完成的。CP15包含16个32位的寄存器,其编号为0~15。 访问CP15寄存器的指令 MCR ARM寄存器到协处理器寄存器的数据传送 MRC 协处理器寄存器到ARM寄存器的数据传送 MCR指令和MRC指令只能在处理器模式为系统模式时执行,在用户模式下执行MCR指令和MRC指令将会触发未定义指令的异常
[单片机]
关于<font color='red'>ARM9</font>协<font color='red'>处理器</font>CP15及MCR和MRC指令
基于S3C2410的Linux驱动程序开发
1. 开发环境的建立在嵌入式系统中,由于目标机资源有限,因此通常是在主机上编译好驱动程序以及应用程序,然后通过串口、以太网、仿真器或其他通信手段与目标机通信。为了方便进行Linux设备驱动的开发和调试,首先必须建立良好的开发环境,包括交叉编译环境的建立、minicom的设置以及nfs网络文件系统的建立。 (1) 交叉编译环境由于我采用的是ARM9 S3C2410处理器,因此必须在主机上建立针对目标板处理器的GNU工具链,这个过程相当复杂繁琐,开发者可以采用编译好的针对ARM处理器的交叉工具链arm-linux-gcc,只需对其进行安装即可。首先,在/usr/local下建立目录arm,接着把压缩包arm-linux-gc
[单片机]
s3c2410物理地址和虚拟地址空间
下面是物理地址空间(没有包括物理寄存器的物理地址空间)分布图:
[单片机]
<font color='red'>s3c2410</font>物理地址和虚拟地址空间
S3C2410扩展NorFlash
1 、S3C2410的总线操作 首先讲一下处理器存储空间的bank概念。以32位处理器2410为例,其理论上的寻址空间是4GB,但其中有3GB的空间都预留给了处理器内部的 寄存器和其他设备了,留给外部可寻址的空间是1GB,即0x00000000~0x3FFFFFFF,总共应该有30根地址线。这1GB的空间,2410处理器又根据所支持 设备的一些特点,将其等分为8份,每一份空间有128MB,这每一份空间又称为一个bank。为了方便操作,2410处理器给了每个bank一个片选信号(nGCS7~nGCS0)。其实这8个片选信号可以看作是2410处理器内部30根地址线的最高3位所做的地址译码结果。 正是因为这
[单片机]
基于S3C2410的TFT-LCD驱动电路设计
随着电子技术的迅猛发展,具有耗电少、亮度高、体积小等特点的液晶显示器被广泛应用于嵌入式系统中。S3C2410是三星公司开发的一款以ARM920T为核心的16/32位嵌入式处理器。它主要面向手持设备以及高性价比、低功耗的应用。LTS350Q1-PE1是三星电子公司生产的一款非晶硅有源矩阵TFT-LCD,它具有功耗低、亮度高和体积小等特点,目前在嵌入式设备中应用非常广泛。 基于S3C2410,采用LTS350Q1-PE1作为显示设备可以构成一个基于嵌入式平台的液晶显示系统,如图1所示,该系统可以满足大多数嵌入式手持设备的功能要求。但是,要想S3C2410的LCD控制器可以正确有效地控制TFT-LCD,需要设计两者之间的硬
[单片机]
基于<font color='red'>S3C2410</font>的TFT-LCD驱动电路设计
基于S3C2410单片机串口应用程序的开发
  0 引言   ARM ADS全称为ARM Developer suite(ARM开发套件)。是ARM公司推出的ARM系列处理器集成开发工具,使用非常广泛,目前最高版本的是1.2,它取代了早期的ADS1.1和 ADS1.0。它除了可以安装在Windows NT4、Windows98和Windows95操作系统下,还支持Windows XP和Windows Me操作系统。ADS由命令行开发工具、ARM实时库、GuI开发环境(CodeWarrior和AXD)、实用程序和支持软件组成。有了这些部件,用户就可以为ARM系列的RISC处理器编写和调试自己的开发应用程序了。命令行开发工具完成将源代码编译,连接成可执行代码的功能,包手舌:a
[单片机]
基于<font color='red'>S3C2410</font>单片机串口应用程序的开发
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved