《3150.《基于LCD模拟三角形运动设计》.doc》由会员分享,可在线阅读,更多相关《3150.《基于LCD模拟三角形运动设计》.doc(17页珍藏版)》请在三一办公上搜索。
1、1 引 言通常我们常用的LCD显示模块,有两种,一是带有驱动电路的LCD显示模块,一是不带驱动电路的LCD显示屏。大部分ARM处理器中都集成了LCD的控制器,所以,针对ARM芯片,一般不使用带驱动电路的LCD显示模块。S3C44B0X微处理器是三星公司专为手持设备和一般应用提供的高性价比和高性能的微控制器解决方案。它使用ARM7TDMI核,工作在66MHz,集成了LCD控制器等外围器件。它的LCD控制器具有通用性,能与大多数LCD显示模块接口。接口设计、驱动程序开发都很简单,广泛应用于智能仪表、PDA等的显示部分。本实验实现的是LCD模拟三角形的运动,通过在Main()函数中修改并加入相应的实
2、现代码,绘图API函数在glib.c文件中。ARM7TDMI系统扩充包括thumb协处理器、片上ICE中断调试支持和32位乘法器。S3C44B0X通过在ARM7TDMI内容基础上扩展一系列完整的通用外围器件。其特点如下: 采用ARM7TDMI内核,I/O电压3.3V,内核电压2.5V; 内置锁相环(PLL),系统工作主频66MHZ; 4种工作模式(正常、慢速、闲置和停止),可以实现电源管理以降低系统功耗; 8KB的系统高速缓存(CACHE),极大地提高了系统的运行速度; 支持8个MEMORY BANK,最大外部存储空间达256MB,并支持SDRAM; 内置彩色LCD控制器; 2路异步串口(UA
3、RT); 71个通用I/O口,包括8个外部中断源; 8路10位A/D转换器; 实时时钟(RTC)和看门狗电路(WATCHDOG);1.1 课程设计目的1. 学习LCD与ARM的LCD的控制器的接口原理;2. 掌握内置LCD控制器驱动编写方法;3. 学习调用简单的GUI绘图。1.2 程序开发环境1. EL-ARM-820教学实验箱,PentiumII以上的PC机,仿真器电缆。2. PC操作系统WIN98或WIN2000或WINXP,ARM ADS1.2集成开发环境,H-JTAG调试代理软件。2 ADS集成开发环境介绍ADS全称为ARM Developer Suite,是ARM公司推出的新一代AR
4、M集成开发工具。现在ADS的最新版本是1.2,它取代了早期的ADS1.1和ADS1.0。在ADS工具诞生之前,一直使用的是ARM SDT工具,目前ARM SDT工具已经慢慢被淘汰。ADS除了可以安装在Windows NT4、Windows 2000、Windows 98和Windows 95操作系统下,还支持Windows XP和Windows Me操作系统。2.1 ADS软件组成ADS由命令行开发工具、GUI(Graphics User Interface,图形用户界面)开发环境(Code Warrior和AXD)、实用程序和支持软件组成。有了这些部件,用户就可以为ARM系列的RISC处理器
5、编写和调试自己的开发应用程序了。下面将分别介绍这4个组成部分。1命令行开发工具命令行开发工具在实际应用中相对比较广泛,用它最大的好处就是可以将许多编译命令写在一个脚本文件中,然后只执行该脚本文件就可以让工具自动完成所有编译的工作。2GUI开发环境ADS GUI开发环境包含Code Warrior和AXD两种,其中Code Warrior是集成开发工具,而AXD是调试工具。3实用程序ADS除了提供上述工具外,它还提供以下的实用工具来配合前面介绍的命令行开发工具的 使用。(1)Flash downloader是用于把二进制映像文件下载到ARM开发板上的Flash存储器的工具。(2)fromELF是
6、ARM映像文件转换工具。该命令将ELF格式的文件作为输入文件,将该格式转换为各种输出格式的文件,包括plain binary(BIN格式映像文件)、Motorola 32-bit S-record format(Motorola 32位S格式映像文件)、Intel Hex 32 format(Intel 32位格式映像文件)和Verilog-like hex format(Verilog 十六进制文件)。fromELF命令也能够为输入映像文件产生文本信息,例如代码和数据长度。(3)armar,ARM库函数生成器将一系列ELF格式的目标文件以库函数的形式集合在一起,用户可以把一个库传递给一个连接
7、器以代替几个ELF文件。4支持的软件ADS为用户提供ARMulator软件,使用户可以在软件仿真的环境下或者在基于ARM的硬件环境调试用户应用程序。ARMulator是一个ARM指令集仿真器,集成在ARM的调试器AXD中,它提供对ARM处理器的指令集的仿真,为ARM和Thumb提供精确的模拟。用户可以在硬件尚未做好的情况下,开发程序代码。2.2 ADS调试器调试器本身是一个软件,用户通过这个软件使用debug agent可以对包含有调试信息的,正在运行的可执行代码进行比如变量的查看,断点的控制等调试操作。ADS中包含有3个调试器:AXD(ARM eXtended Debugger):ARM扩展
8、调试器;armsd(ARM Symbolic Debugger):ARM符号调试器;与老版本兼容的Windows或Unix下的ARM调试工具,ADW/ADU(Application Debugger Windows/Unix)。下面对在调试映像文件中所涉及到的一些术语做一个简单的介绍。Debug target在软件开发的最初阶段,可能还没有具体的硬件设备。如果要测试所开发的软件是否达到了预期的效果,这可以由软件仿真来完成。即使调试器和要测试的软件运行在同一台PC上,也可以把目标当作一个独立的硬件来看待。当然,也可以搭建一个PCB板,这个板上可以包含一个或多个处理器,在这个板上可以运行和调试应用
9、软件。只有当通过硬件或者是软件仿真所得到的结果达到了预期的效果,才算是完成了应用程序的编写工作。调试器能够发送以下指令:1. 装载映像文件到目标内存;2. 启动或停止程序的执行;3. 显示内存,寄存器或变量的值;4. 允许用户改变存储的变量值。3 内置LCD控制器介绍3.1 概述S3C44B0X内置的LCD控制器的作用是将显示缓存(在系统存储器中)的LCD数据传输到外部LCD驱动器,并产生必须的LCD控制信号。它支持灰度LCD和彩色LCD。在灰度LCD上,使用基于时间抖动算法(time-basedditheringalgorithm)和FRC(FrameRateControl)方法,可以支持单
10、色、4级灰度和16级灰度模式的灰度LCD。在彩色LCD上,可以支持256种色彩。不同尺寸的LCD具有不同数量的垂直和水平象素、数据接口、数据宽度、接口时间和刷新率。LCD控制器可以进行编程控制相应的寄存器值,以适应不同的LCD显示板。3.2 LCD控制器逻辑框图 图3.1为LCD控制器的逻辑框图。从框图可以看出LCD控制器是用来实现传输显示数据及产生必要的控制信号,如VFRAME、VLINE、VCLK和VM。除了控制信号,还有显示数据的数据端口VD7:0。图3.1 为LCD控制器的逻辑框图LCD控制器包括REGBANK、LCDDMA、VIDPRCS和TIMEGEN。REGBANK有18个可编程
11、寄存器,用于配置LCD控制器。LCDDMA为专用DMA,可以自动地将显示数据从帧内存传送到LCD驱动器中。通过专用DMA,可以实现在不需要CPU介入的情况下显示数据。VIDPRCS从LCDDMA接收数据,将相应格式的数据通过TIMEGEN(包含可编程逻辑),以支持常见的LCD驱动器所需要的不同接口时间和速率的要求。TIMEGEN部分产生VFRAME,VLINE,VCLK和VM等信号。3.3 LCD控制器提供的外部接口信号VFRAME:LCD控制器和驱动器之间的帧同步信号。通知LCD屏新的一帧显示,LCD控制器在一个完整帧显示后发出VFRAME信号。VLINE:LCD控制器和驱动器间同步脉冲信号
12、。LCD驱动器通过它将水平移位寄存器的内容显示到LCD屏上。LCD控制器在一整行数据全部传输到LCD驱动器后发出VLINE信号。VCLK:LCD控制器和驱动器之间的象素时钟信号。VM:LCD驱动器所使用的交流信号。驱动器用VM打开或关闭象素的行和列电压极性。VD3:0:LCD象素数据输出端口。VD7:4:LCD象素数据输出端口。4 LCD控制器的寄存器LCD控制器通过18个可编程寄存器来配置LCD显示模块的尺寸、显示模式、接口数据宽度等。4 .1 LCD控制寄存器一(LCDCON1)LCDCON1所在地址:0x01F00000;属性:R/W;复位值:0x00000000。LCDCON1中各个位
13、的意义见表4.1:表4.1 LCDCON1中各个位的意义4.2 LCD控制寄存器二(LCDCON2)LCDCON2的地址:0x01F00004;属性:R/W;复位值:0x00000000。LCDCON2中各个位的意义见表4.2:表4.2 LCDCON2中各个位的意义4.3 LCD控制寄存器三(LCDCON3)LCDCON3的地址:0x01F00040;属性:R/W;复位值:0x00。LCDCON3中各个位的意义见表4.3:表4.3 LCDCON3中各个位的意义4.4 帧缓冲区开始地址一(LCDSADDR1)LCDSADDR1的地址:0x01F00008;属性:R/W;复位值:0x000000。
14、LCDSADDR1中各个位的意义见表4.4:表4.4 LCDSADDR1中各个位的意义4.5 帧缓冲区开始地址二(LCDSADDR2)LCDSADDR2的地址:0x01F0000C;属性:R/W; 复位值:0x000000。LCDSADDR2中各个位的意义见表4.5:表4.5 LCDSADDR2中各个位的意义用户通过改变LCDBASEU和LCDBASEL的值来滚动屏幕,但在帧结束时,不能改变LCDBASEU和LCDBASEL的值,因为预取下一帧的数据优先于改变帧,如果这时改变帧,预取的数据将无效而且显示不正确。为了检查LINECNT,应当屏蔽中断,否则如果在读LINECNT后,任意中断刚好执行
15、,因为ISR的执行,LINECNT的值可能无效。 缓冲区开始地址三(LCDSADDR3)LCDSADDR3的地址:0x01F00010;属性:R/W;复位值:0x000000。LCDSADDR3中各个位的意义见表6:注:PAGEWIDTH和OFFSIZE必须在ENVID=0时变化。5 内置LCD控制器的应用LCD控制器能与大多数LCD显示模块接口,例如DMF50081,KCS057QV1AJ等。KCS057QV1AJ是由KYOCERA公司生产,具有320 240个象素点、带CFL背光的STN(超扭曲向列)256色LCD显示模块。它不带LCD控制器,很容易与S3C44B0X内置的LCD控制器接口
16、。本节将详述它与LCD控制器的硬件接口连线以及它的驱动程序。LCD控制器与KCS057QV1AJ接口设计KCS057QV1AJ提供的外部接口信号线如下:FRM:驱动器扫描的同步信号线;LOAD:数据锁存信号线;CP:数据移位时钟信号线;DISP:显示控制信号线;D7:0:8根显示数据输入线。在KCS057QV1AJ与LCD控制器之间接线时,KCS057QV1AJ的FRM、LOAD、CP、D7:0分别和LCD控制器的VFRAME、VLINE、VCLK、VD7:0相连。DISP引脚与S3C44B0X的GPIO的GPC15相连,通过GPC15来控制LCD显示模块的打开和关闭。具体接线如图5.1。图5
17、.1 LCD控制器与KCS057QV1AJ接线图KCS057QV1AJ驱动程序开发 驱动程序包括初始化S3C44B0X端口D和端口C的函数,初始化LCD控制器的函数,打开和关闭LCD显示模块的函数,在LCD显示模块上显示条纹的函数,所有的函数都有详细的注释。初始化端口D和端口C函数如下:void Port_Init(void)rPCONC=0x5f55ffff;/GPC15为输出端口,GPC4-GPC7分配给LCD数据线VD7-VD4;rPUPC=0x0;/端口C所有的引脚上拉允许;rPDATC=0x3fff; /端口C所有的引脚初始化为高电平;rPCOND=0xaaaa;/端口D所有的引脚分
18、配给LCD控制器;rPUPD=0x0;/端口D所有的引脚上拉允许;rPDATD=0xff;/端口D所有的引脚初始化为高电平。初始化LCD控制器函数如下:void LCD_Init()int i;U32 LCDBASEU,LCDBASEL,LCDBANK;LCDDisplayOpen(FALSE);/关闭LCD;rLCDCON1=(0);/关闭视频输出;rLCDCON2=(239) (11910) (1522;/设置显示缓冲区首地址在系统存储器中的位置;LCDBASEU=0x0;/设置缓冲区的开始地址;LCDBASEL=LCDBASEU+(160) 240;rLCDSADDR1=(0x327)
19、(LCDBANK21) LCDBASEU; /设置显示模块为彩色模式等;rLCDSADDR2=(029) (021) LCDBASEL;rLCDSADDR3=(320/2) (09);/不使用虚屏;rREDLUT=0xfca86420;/设置红色查表寄存器,与特定的显示要求有关;rGREENLUT=0xfca86420;/设置绿色查表寄存器,与特定的显示要求有关;rBLUELUT=0xfffffa50;/设置兰查表寄存器,与特定的显示要求有关;rLCDCON1=LCDCON1_ENVID 01 02 03 (25)17 (0x38) (0x310) (CLKVAL12);/使能视频输出,8位单
20、扫描方式,设置WDLY,WLH,CLKVAL;for(i=0;i80*240;i+)/显示缓冲区清零。*(pLCDBuffer16+i)=0x0;从图2知,GPC15用来打开关闭LCD。打开和关闭LCD显示模块的函数如下:void LCDDisplayOpen(U8 isOpen)if(isOpen)rPDATC =0x8000;/打开LCDelserPDATC&=0x7fff;/关闭LCD在LCDBANK寄存器中已经定义了显示缓冲区在系统存储器的段首地址为0xc000000,要显示字符、图片只需将字符、图片取模得到的数据送到该缓冲区就可以了。但是要注意,彩色LCD是8位数据表示一个象素。对缓
21、冲区首地址进行如下定义:U32 pLCDBuffer16=(U32*)0xc000000;下面举一个在整个屏上显示明暗相间的条纹的程序,显示明暗条纹函数如下:void LCDstripe ()int i,lcddata;for(i=0;i(320*240)/4;i+) lcddata0=0x0ffff0000; *(pLCDBuffer16+i)=lcddata;/向帧缓冲区送数据,每次4个象素的数据。6 主要功能的设计与实现本实验主要是实现基于LCD模拟三角形的运动,通过在Main()函数中修改并加入相应的实现代码,绘图API函数在glib.c文件中。可以在LCD显示屏上看到一个三角形在屏幕
22、的进行运动,具体的实现代码如下:;* 文件名称 : MAIN.c;* 文件功能 : 所有应用程序的头文件均加在此文件中;* 补充说明 : #include .incconfig.hextern GUI_FONT GUI_Font8x16;extern GUI_FONT CHINESE_FONT12;extern GUI_FONT CHINESE_FONT16;- 函数名称 : Main(void)- 函数说明 : 系统的主程序入口- 输入参数 : 无- 输出参数 : 无void Main(void) Target_Init(); GUI_Init(); Set_Color(GUI_GREEN)
23、; Fill_Rect(0,0,319,239); Delay(1000); Set_Color(GUI_WHITE); Delay(1000); Fill_Rect(0,0,319,239); Set_Color(GUI_BLACK); Delay(1000); Fill_Rect(0,0,319,239); Delay(1000); Set_Color(GUI_YELLOW); Fill_Rect(0,0,319,239); Delay(1000); Set_Color(GUI_BLUE); Fill_Rect(0,0,319,239); Delay(1000); Set_Color(GU
24、I_RED); Draw_Circle(100,100,50); Delay(1000); Draw_Point (100, 200); /绘制点API Delay(1000);Draw_HLine (100, 3, 319); /绘制水平线APIDelay(1000);Draw_VLine (0, 150, 239); /绘制竖直线APIDelay(1000);Draw_Line (0,0,319,239);Delay(1000);Draw_Line (319,0,0,239);Delay(1000); Fill_Circle (80, 180, 40); Delay(1000);Fill_
25、Rect (280, 200, 300, 220); /填充区域API Delay(1000); Set_Font (&GUI_Font8x16); /设定字体类型APISet_Color(GUI_WHITE);Set_BkColor (GUI_BLUE); /设定背景颜色APIFill_Rect(0,0,319,3);Fill_Rect(0,0,3,239);Fill_Rect(316,0,319,239);Fill_Rect(0,236,319,239); Disp_String (this is a demo,130,70); Set_Font (&CHINESE_FONT12); Di
26、sp_String (CN_start这是一个例程CN_end,130,90); Set_Font (&CHINESE_FONT16); Disp_String (CN_start这是一个例程CN_end,130,110); while(1);结束语通过对嵌入式系统将近两个星期的实践学习,我对嵌入式有了进一步的了解。无论是从概念上还是内涵上都达到了一个新的高度。通过学习,我发现随着信息技术的发展,数字化产品空前繁荣。嵌入式软件已经成为数字化产品设计创新和软件增值的关键因素,是未来市场竞争力的重要体现。由于数字化产品具备硬件平台多样性和应用个性化的特点,因此嵌入式软件呈现出一种高度细分的市场格局
27、,国外产品进入也很难垄断整个市场,这为我国的软件产业提供了一个难得的发展机遇。嵌入式支撑软件是嵌入式系统的基础,而与嵌入式操作系统紧密联系的开发调试工具是嵌入式支撑软件的核心,它的集成度和可用性将直接关系到嵌入式系统的开发效率。目前,嵌入式系统工程师队伍迅速扩大,与他们紧密相伴的嵌入式系统开发工具的发展潜力十分巨大。后PC时代的数字化产品要求强大的网络和多媒体处理能力、易用的界面和丰富的应用功能。无线网络通讯技术的迅速发展,使更多的信息设备运用无线通讯技术。同时,Java技术的发展,对开发相关无线通讯软件起到推动作用,因此嵌入式浏览器、嵌入式多媒体套件、嵌入式GUI、嵌入式中文、嵌入式应用套件
28、、嵌入式Java和嵌入式无线通讯软件成为嵌入式支撑软件的基本要素,能够组合应用或作为产品单独销售,其市场十分巨大。另外,嵌入式支撑软件的发展也将带来一个繁荣的服务培训市场。而嵌入式的发展趋势也日趋明朗,以信息家电为代表的互联网时代嵌入式产品,不仅为嵌入式市场展现了美好前景,注入了新的生命;同时也对嵌入式系统技术,特别是软件技术提出新的挑战。这主要包括:支持日趋增长的功能密度、灵活的网络联接、轻便的移动应用和多媒体的信息处理,此外,当然还需对付更加激烈的市场竞争。 可见,嵌入式系统的作用将越来越大,因此,我们更应加紧对它的学习,尽快掌握并将其应用的实际中去!感谢老师的指导和同学的帮助,我才能够按时将设计完成,今后我将继续努力学习嵌入式的课程,为将来打好基础。参考文献 1嵌入式系统的开发设计与开发. 陈连坤. 北京:清华大学出版社,20052嵌入式系统开发设计与应用教程. 田泽. 北京:北京航天航空大学出版社,20043 C语言程序设计M.谭浩强.北京:清华大学出版社,1999,106-141.4 S3C44B0X MICROPROCESSOR Datasheet. Samsung Electronics Aug 2001.5嵌入式系统设计与实例开发.王田苗.北京:清华大学出版社,20026 ARM嵌入式处理器结构与应用基础.马忠梅.北京:北京航空航天大学出版社,2002