基于ARM9和Linux的液晶驱动终端设计

发布者:QuantumPulse最新更新时间:2021-04-20 来源: eefocus关键字:ARM9  Linux  液晶驱动终端 手机看文章 扫描二维码
随时随地手机看文章

1 引言


目前.已有的液晶驱动终端主要采用微控制器与前、后台软件结合的方法进行设计,该类终端只能够显示字模方式的图片.该种类型的终端显示数据存放在自带的NANDFlash中, 在人机界面设计过程中对NAND Flash中的数据管理是以扇区为基本操作单元,图片下载需要专用的软件工具完成,增加了界面设计的逻辑复杂性与操作性。这里采用ARM9微控制器与 Linux操作系统结合的方法,设计出一种新型的液晶驱动终端。该终端通过FAT文件系统管理CF卡中数据资源,利用多线程技术实现串口命令解析与图型界面的显示,不仅能够显示字模与图片等数据资源,而且利用该设计方法可以实现调用MiniGUI图型库等资源,适用于工业测控、智能仪表等领域的人机界面设计。


2 系统组成及工作原理


系统主要有ARM9微控制器、存储单元、LCD控制器、CF卡接口与RS422通信接口组成,系统组成框图如图1所示。工作流程:系统上电后,ARM9微控制器从NOR Flash中读取、解压Linux内核与Ramdisk根文件系统到SDRAM中,律压完成后,启动Linux内核并挂载根文件系统;当软件环境初始化完成后启动应用程序,开始接收串口命令,应用程序接收到有效的串口命令后,图形界面数据通过Fmmebuffer接口传送给LCD控制器。


液晶驱动终端


3 系统主要硬件模块设计


3.1 ARM9微控制器


系统采用ATMEL公司的AT91RM9200作为MCU,该处理器基于ARM920T内核,工作主频为180MHz,性能高达200MVVs。AT91RM9200包括一个高速片上SRAM工作区及一个低等待时间的外部总线接口(EBI),完成片外存储器和内部存储器映


射外设配置的无缝连接。EBI中设计专用电路以便SmartMedia、ComDact Flash及NAND F1ash连接。系统使用一片MT公司的28F128J3型16 MB NOR Flash,用于存储Linux内核与根文件系统,使用2片HY57V281620来组成32位SDRAM接口。


3.2 液晶驱动接口


系统选用EPSON公司的显示控制器件S1D13506用于控制LCD的图像数据显示。S1D13506可与多种CPU总线兼容,支持最高为 16位数据宽度的LCD接口.可以在TFTLCD、CRT最高显示64 K颜色。它配置一个16位内存接口,支持最高2 MB的EDO-DRAM。系统中将S1D13506连接在AT91RM9200的BANK 3,数据总线宽度为16位.地址线A21与S1D13506M/R引脚相连,用于选择访问寄存器与显存。AT91RM9200访问S1D13506显存起始地址为0x30200000.寄存器起始地址为0x30000000。使用了GM71V18163型2MBDRAM作为显示存储,AT91RM9200 通过访问S1D13506数据地址空间,实现对DRAM的数据存储操作,使用50 MHz的有源晶振作为DRAM的总线时钟,25 MHz有源晶振作为LCD的像素时钟信号,支持640x480 60 HzTFT LCD显示,LCD行、场同步信号由S1D13506内部通过对25 MHz像素时钟分频得出。LCD显示控制硬件接口电路如图2所示。


LCD显示


3.3 CF卡存储接口


在图形界面的设计中需要运用到位图、字库等数据资源,系统通过FAT文件系统管理CF中数据,并且通过PC机将数据直接拷贝至CF卡。AT91RM9200与CF卡硬件接口连接如图3所示。


硬件接口


4 软件设计


4.1 整体软件架构


系统软件可以使用Linux、VxWorks等操作系统,也可使用从直接操作低层硬件的前、后台软件。使用前、后台方式的软件虽然能够实现对硬件的充分利用,但使用操作系统增强了系统的可维护性与扩展性。系统在运行和使用过程中需要管理CF卡中的数据以及应用程序需要多线程支持,众多操作系统中,开源的Linux操作系统具有较为完善的文件系统与网络协议族,并且能较好的支持多线程程序,可满足设计需求。该系统使用的Linux内核版本为 2.4.2l,交叉编译工具链为ARM-Linux-cross-2.95.3。系统软件架构如图4所示。系统中,无论应用程序调用POSIX接口直接控制LCD显示还是通过MiniGUI间接控制LCD,最终都要调用相应的液晶控制器驱动接口函数,因此如何设计出一个S1D13506特殊硬件的驱动程序是整个软件设计的重点。


