您的位置: turnitin查重官网> 工程 >> 电气工程 >> 电气化铁道 >基于ARMLCD图像显示系统设计

基于ARMLCD图像显示系统设计

收藏本文 2024-03-06 点赞:13099 浏览:56809 作者:网友投稿原创标记本站原创

摘要:本文介绍了TFT-LCD的特点。进一步以ARM S3C2410作为处理器控制芯片,根据LCD图形显示设计流程,提出了S3C2410控制寄存器的设置方法。然后阐述了帧缓冲设备的层次结构和数据结构。最后在Linux操作系统下,实现了基于ARM 的BMP及JPEG图像显示。
关键词:嵌入式系统LCD接口帧缓冲图形显示
1007-9416(2012)07-0126-03
Design of LCD Graphic Display System Based on ARM chip
PAN ZongquZHAO YiminLU Hongmin
(School of Electronic Engineering,Xidian University,Xi’an 710071,China)
Abstract:The characteristics of TFT-LCD screens were introduced.Further,the ARM chip S3C2410 was selected as the control processor and the registers setting method of chip S3C2410 was proposed according to the basic design flow of LCD display screen.Then,the hierarchy and data structures of framebuffer device were described.Finally,the graphic display with BMP and JPEG format was realized under Linux operating system based on ARM chip.
Key words: Embedded systemLCD driverFramebufferGraphic display
随着科学技术的发展,LCD屏显示系统越来越重要。实现LCD屏图像显示的一般流程为:首先根据需求确定LCD时序,设置ARM LCD接口控制寄存器;然后定义对应的帧缓冲(FrameBuffer)设备驱动程序;最后编写

源于:查抄袭率怎么发表论文www.udooo.com

相应的用户程序,对帧缓冲设备进行操作,便能实现图像显示。本文基于以上流程,实现了以ARM S3C2410为处理芯片的LCD-TFT屏显示系统。

1、ARM LCD控制寄存器

S3C2410内部集成了LCD屏控制器,S3C2410芯片TFT-LCD屏控制器支持单色、4级灰度和256色的调色板显示模式;支持64K和16M色非调色板显示模式;支持分辨率为640*480、320*240及其它规格的LCD屏。S3C2410 LCD控制器结构图如图1所示。其中VD[23:0]是LCD图片像素数据输出总线,对于24位像素三基色总线分配为B:G:R=8:8:8,其中B在最高8位,R在最低8位。VSYNC(VFRAME)为帧同步信号;HSYNC(VLINE)为行同步信号;VCLK为像数时钟信号;VDEN(VM)为数据有效标志信号。根据控制LCD屏的参数配置S3C2410的LCDCON1~LCDCON5寄存器,TIMEGEN和LPC3600就会产生LCD屏驱动器所需要的全部控制信号,其中VSYHNC、HSYHNC信号由LCDCON2和LCDCON5寄存器设定;VCLK信号由LCDCON1寄存器的CLKVAL位设定;帧频率VSYHNC信号由寄存器器LCDCON1、LCDCON2、LCDCON3、LCDCON4中的参数设定。帧频计算公式为:Frame Rate=1/ [{(VSPW+1)+(VBPD+1)+(LINEVAL+1)+(VFPD+1)}*{(HSPW+1)+(HBPD+1)+(HFPD+1)+(HOZVAL+1)}*{2*(CLKVAL+1)/(HCLK)}]。

2、TFT屏时序分析

TFT屏控制时序[3]如图2所示。帧同步信号VSYNC的每个上升沿触发一帧图像数据,每个帧同步信号时间内完成全部行数据扫描,行扫描模式有单行扫描和双行扫描等模式。行同步信号HSYNC的每个上升沿触发一行数据扫描。行扫描的每个脉冲时间内由VCLK信号上升沿锁存像素数据。VDEN信号作为图像数据的有效信号,并且每帧和每行的扫描开始和结束需要一定的回扫时间。
本设计采用的LCD屏型号为三星LTV350QV3.5寸TFT真彩LCD屏。其分辨率为240*RGB*320;显示颜色为262K。LTV350QV控制时序如图3所示。
图3的VBP、VLW、VFP、HBP、HLW、HFP信号是LTV350QV手册中的术语,对应于图2中的VBPD、VSPW、VFPD、HBPD、HSPW、HFPD信号。根据图2和图3控制时序图的对比,非常方便地计算出控制LCD屏的8个重要参数值:VBP=(VBPD+1)+ (VSPW+1)=0x0A,=>VBPD=0x06,0x0a为估值;VLW= VSPW+1=0x03,=>VSPW=0x02,垂直同步宽度图中为2H,本文取为3;VFP=VFPD+1=0x04,=>VFPD=0x03,图中为3H,本文取为4;HBP=(HBPD+1)+(HS PW+1)=0x21,=>HBPD=0x0D;HLW=(HS PW+1)=0x13,=>HSPW=0x12,由图知HLW=19clk;HFP=HFPD+1=0x04,=>HFPD=0x03;LINVAL+1=320,=>LINVAL=319;HOZVAL+1=240,=>HOZVAL=239。根据以上参数配置LCDCON1~LCDCON5等寄存器各位的数值。其中LINVAL和HOZVAL信号直接和LCD屏的水平分辨率及垂直分辨率有关,其它的参数一定以相应的LCD屏datasheet为参考数据为标准,不能偏差太大。

