




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.中南大学嵌入式课程设计 基于ARM平台的打地鼠游戏 姓名:董嘉伟 学号:0909103303 班级:物联网1002 指导教师:刘连浩 李刚 时间:2013-9-13 目录l 课程设计内容l 课程设计实验环境l 课程设计原理分析l 课程设计开发计划l 课程设计系统设计图l 课程设计关键源码分析l 课程设计成果展示l 课程设计总结l 参考资料l 工程源代码;1、 课程设计内容 本次课程设计基于课程物联网与嵌入式系统的学习,利用现有的硬件知识和计算机软件编程知识从以下三个题目选择一个作为课程设计内容:测频程序、交通灯演示系统、打地鼠游戏,难度依次递增。基于个人实力和兴趣的考虑,我选择了打地鼠游戏作
2、为我的课程设计题目。具体要求如下:l LCD正确显示需求内容l 触摸屏功能正常使用l 基本的打地鼠游戏环节l 打地鼠游戏流畅运行,无显著BUGl 游戏结束后输出统计数据 2、 课程设计实验环境 软件:WindowsXPKeil uVision4.72ARM DeveloperSuite1.2H-JTAGDNW,其中keil编译优化等级为Level0. 硬件:飞凌FL2440开发板,4.3寸(480*272)显示屏、USB-JTAG仿真器 实验室:中南大学-美国德州仪器联合嵌入式实验室 三、课程设计原理分析1、 LCD显示原理分析S3C2440的LCD控制器由由一个逻辑单元组成,它的作用是:把L
3、CD图像数据从一个位于系统内存的videobuffer传送到一个外部的LCD驱动器。LCD控制器使用一个基于时间的像素抖动算法和侦速率控制思想,可以支持单色,2-bitper pixel(4级灰度)或者4-bit-pixel(16级灰度)屏,并且它可以与256色(8BPP)和4096色(12BPP)的彩色STN LCD连接。它支持1BPP,2BPP,4BPP,8BPP的调色板TFT彩色屏并且支持64K色(16BPP)和16M色(24BPP)非调色板真彩显示。LCD控制器是可以编程满足不同的需求,关于水平,垂直方向的像素数目,数据接口的数据线宽度,接口时序和刷新速率。S3C2440 LCD控制器
4、被用来传送视频数据和生成必要的控制信号,比如VFRAME, VLINE,VCLK,VM,等等。除了控制信号外,这S3C2440还有作为视频数据的数据端口,它们是如图15-1所示的VD23:0。LCD控制器由REGBANK,LCDCDMA,VIDPRCS, TIMEGEN,和LPC3600(看15-1LCD控制器方块图)组成。REGBANK由17个可编程的寄存器组和一块256*16的调色板内存组成,它们用来配置LCD控制器的。LCDCDMA是一个专用的DMA,它能自动地把在侦内存中的视频数据传送到LCD驱动器。通过使用这个DMA通道,视频数据在不需要CPU的干预的情况下显示在LCD屏上。VIDP
5、RCS接收来自LCDCDMA的数据,将数据转换为合适的数据格式,比如说4/8位单扫,4位双扫显示模式,然后通过数据端口VD23:0传送视频数据到LCD驱动器。TIMEGEN由可编程的逻辑组成,支持不同的LCD驱动器接口时序和速率的需求。TIMEGEN块可以产生VFRAME,VLINE,VCLK,VM等等。数据流描述如下:LCDCDMA中存在FIFO存储器。当FIFO为空,或者部分为空的时候,LCDCDMA请求从侦存储器中取得数据,是用突发的存储传输模式取得数据的(每一个突发请求,连续的取4个字(16bytes)在总线传输过程中,不允许总线控制权交给另一个总线控制)当传输请求被存储控制器中的总线
6、仲裁器接收了后,将会产生连续的4个字的数据传输从系统内存到内部的FIFO。FIFO的总共大小为28个字,由12个字的FIFOL和16个字的FIFOH分别组成。S3C2440有2个FIFOs支持双扫显示模式。假如是单扫模式,FIFOH将会被用到。16BPP彩色模式:1个像素有16个位(5位红,6位绿,5位蓝)视频数据。但是STN控制器仅仅用到12位色彩数据。这意味着每一个彩色数据的高4位将被使用,作为像素数据(R15:12,G10:7,B4:1)。下面的表显示了在字中的数据格式。2、 触摸屏原理S3C2440A触摸屏控制器触摸屏的外接电路主要就是要控制上下两层导电层的通断情况以及如何取电压,取电
7、压之后还需要将这个模拟量转换成数字量,这部分工作主要是靠S3C2440A芯片中的模数转换器部分来实现的。即触摸屏的功能实现实际上分两部分,分别是触摸屏的外接电路部分和S3C2440A芯片自带的A/D转换控制部分。S3C2440A芯片的A/D转换器有8个输入通道。转换结果为10bit数字,转换的过程是在芯片的内部自动实现的,转换的结果可以直接从寄存器中取值出来,在进行一定的转后就可以得到触摸点的坐标。触摸屏电路部分占用了ADC8个通道中的两个通道作为X、Y两个坐标轴方向的电压输入。触摸屏接口模式1. 一般转换模式:单独的转换模式一般使用来作为通用的ADC转换使用,这种模式可以通过初始化设置寄存器
8、ADCCON,并且读写寄存器ADCDAT0来实现。2. 分别X/Y位置转换模式:触摸屏控制器可以通过X/Y两个转换模式中的一个来完成,X位置模式写X位置转换数据到寄存ADCDAT0,这时触摸屏接口产生中断源到中断控制器。Y位置模式写Y位置转换数据到寄存器ADCDAT1,这时触摸屏接口产生中断源到中断控制器。3. 自动X/Y位置转换模式:自动X/Y位置转换模式的工作方式如下:当触摸屏有触点触发时,触摸屏控制器依次转换X位置和Y位置。在触摸屏控制器写X位置测试数据到寄存器ADCDAT0和写Y位置测试数据到寄存器ADCDAT1后,触摸屏接口产生中断源到中断控制器。4. 等待中断模式:当有触摸笔按下的
9、时候,触摸屏控制器会产生中断信号(INT_TC)。触摸屏控制器在等待模式时必须设置触摸屏接口XP、XM、YP、YM的状态。4、 课程设计开发计划l 9月2日-9月3日:开发板连接测试各项功能是否正常l 9月4日-9月6日:LCD功能开发,实现图片显示l 9月9日-9月10日:触摸屏功能开发,实现点击中断处理函数l 9月11日-9月12日:打地鼠游戏逻辑编写,各功能整合l 9月13日:检查验收五、课程系统设计图6、 课程设计关键源码分析480*272屏输出控制#define VBPD_480_272(3)#define VFPD_480_272(5)#define VSPW_480_272(5)
10、#define HBPD_480_272(33)#define HFPD_480_272(15)#define HSPW_480_272(8)#define LCD_BLANK12#define CLKVAL_TFT_480_272(3)#define ADCPRS 9/YH 0627static void Lcd_Init(U8 size)/标准的LCD初始化函数rGPCUP=0xffffffff; / Disable Pull-up registerrGPCCON=0xaaaa56a9; /Initialize VD7:0,LCDVF2:0,VM,VFRAME,VLINE,VCLK,LEN
11、D rGPDUP=0xffffffff; / Disable Pull-up registerrGPDCON=0xaaaaaaaa; /Initialize VD15:8rLCDCON1=(CLKVAL_TFT_480_272<<8)|(MVAL_USED<<7)|(3<<5)|(12<<1)|0; /比较关键的就是3<<5是将色彩输出模式为16BPP(5:6:5)rLCDCON2=(VBPD_480_272<<24)|(LINEVAL_TFT_480_272<<14)|(VFPD_480_272<<
12、;6)|(VSPW_480_272);rLCDCON3=(HBPD_480_272<<19)|(HOZVAL_TFT_480_272<<8)|(HFPD_480_272);rLCDCON4=(MVAL<<8)|(HSPW_480_272);rLCDCON5=(1<<11)|(1<<9)|(1<<8)|(1<<3)|(BSWP<<1)|(HWSWP);/rLCDCON5=(1<<11)|(0<<9)|(0<<8)|(0<<6)|(BSWP<<
13、1)|(HWSWP);/FRM5:6:5,HSYNC and VSYNC are invertedrLCDSADDR1=(U32)LCD_BUFFER>>22)<<21)|M5D(U32)LCD_BUFFER>>1);rLCDSADDR2=M5D( (U32)LCD_BUFFER+(SCR_XSIZE_480_272*LCD_YSIZE_480_272*2)>>1 );rLCDSADDR3=(SCR_XSIZE_480_272-LCD_XSIZE_480_272)/1)<<11)|(LCD_XSIZE_480_272/1);rLCDI
14、NTMSK|=(3); / MASK LCD Sub InterruptrTPAL=0; / Disable Temp Palettestatic void PutPixel(U32 x,U32 y, U32 c )/LCDBUFFER区控制,用以输出LCD屏上像素点,为加快编译速度,直接操纵开发板固化内存地址0x30100000,这里也是通过查阅参考手册知道该地址起为LCD数据存取区域,跟显示屏分辨率有关系if ( (x < 480) && (y < 272) )(*(volatile unsigned char*)(0x30100000 + (y*480 + x
15、)*2) = c & 0x0ff; (*(volatile unsigned char*)(0x30100000 + (y*480 + x)*2 + 1) = c >> 8;static void Paint_Bmp(int x0,int y0,int h,int l,unsigned char bmp)/该函数用以读取图片信息并输出到LCD屏指定位置,其中bmp为图片转化为的16进制数组,x0,y0分别为图片起始坐标,h、l分别为图片宽度和高度int x,y;U32 c;int p = 0; for( y = 0 ; y < l ; y+ ) for( x = 0
16、; x < h ; x+ ) c = bmpp+1 | (bmpp<<8) ;/这里由于色彩显示为16BPP,所以需要16位,bmp为16进制数据,单字节8位,故需要移位8,高位在前。if ( ( (x0+x) < SCR_XSIZE_480_272) && ( (y0+y) < SCR_YSIZE_480_272) )PutPixel(x+x0,y+y0,c) ; p = p + 2 ; void touchinit(void)/触摸屏功能初始化函数rADCDLY=50000; /Normal conversion mode delay abou
17、t (1/3.6864M)*50000=13.56ms rADCCON=(1<<14)+(ADCPRS<<6); /ADCPRS En, ADCPRS Value rADCTSC=0xd3; /Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En pISR_ADC = (int)AdcTsAuto2;rINTMSK=BIT_ADC; /ADC Touch Screen Mask bit clearrINTSUBMSK=(BIT_SUB_TC);Uart_Printf("nTouch Screen init sucessfully!&qu
18、ot;);void _irq AdcTsAuto2(void)/中断处理函数int i;U32 saveAdcdly; if(rADCDAT0&0x8000) rADCTSC&=0xff;/ Set stylus down interrupt bit rADCTSC=(1<<3)|(1<<2); /Pull-up disable, Seq. X,Y postion measure.saveAdcdly=rADCDLY;rADCDLY=40000; /Normal conversion mode delay about (1/50M)*40000=0.8m
19、srADCCON|=0x1; /start ADCwhile(rADCCON & 0x1);/check if Enable_start is lowwhile(!(rADCCON & 0x8000); /check if EC(End of Conversion) flag is high, This line is necessary! while(!(rSRCPND & (BIT_ADC); /check if ADC is finished with interrupt bit xdata=(rADCDAT0&0x3ff);/ADC数据寄存器低10位为有
20、效数据,其中0为x坐标值,1为y坐标值 ydata=(rADCDAT1&0x3ff); /YH 0627, To check Stylus Up Interrupt. rSUBSRCPND|=BIT_SUB_TC; ClearPending(BIT_ADC); rINTSUBMSK=(BIT_SUB_TC); rINTMSK=(BIT_ADC); rADCTSC =0xd3; /Waiting for interrupt rADCTSC=rADCTSC|(1<<8); / Detect stylus up interrupt signal.while(1)/to check
21、 Pen-up state if(rSUBSRCPND & (BIT_SUB_TC)/check if ADC is finished with interrupt bit break;/if Stylus is up(1) state TouchState=testPos(xdata,ydata);/testpos是由我自己编写的LCD触及位置判断函数,由于返回的xdata和ydata在LCD屏上与分辨率并不匹配,需要大致计算 if(TouchState=MouseState)Uart_Printf("nSuccessfully Hitted a mouse!")
22、;/X-position Conversion data TouchState=6;tnumplus();rADCDLY=saveAdcdly; rADCTSC=rADCTSC&(1<<8); / Detect stylus Down interrupt signal. rSUBSRCPND|=BIT_SUB_TC; rINTSUBMSK=(BIT_SUB_TC);/ Unmask sub interrupt (TC) ClearPending(BIT_ADC);/清中断寄存器,比较重要,否则会陷入中断循环中void RandomMouse(void)/产生随机数函数,由于
23、ARM无法支持C语言中的srand()随机数函数,所以自作随机函数,经本地测试,随机种子生成数具备一定随机性,满足实验要求。/srand(time(0);unsigned long dongseed;dongseed=(2617*seed)+123)/37;seed=dongseed;MouseState = dongseed%4;sumplus();/Uart_Printf("ms=%d",MouseState);7、 课程设计成果展示开发板上电后主菜单:地鼠出现速度选择:游戏启动界面:(董先生的打地鼠,董嘉伟中南大学物联网工程)(只能照到部分画面)手机不太给力,拍摄比较模糊地鼠随机出现:正确敲击后串口输出以及最终结果显示:8、 课程设计总结 与之前去杰普实训所做的智能家居平台不同的是,本次课程设计采用了功能更为强大的ARM9平台。平时所学嵌入式大多针对部分51单片机来做的,但51单片机运行主频低、功能少不适合完成复杂的计算或者控制功能,此次全用全新的ARM9平台来做,感觉上功能更加强大,开发难度也有所增加。 本次课程设计完全按照实验老师的要求来进行,经过合理规划,最终按时完成了开发任务。在开发过程中遇到了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 真实有效在职人员信息证明(5篇)
- 2025年其他未列明建筑服务项目建议书
- 全方位工作经历及职位证明(7篇)
- 2025年年健康服务项目建议书
- 员工离职后重新就业证明书(6篇)
- 农村绿地生态环境保护整治协议书
- 合作养殖农户协议书
- 2025年无机电子材料合作协议书
- 医院装饰装修合同
- 市场推广及销售代理合作协议具体内容
- 园艺植物种质资源图文
- 中央新疆税收政策解读
- “校园之星”评选实施方案
- 部编版二年级下册语文园地八(完美版)教学设计1
- 《安全生产法培训课件》(2021版)
- 库车中原石油化工有限公司11万吨年凝析油分离及轻烃芳构化项目环境影响评价报告书
- 石膏板吊顶施工方案
- WORD VBA编程 从零开始学VBA
- 机动车检测站可行性研究报告-建设机动车检测站可行性报告
- 高二英语外研版选择性必修三U4 AI:a real threat教学课件(精编)
- stype kit操作手册第一步调整水平平衡仪
评论
0/150
提交评论