4.2 Framebuffer驱动的实现


Framebuffer是Linux内核中的一种驱动程序接口.这种接El将显示设备抽象为帧缓冲区。在应用程序中.将其映射到进程地址空间开辟的存储区域中,通过对存储区域进行的数据读写操作可以直接的反映在LCD上。在Linux2.4版本的内核中,Framebuffer被抽象为 linux\drivers\vide0下的fbcon.c文件,其主要依靠fb_info、fb_var_screeninfo、 fb_fix_screeninfo3个数据结构,这些结构定义在include/Linux/fb.h程序内。S1D13506基于 Framebuffer的设备驱动程序主要完成AT91RM9200 EBI总线的配置工作、S1D13506内部寄存器的初始化及Frambuffer中预定义的数据结构的填充。系统中使用的驱动程序是对EPSON公司 S1D13xxx系列显示控制器件Linux驱动程序修改完成。其初始化函数示意性代码如下:


int sldl3506fb_init()


{


init_9200_bank(); //初使化AT9lRM9200EBI总线


fb_info.RegAddr=(unsigned char*)ioremap_nocache(Ox300000000,0x200000);


fb_jnfo.VmemAddr=(unsigned char*)ioremap_nocache(0x30200000,Ox200000);


//将S1D13506的寄存器与显示存储的线性地址空间保存到显卡状态结构体


setsIdl3506_reg();//配置S1D13506显卡寄存器,并填充显卡状态数据结构


register_framebuffer(&fb_info.gen.info);||注豫framebuffer,初始化完成


}


将驱动文件添加至Linux根目录下的drivers\vide0目录中,并在当前目录下makefile文件中添加obi一$(CONFIG FBS1D13506)+=sldl3506fb.O,在Config.ini文件中添加boolSldl3506‘CONFIG_FB_EPSON,在 Linux移植过程中可将驱动程序静态编译到内核中。若要使MiniGUl支持Frame-buffer,需将MiniGUI.efg文件中GAL引擎设为Framebuffer,如gal_engine=fbcon


4.3 应用程序


在应用程序设计中,使用多线程可更好的协调串口接收、图像显示、数据存储以及超时处理等操作。终端中基于POSIX的应用程序由图形显示与串口命令解析组成,由于Linux操作系统中不同的线程之间可通过全局变量传递参数,应用程序中使用了一个全局的循环FIFO作为两个线程之间的命令缓冲区,采用两个静态数据缓冲区用于存放串口传来的图像数据资源,数据缓冲区大小与LCD分辨率和像素深度有关。命令循环FIFO管理结构如下所示。


系统软件架构


系统中,基于Framebuffer的设备被映射为/dev/fb0文件,应用程序启动后,首先调用open()函数打开设备,然后调用 mmap()函数将显存影射到用户空间开辟的数据缓冲区内,初始化命令缓冲队列后,启动串口命令接收,接收到有效的串口命令后则执行相应的显示操作。


5 结语


目前,该终端可成功驱动SHARP LQ035Q3DG01、LQl04-V1DG21等多种分辨率18 bit接口LCD,并在某纺织厂的细纱机车速监控仪中得到应用。使用该终端可降低人机界面的设计难度,提高仪器仪表的开发效率,并且可进一步扩展网络视频播放及网络命令接口等功能,具有良好的市场前景和使用价值。


关键字:ARM9  Linux  液晶驱动终端 引用地址:基于ARM9和Linux的液晶驱动终端设计

上一篇:MCU在运行到main()之前都干了什么
下一篇:基于ARM9 的嵌入式多串口服务器设计

推荐阅读最新更新时间:2024-11-10 12:59

