历史上的今天
返回首页

历史上的今天

今天是:2025年02月28日(星期五)

正在发生

2021年02月28日 | 基于ARM与FPGA的LCD控制器系统设计

2021-02-28 来源:eefocus

随着显示屏技术的不断发展,真彩液晶显示屏以其高分辨率、高对比度及高清晰度等优势逐渐在嵌入式显示系统中占据重要地位。目前,基于嵌入式平台的LCD显控技术的实现主要有两种方式:ARM内嵌LCD控制器和独立的控制器件。但是这两种实现方式都存在着不足之处,内嵌控制器的使用可能增大处理器的负担和限制显示帧率,而外部控制器件不仅成本高,而且专用性比较强,很难适应不同类型的液晶屏。


据此存在的问题,这里提出一种基于ARM与FPGA的LCD控制器设计方案,该设计方案一方面能够通过操作Linux OS下的Framebuffer设备提高显存的写入速率及减轻处理器的负担,另一方面用FPGA来实现LCD控制器的设计,开发周期短、功耗低,同时具有灵活的移植性,可应用于不同中小尺寸的液晶显示屏。


1 系统组成及工作原理


系统主要有微控制器、FPGA(LCD控制器)、存储单元以及外设接口组成,系统组成框图如图1所示。



系统的工作流程:在FPGA内部的时序发生电路所产生的时序控制信号作用下,LCD控制器通过Framebuffer接口从微控制器读出显示所需的数据存入显示缓存SRAM中。同时LCD显示屏从显存SRAM中读取显示数据,并通过数据格式转换电路直接将数据信息实时显示。


2 系统硬件设计


2.1 LCD控制器


LCD控制器是基于FPGA实现的。本方案采用Altera公司的Cvclone(飓风)系列EPlC6Q240。FPGA具有高速的数据传输I/O接口,可实现高速的显存读取速率,大大提高LCD显示的帧率。而同时FPGA是可编程逻辑器件,可实现复杂的逻辑运算及提供复杂的控制时序。LCD显示屏采用LQ035Q3DG01型的TFT-LCD液晶显示屏,分辨率为320×240,图像信号为RGB格式。


由于SRAM有较高的读写速度,该设计方案的显示缓存采用1片IS61LV51216AL型SRAM,其容量为512 KB,读写速度为10ns左右。而显示一帧图像的大小为125 KB(320x240x2/l024),FPGA对显存的读写速度约为200 ns,因此满足系统要求。图2为LCD控制器电路连接图。



2.2 ARM9微控制器


该系统设计的主控单元采用ATMEL公司的AT9lRM9200(简称9200)作为MCU,该处理器是基于ARM920T内核,工作主频为180 MHz。性能可达到200 MI/s,系统采用开源的LINUX OS。但是ARM9作为系统的控制终端,需要完成信息采集、处理以及与外部通信等多项工作,而LCD控制器如果也要从内存中读出数据显示,这就会造成处理器负担,从而降低显示缓存读入数据的速率,影响LCD的实时显示。因此这里提出一种基于LINUX 0S下的Framebuffer接口的应用方法,大大提升显存读入数据的速率,从而提升整个显示系统的实时性。图3为AT91RM9200接口电路连接。



3 系统软件设计


系统的软件设计主要分为基于FPGA的LCD控制器设计与LINUX OS下Framebuffer驱动程序设计2部分。


3.1 LCD控制器设计


3.1.1 LCD控制器组成


该设计方案的LCD控制器主要由缓存读写、MCU接口及LCD时序控制等模块组成,具体组成如图4所示。



3.1.2 LCD控制器设计原理


由TFT-LCD液晶屏显示原理可知,显示所需的主要控制信号有像素时钟信号、行/场同步信号以及使能信号。该方案的显示屏分辨率为320x240,要求设计液晶显示屏的刷新频率为60 Hz,即场同步信号(VSYNC)为60Hz,刷新一屏所需时间为1/60 s,而一场则由240个行同步信号组成,那么一个行同步信号的周期为1/(60x240)s,即可得行同步信号(HSYNC)为15 kHz。同理可得像素时钟信号(CK)为5MHz。