3、Linux帧缓冲(FrameBuffer)

Linux内核工作在保护模式下,用户进程无法直接实现写屏,因而linux操作系统通过FrameBuffer设备实现仿显卡的功能[4],将FrameBuffer看作一个显存空间,映射到进程地址空间,对进程空间进行写操作就能实现LCD屏内容显示。
FrameBuffer使用了分层结构,fbmem.c处于FrameBuffer设备驱动的核心位置,为FrameBuffer设备驱动提供了通用程序接口。它不仅为上层应用程序提供系统调用接口,比如fb_open()、fb_wri

源于:标准论文格式www.udooo.com

te()等常用函数,而且为下一层的LCD屏提供硬件驱动接口,比如s3c2410fb_info驱动设备。
fb_info结构体是FrameBuffer设备最重要的结构体,它为FrameBuffer设备的驱动层提供接口,包含底层函数并且记录设备状态数据,每个FrameBuffer设备都与一个fb_info结构体相对应。fb_info结构体的主要成员结构体有node、fb_var_screeninfo结构体、fb_fix_screeninfo结构体、fb_ops结构体等,用来记录设备号、显示控制器参数,包括屏幕分辨率和每个像素点的比特数、屏幕行数、列数、像素字节、幕缓冲区的物理地址和大小等信息。
fb_ops结构体为底层设备驱动的一个接口,在编写字符驱动的时候,需要填写file_operations结构体,并通过register_ chrdev()函数,通知Linux内核如何操控驱动。编写FrameBuffer的时候,需要填写自己的fb_ops结构体,这个fb_ops也就相当于通用的file_operations结构体。底层硬件驱动需要用到这些接口来向系统内核注册。
在本设计的LCD设备驱动中,定义了s3c2410fb_info来标识一个LCD设备。变量fb指向fb_info结构体,代表了一个FrameBuffer设备;成员变量dev则指向本设计的LCD设备;变量map_dma,map_cpu,map_size为LCD DMA开辟了内存地址空间;变量screen_cpu,screen_dma指向了LCD控制器映射的内存地址;变量regs标识了LCD控制器的寄存器。作为实际寄存器的映射,这些寄存器和硬件的寄存器要一一对应;s3c2410fb_mach_info成员域存放了和体系结构相关的一些信息,如时钟、LCD设备的GPIO口等等。
当系统对FrameBuffer驱动进行注册的时候,将驱动的fb_info结构体记录到全局数组registered_fb中,并动态建立设备节点,进行设备的初始化。在完成注册之后,fbmem.c就记录了驱动的fb_info。就实现fbmem.c对全部FrameBuffer驱动的统一处理。当打开FrameBuffer设备,将调用fb_open()等函数,传进来的inode设备号,包括主设备和次设备号。fb_open函数首先通过iminor()函数取得次设备号,然后查全局数组registered_fb,得到设备的fb_info信息。这些信息存放了设备的操作函数集fb_ops,就可以调用具体驱动的fb_open()函数,实现open等操作。

4、BMP和JPEG图形

BMP(全称Bitmap)是常用操作系统中的标准图像文件格式[4]。BMP格式位图文件由位图文件数据结构、位图信息数据结构、颜色表和位图数据四段部分组成。S3C2410 LCD的每个像素点所占的位数为16位,为B:G:R=5:6:5,而从bmp图像得到的R、G、B数据则每个数据占8位,合起来一共24位,因此需要对该R、G、B数据进行移位组合成一个16位的数据。对于与LCD屏的大小不一样的图片,要预先进行图片缩放,缩放算法的基本思想是将图片分成若干个方块,对每个方块中的R、G、B数据进行取平均,得到一个新的R、G、B值,该值就作为该方块在LCD屏幕上的映射。
本设计中BMP或JPEG图片显示主流程图如图3所示。首先,在程序开始前,在nfs/dev目录下创建LCD的设备结点,设备名fb0,设备类型为字符设备,主设备号为29,次设备号为0。程序一开始调用open函数打开设备,然后调用ioctl获取设备相关信息,接下来就是读取图形文件数据,把图像的RGB值映射到显存中。对于JPEG格式的图片,预先经过JPEG解码得到RGB数据。本文用现成JPEG的解码库直接解码。对于bmp格式的图片,直接从文件里面提取其RGB数据。BMP和JPEG图像数据提取流程如图4所示。
5、结语
本文介绍了TFT-LCD屏的基本功能和特点。在Linux操作系统下,阐述了帧缓冲设备驱动程序的显示和读取流程,实现了LCD图像显示。
参考文献
Samsung Electronics S3C2410X User’s Manual Revision

1.2002.

周立功,陈明计.ARM嵌入式Linux系统构建与驱动开发范例.北京:北京航空航天大学出版社,2006.
[3] 刘淼.嵌入式系统接口设计与Linux驱动程序开发.北京:北京航空航天大学出版社,2006.
[4] 冯国进.嵌入式Linux驱动程序设计从入门到精通.北京:清华大学出版社,2008.

copyright 2003-2024 Copyright©2020 Powered by 网络信息技术有限公司 备案号: 粤2017400971号