OK6410A 开发板 (八) 36 linux-5.11 OK6410A 内存管理第四阶段
D mm_init- mem_init返回 - mm_init- kmem_cache_init返回 ----此时slab建立,开启了基于 buddy内存管理器时代 的 slab内存管理器时代 kmem_cache_init 此过程以 slab 为基础,通过slab 的api kmem_cache_create , 创建 很多个 slab 假设这么多个slab 为 一个集合A 这么多slab 就是给用户用的,然后 这么多slab 的 alloc 和 free api 是什么呢? 针对某一个 slab, slab 提供了 kmem_cache_alloc 和 kmem_cache_free 那么
[单片机]
从12大创新看Linux如何改变世界(一)
1、安卓手机和平板电脑的源头就是Linux。   2、你的数字录影机TiVo由Linux驱动!   3、Linux驱动着全球绝大部分超级计算机。   4、Linux软件操控着日本的高速铁路。
[模拟电子]
从12大创新看<font color='red'>Linux</font>如何改变世界(一)
OK6410A 开发板 (八) 19 linux-5.11 OK6410A start_kernel 功能角度 第三阶段之init进程
arch_call_rest_init rest_init pid = kernel_thread(kernel_init, NULL, CLONE_FS); pid = kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES); cpu_startup_entry(CPUHP_ONLINE); 内核进程1的创建过程 arm linux 内核源码剖析.pdf P407 内核进程1开始运行的时刻 kthreadd - schedule - __schedule - context_switch 此函数执行后, kernel_init 开始运行 内核进程1
[单片机]
国产开源操作系统 OpenCloudOS 已支持 Linux 原生版微信
6 月 17 日消息,OpenCloudOS 是一个开源中立的国产操作系统社区,经过数月的开发与测试,OpenCloudOS 社区今日官宣与微信团队实现了 OpenCloudOS 与 Linux 原生版微信的适配支持。 据官方介绍,OpenCloudOS 团队与微信开发团队、微信安全团队展开了详细的沟通交流,了解到微信在适配 Linux 系统方面所存在的一些具有挑战性的难点。 以 RPM 打包为例,在此之前,微信仅仅是针对 Debian 系操作系统开展过适配方面的工作。而在本次开发者当中,OpenCloudOS 社区与微信团队配合,为其提供 RPM 打包的解决方案,从而使得在今后能够以流水线的方式来进行 RPM 包的生产工作。
[嵌入式]
国产开源操作系统 OpenCloudOS 已支持 <font color='red'>Linux</font> 原生版微信
手把手教你学linux驱动开发 OK6410系列之01---模块编程
一、实验环境 开发机环境 操作系统:ubuntu 9.10 交叉编译环境:arm-linux-gcc 4.2.2 ,安装位置 /usr/local/arm/4.3.2/ 6410板子内核源码路径:/work/linux-2.6.36.2-v1.05/ 目标板环境:OK6410-A linux2.6.36 二、实验原理 模块时在内核空间运行的,模块中不能使用glibc库中的函数。 模块可以动态的装载到内核中。 三、实验步骤 注意:最好使用root用户进行以下实验,否则需要利用sudo 1、验证交叉编译
[单片机]
手把手教你学<font color='red'>linux</font><font color='red'>驱动</font>开发 OK6410系列之01---模块编程
微软:Windows 10 S笔记本无法运行Linux系统
微软高级项目经理里奇·特纳(Rich Turner)近期表示,Windows 10 S笔记本将无法运行Linux系统。下面就随嵌入式小编一起来了解一下相关内容吧。 微软:Windows 10 S笔记本无法运行Linux系统 微软于5月初发布了Windows 10 S系统,该系统只能安装来自Windows Store应用商店的应用,同时只能使用微软Edge浏览器。微软售价1000美元的Surface Laptop搭载了Windows 10 S系统。该系统也将被用在售价低至189美元的的第三方Windows笔记本中,挑战谷歌Chromebook系列产品。 微软随后又宣布,Windows Store将提供常见的Linux版本,例
[嵌入式]
浅谈Android软硬件巧妙整合的开发技巧
Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。目前,最新版本为Android 2.4 Gingerbread和Android 3.0 Honeycomb。 Android是基于Linux内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统。早期由原名为“Android”的公司开发,谷歌在2005年收购“Android.Inc”后,继续进行对Android系统开发运营,它采用了软件堆层(software stack,又名软件
[嵌入式]
基于ARM的Linux系统移植的方法
Linux具有源代码开放、效率高、可裁剪等优点,在嵌入式系统的开发中具有广泛的应用。文章介绍了嵌入式Linux操作系统、移植目标平台SBC2410及Linux内核源代码的目录结构,分析了Linux移植到SBC2410平台的实现过程,阐述了Linux内核、u-boot的裁剪和编译以及根文件系统的制作过程,最后在SBC2410平台上成功移植了嵌入式Linux系统。 嵌入式系统是一个专用的计算机系统。该系统以计算机技术为基础,软硬件可裁减,但对功能、可靠性、成本等都有严格的要求。今天,一些专用系统需要处理大量的信息,由于传统的计算机系统很难实现硬件可裁减,因而已经不能满足专用系统的需要。伴随着我国汽车、家电等产业的快速发展,
[单片机]
基于ARM的<font color='red'>Linux</font>系统移植的方法
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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