采用FPGA内置的锁相环IP模块(PLL)将FPGA 50 MHz时钟信号F_CLK 10分频为5 MHz的像素时钟信号。应用状态机方法,用Verilog硬件描述语言设计时序控制模块,它为LCD提供满足时序要求的控制信号VSYNC、HSYNC以及ENAB。设计完成后在QuatuslI环境下完成时序仿真,得到的仿真结果满足时序要求,仿真图如图5所示。



SRAM为显存模块,由图2可知LCD控制器与微控制器之间的数据传输是在ARM的时钟控制下读入,而同时LCD屏显则是在像素时钟信号CK的控制下从SRAM中读取数据。针对该异时钟域之间数据的传输问题本方案采用FPGA设计实现异步FIFO来完成。


3.2 Framebuffer驱动设计


Framebuffer是Linux内核中的一种驱动程序接


口,该接口将显示设备映射为帧缓冲区。平台使用Linux2.6.25内核。在Linux2.6内核当中,通常采用分层的驱动设计框架。对设备进行分层和分类管理,驱动底层为总线驱动,上层为具体设备驱动。在Framebuffer驱动程序中,其软件设计流程为:首先需要针对该具体的设备和硬件连接注册总线类型及申请系统总线资源;其次,将具体设备驱动程序注册进入总线链表,Linux内核根据设备驱动程序中提供的探测函数检测总线设备类型;最后在驱动探测函数中实现具体设备类型的注册。以下为其具体的实现过程。


1)资源申请 系统中,9200通过外部总线接口的BANK7与FPGA FIFO接口连接,采用16位静态总线方式对FIFO数据进行写入操作。根据驱动设计框架,驱动程序设计的第一步需要通过系统调用platform_device_register函数申请总线资源,示意代码如下:



2)驱动注册 在具体设备驱动中,通过使用module_init宏与module_exit定义驱动模块的加载与卸载方法,在模块注册函数中使用plat-form_driver_register函数将具体设备的platform_driver结构体注册进入系统总线链表,platform_driver中为总线提供具体设备的probe与remove等操作方法,其示意代码如下:



3)Framebuffer设备注册 在Linux中,通过fb_info结构体对帧缓冲设备信息进行描述。在fb_info中,较为重要的结构有fb_var_scree-ninfo、fb_var_screeninfo、fb_ops。其中,fb_var_screeninfo记录用户可修改的显示控制器参数,包括屏幕分辨率;fb_fix_screeninfo记录用户不能修改的显示控制器的参数,如屏幕缓冲区的物理地址等;fb_ops记录了具体显示设备IO操作的实现方法。驱动通过register_-framebuffer函数将fb_info记录的显示设备信息注册进Framebuffer设备链表。


在Linux文件系统中,Framebuffer设备的主设备号为29,次设备号为帧缓冲序号。Framebuffer设备注册后通过mknod指令在系统dev目录下创建Framebuffer设备文件节点,应用层程序可通过Framebuffer设备文件实现Framebuffer设备的访问和操作。


4 结束语


该设计方案的LCD控制器达到实时性及显示帧率的要求,每秒显示至少25帧。基于FPGA设计的LCD控制器技术具有应用广泛、移植性强、开发周期短以及成本低等优点,可以适用于众多的需要LCD液晶显示的系统或场合。


推荐阅读

史海拾趣

Digilent公司的发展小趣事

DIALIGHT在工业LED照明领域取得了显著成就。公司专注于为工业应用设计集成系统,以减少安装和维护的复杂性,并确保产品在恶劣条件下持续稳定运行。此外,DIALIGHT的LED产品旨在提供优越的运行性能、可靠性和耐久性,帮助客户降低能源成本、维护成本和碳足迹,同时提高设施的安全性和生产力。

DFRobot公司的发展小趣事

为了进一步提升品牌影响力和市场竞争力,DFRobot积极寻求国际合作机会。他们与国际知名的开源硬件品牌建立了合作关系,共同推广开源硬件和机器人技术。同时,DFRobot还积极参加各类国际展览和论坛活动,展示公司的最新产品和技术成果。这些国际合作和交流活动不仅提升了DFRobot的品牌知名度,也促进了公司与国际同行的交流与合作。

Harwin公司的发展小趣事

Harbour Industries成立于1965年,起初主要专注于电缆的生产与销售。在20世纪60年代末和70年代初期,随着全球航空航天市场的迅速增长,Harbour敏锐地捕捉到了这一机遇。为了服务这一市场,公司进行了大规模的工厂扩建,并引入了先进的生产设备和技术。这一举措不仅提升了公司的产能,还确保了产品质量能够满足航空领域的高标准。通过不懈努力,Harbour逐渐在航空电缆市场中占据了一席之地。

BOPLA公司的发展小趣事

BOPLA公司成立于XXXX年,初期主要致力于电子开关、熔断器等基础电子元件的研发与生产。创始人凭借对电子行业的深厚理解和敏锐的市场洞察力,带领公司逐步在竞争激烈的市场中站稳脚跟。通过不断的技术创新和品质提升,BOPLA的产品逐渐获得了客户的认可,为公司后续的发展奠定了坚实的基础。

安普康(AMPCOM)公司的发展小趣事

安普康的成功离不开其独特的企业文化和优秀的团队。公司注重员工的培训和发展,为员工提供广阔的职业发展空间和良好的福利待遇。同时,公司还积极营造积极向上、团结协作的工作氛围,使得员工能够充分发挥自己的才能和潜力。这种企业文化不仅吸引了大量优秀人才加入安普康,也使得公司在面对市场挑战时能够保持强大的凝聚力和战斗力。


请注意,这些故事是基于已知信息创作的,并不代表安普康公司的真实发展历程。如需了解安普康公司的真实故事,建议查阅公司官方发布的资料或相关新闻报道。

Global Connector Technology公司的发展小趣事
电源系统中的电磁干扰或电压波动可能影响继电器的正常工作。

问答坊 | AI 解惑

FPGA与CPLD行业用途调查

大家把FPGA和CPLD用于哪个行业?…

查看全部问答>

零起点学习STM32F107开发第2讲( 视频:STM32固件库介绍及使用MDK创建工程)

废话不多说了,请看下边视频。随后的教程我也尽量以视频的形式给出,敬请关注!$(\'swf_Y5X\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'sr ...…

查看全部问答>

求对txt文件进行删除行操作代码

本人想把一个几万行的txt文件内的,某些行删除,手工太慢。想把带有某些字符(比如一个单词)的行全部删除。操作以后保存退出。 请问用到什么方法?…

查看全部问答>

vc向evc移植的问题,麻烦高手看一下这段代码!!!

    这是一段Vc代码,意思就是说在一个编辑框(IDC_INPUTTEXT)中输入一句话,点击回车发送出去,同时在本地文本框(IDC_SHOWTEXT)显示出来,我想把这段代码移植到evc,编译时没有问题的,可是下载到开发板上在编辑框(IDC_INPUTTEXT)中输 ...…

查看全部问答>

wince bootloader问题

我购买了一块 yc2440的开发板,硬件构成:s3c2440+64M nandflash+64M ram,其他的都不重要了,反正它是用nandflash启动的。我把开发板内存和nandflash都扩容了一倍,成了128M,现在想自己开发一个bootloader,不知如何下手,请各位大侠指点一下。原 ...…

查看全部问答>

喷墨打印机可以加灌普通碳素墨水吗?

请问:喷墨打印机可以加灌普通碳素墨水吗?谢谢! 我的QQ530481621…

查看全部问答>

问哈关于库连接的问题

   在stdafx.h中加入 //{{包含eSuperMap 类库头文件 #include //}}包含eSuperMap 类库头文件 了后 也在tool---Options加了库文件后 还弹出E:\\eSuperMap\\MyeSuperMap_evc4\\MyeSuperMap_evc4\\stdafx.h(31) : fatal error C1083: Cannot ...…

查看全部问答>

调用DLL中的函数写串口的问题

我自己编写了一个DLL,这个DLL中有打开,关闭,和读写串口的一些函数。现在,我在外面的一个测试程序中调用DLL中的写串口函数的时候,第一次写串口是OK的,但是为什么第二次写的时候就出错了,返回实际写入的字节数为0。DLL中写串口的函数中就一句W ...…

查看全部问答>

寻找SAMSUNG S3C2440开发板

寻找SAMSUNG S3C2440开发板,要求支持wince5.0系统,最好在深圳附近,能提供面对面的技术支持服务。…

查看全部问答>