嵌入式系统设计基础总结报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式系统设计基础
结题报告
学生1:
学生2:
学生3:
组长:
组长电话:
指导老师:
完成时间:
目录
目录 (2)
摘要 (3)
一、课题概述 (4)
二、课题实施方案 (4)
2.1 方案说明 (4)
2.1.1 LCD图像显示模块设计方案 (4)
2.1.2 触摸屏模块设计方案 (5)
2.1.3 音乐播放模块设计方案 (5)
2.1.4 键盘模块设计方案 (6)
2.2 工程规范 (6)
三、课题实施过程详述 (6)
四、系统测试方法 (8)
五、结果分析 (8)
六、总结 (9)
参考文献 (9)
附录 (9)
摘要
随着智能手机和平板电脑等便携式设备的兴起,ARM已经成为全球领先的半导体知识产权提供商,全世界超过95%的智能手机和平板电脑都采用ARM架构。

ARM技术具有性能高、成本低和能耗省的特点。

本文旨在初步接触嵌入式ARM技术。

我们使用了天嵌TQ2440开发板以及ADS1.2来进行相关实验,主要制作了一个带背景音乐、可以使用触摸屏和键盘进行前后照片切换的数码相框。

通过这次实验,我们对ARM技术有了一个初步的认识和了解,同时也掌握了一些编程和调试技术。

关键词:嵌入式,LCD图像显示,触摸屏
Abstract
With the development of the smartphone and tablet computer, ARM has already become a leading semiconductor intellectual property provider in global market. More than 95% of the smartphone and tablet computer use the ARM framework. ARM has the advantages in performance, cost and efficiency. This paper aim at having a rough contact with embedded ARM and we use TQ2440 and ADS1.2 to conduct relevant experiments. Generally, we have made a digital album which can be controlled by touch panel. Through this experiment, we have grown a general acknowledge of ARM technology and master some coding and debugging technology.
Keywords:embedded system, LCD display, touchpanel
一、课题概述
本文展示了一个使用ARM技术制作而成的带有背景音乐并且可以通过触摸屏和键盘控制的数码相框。

数码相框在当今市面上也有销售,其功能主要是放映照片,绝大部分能够通过无线或蓝牙与移动设备进行连接,以达到实时放映的效果。

我们所制作的数码相框总体而言功能并不是很强大,但也符合数码相框的基本原理并且实现了基本功能。

本课题的核心问题是如何实现触摸屏精确地点击、图像切换显示还有音乐播放功能。

二、课题实施方案
本课题的基本设计方案分为四个模块,LCD图像显示模块、触摸屏模块、音乐播放模块以及键盘模块。

整体的设计流程为首先完成在TQ2440开发板液晶显示屏上显示出六张自定义图像;然后实现按键控制图像的切换;再加入对触摸屏的操作,使得能够使用触摸屏切换图像;最后加上PWM蜂鸣器播放音乐的功能。

2.1 方案说明
2.1.1 LCD图像显示模块设计方案
为了实现带有背景音乐并且能够使用触摸屏控制的数码相框,我们首先要能够在开发板的显示屏上显示用户自定义的照片。

由于我们所使用的开发板配备的是4.3寸的显示屏,所以图片尺寸要设定为480*272才能完美适应屏幕大小。

在程序代码中,显示图片的功能由Paing_Bmp定义,具体为Paint_Bmp (0, 0, 480, 272, TQ_LOGO),其中,480、272对应的是要显示的照片的尺寸,因为我们用的是4.3寸屏,所以设定为480、272;而TQ_LOGO是图片的名称,名称由用户自己定义,这里的TQ_LOGO对应的是开发板开机显示的第一张LOGO照片。

照片的显示本质上是对屏幕上每一个像素点赋值的过程,不断赋值的一个过程其实就是实现了对LCD的每个像素点进行逐行扫描写入不同像素点对应图片的不同位置的颜色值的过程。

图 1. 像素扫描原理
因此,只要将图片的每一个像素点的值写入程序,就能够实现照片显示的功能。

这里我们使用了天嵌科技光盘附带的bmp2h程序,将一个BMP图片文件转换为带有每行像素值的C文件,然后将C文件中的代码复制到LCD显示程序代码下,即可实现照片显示功能。

另外,由于480*272照片文件容量较大,缺省的内存设置无法满足显示6张照片的功能,会导致显示花屏。

针对这个问题,我们是在nand.c文件中修改RdNF2SDRAM( )函数中的U32 size = 0x100000,我们改成U32 size = 0x800000,这样就满足了照片显示的内存需求。

2.1.2 触摸屏模块设计方案
四线电阻式触摸屏硬件工作原理按照工作原理和传输信息的介质不同,触摸屏分为电阻式、电容感应式、红外线式以及表面声波式。

由于电阻式触摸屏具有工作面与外界完全隔离,受环境影响较小,具有不怕灰尘和水汽、稳定性高、不漂移等优点,特别适合工业现场使用。

因此我们选择了四线电阻式触摸屏。

我们使用触摸屏进行相册的前进和后退,具体来说,就是触摸屏幕上半部分,就跳转到前一张照片;反之,触摸下半部分,就跳转到下一张照片。

实现该功能的关键在于设置一个标志位来判断当前放映的是6张照片中的哪一张,当xdata>500时,判断为下半部分;xdata<500时,判断为上半部分,然后一旦触摸屏幕,在判断触摸的是哪一个部分后就会进行加一或减一,以此循环。

具体实现就是在LCD代码的while(1)中,加入一段判断选择程序,其中xdata对应的是屏幕的竖轴,ydata对应横轴。

另外,由于触控比较灵敏,会出现轻轻按一下却切换了好几张照片的情况,为了解决这个问题,就需要加入一段中断以及判断按下和松开状态。

图 2. 状态转换图
2.1.3 音乐播放模块设计方案
S3C2440A 有五个十六位计时器。

计时器0, 1, 2, 和3有Pulse Width Modulation (PWM) 功能. 计时器4 只有一个内部计时器,没有外部输出管脚。

定时器0 有一个死区发生器,这可以给大电流设备使用。

定时器0和1共用一个8位预分频器,而定时器2、3和4共用其他一个8位预分频器。

每个定时器有一个时钟分频器,可以生成5种不同的信号(1 / 2,1 / 4,1/ 8,1 / 16,和TCLK)。

每个定时器模块,接收从其自己的时钟分频器发出的信号,收到相应的8位预分频器的时钟的时钟信号的时候。

8位预分频器是可编程的,并且可以根据存储在TCFG0和TCFG1寄存器中的装载值细分(确定)像素时钟PCLK。

当计时器时使能的时候,该计时器的计数缓冲寄存器(TCNTBn)初始化,同时装载初始值到向下计数器当中。

计时器的比较缓冲寄存器(TCMPBn)初始化的时候,自动装载一个初始值,用来和向下计数器的值进行比较。

这种双重缓冲寄存器的机构,TCNTBn和TCMPBn,使计时器可以在PWM频率和占空比改变的时候保持稳定的PWM输出。

每一个定时器都有自己的有机器时钟驱动的十六位向下计数器。

当向下计数器到达零的时候,定时器中断请求产生并通知CPU,定时器操作已经完成。

当定时器向下计数器达
零的时候,相应的TCNTBn将会自动为下一次操作装载相应的计数值。

然而,当计时器被停止的时候,例如,当定时器控制寄存器TCONn的使能位被清零的时候,TCNBn的值就不会被重新装载进计数器。

TCMPBn的值是用于控制脉宽调制(PWM)的。

定时器控制当向下计数器的值等于compare的值时,输出电平逻辑改变。

因此,compare寄存器的值决定了PWM的占空比。

我们要调整PWM 的占空比进行电机控制或者电源控制的时候,只需要在程序中不断修改rTCNTB0 的值就可以了;而如果我们要改变PWM 的频率,我们只要通过不断的修改rTCNTB0 的值就可以了(当然也可以通过修改rTCNTB0 = (PCLK>>7)/freq 中的freq 的值来间接实现修改rTCNTB0 的值)。

2.1.4 键盘模块设计方案
我们知道有时触摸屏会不太好用,比如手湿了或者戴手套的时候,这时有了按键功能,就能起到很好的替换效果。

我们主要用按键功能实现照片的前后切换,其原理和之前触摸屏切换类似,这里不多撰述。

2.2 工程规范
在本次课题实施中我们就TQ2440开发板实际开发操作方面总结出规范如下:
(1)不要着急写代码,首先要将设计思路、功能模块等规划完成,然后才能进行下一步的工作。

这样做有助于实际操作过程中的条理性,并且可以使项目处于可控、可实现的状态。

(2)在编写代码的时候一定要添加上相应的注释,增加代码的可读性,方便自己以后的修改和别人的理解。

(3)硬件上,接线时一定要仔细。

注意串口线连接的位置,因为这涉及到烧录程序时端口的选择。

(4)从直观上看问题。

每次修改程序之后先录入开发板,从显示屏实际显示效果上看是否实现功能而不是纠结于程序是否修改正确。

三、课题实施过程详述
1、实现六张图像的键盘控制切换;
在keyscan.c的static void __irq Key_ISR(void)中加入以下代码:
if( key == 0xff )
{flag3=0;
Uart_Printf( "Interrupt occur... Key is released!\n") ;}
else{
flag3++;
if(flag3 == 8)flag3 = 2;
if(flag3 == 1){
if(key == 2 && flag4<=6)
{flag4++; if(flag4==7)flag4=1;}
else if(key == 1 && flag4<=6)
{flag4--;if(flag4==-1)flag4=6;}
else if(key == 3){flag5=1;Main();}}
Uart_Printf( "Interrupt occur... K%d is pressed!\n", key) ;
ExitCritical(&r);}
switch(flag4){
case 1:Paint_Bmp(0, 0, 480, 272, tu1_320240);break;
case 2:Paint_Bmp(0, 0, 480, 272, tu2_320240);break;
case 3:Paint_Bmp(0, 0, 480, 272, tu3_320240);break;
case 4:Paint_Bmp(0, 0, 480, 272, tu4_320240);break;
case 5:Paint_Bmp(0, 0, 480, 272, tu5_320240);break;
case 6:Paint_Bmp(0, 0, 480, 272, tu6_320240);break;
}
2、实现触摸屏控制图片切换功能;
(1)在while(1)中来实现:通过使用对触摸屏进行触摸操作时返回的xdata 和ydata 的数值对我们要显示的图片进行控制选择,如下:
while(1) //to check Pen-up state
{ if(rSUBSRCPND & (BIT_SUB_TC)) //check if ADC is finished with interrupt bit { flag = 0;break; //if Stylus is up(1) state}
flag++;
if(flag == 8)
flag = 2;
if(flag == 1){
if (xdata>500 && flag1<=6)
{flag1++; if(flag1==7)flag1=1;}
else if (xdata<500 && flag1<=6)
{flag1--;if(flag1==-1)flag1=6;}
else
flag1=0;
switch(flag1){
case 1:Paint_Bmp(0, 0, 480, 272, tu1_320240);break;
case 2:Paint_Bmp(0, 0, 480, 272, tu2_320240);break;
case 3:Paint_Bmp(0, 0, 480, 272, tu3_320240);break;
case 4:Paint_Bmp(0, 0, 480, 272, tu4_320240);break;
case 5:Paint_Bmp(0, 0, 480, 272, tu5_320240);break;
case 6:Paint_Bmp(0, 0, 480, 272, tu6_320240);break;
}}
}
(2)编译修改好的程序生成所需要的bin文件,录入开发板并观测图像显示。

3、PWM蜂鸣器音乐播放功能。

这部分功能就是在原先功能基础上加入了蜂鸣器的播放功能。

四、系统测试方法
本文所使用的硬件环境为天嵌TQ2440 ,是由广州天嵌计算机科技有限公司所制造。

软件环境为WINDOWS 10,带有2.40 GHz Core™ i5 处理器以及4GB RAM。

编译环境为ARM Developer Suite(ADS)1.2版。

五、结果分析
由于无法体现触控功能和音乐播放功能,这里只展示了照片显示功能。

数码相框显示的照片如下,从图片中可以看到照片显示功能十分完好:
六、总结
本文展现了我们制作的数码相框,虽然总的来讲功能比较简陋,但也是我们的一片心血。

通过这次实验,我们对于ARM嵌入式开发有了一个初步的认识,也熟悉了整个开发过程。

最为重要的是,这次的实验为我们未来的学习与工作打下了一个良好的基础,我们不仅体验了当今最为流行的嵌入式技术,更是懂得了嵌入式开发的思想核心。

在这里,我们要感谢负责嵌入式实验相关工作的王建敏老师,以及教授嵌入式课程的韩军老师、薛雷老师以及陆小峰老师,他们为这门课付出了自己的心血,传授给我们无价的知识。

总的来说,这次实验难度并不大,但学到的东西并不少,相信未来我们也许也将走上嵌入式开发的道路,为嵌入式领域贡献自己的一份力量。

参考文献
[1]裸奔三部曲.广州天嵌计算机科技有限公司.2012:1-59
[2] TQ2440开发板使用手册.广州天嵌计算机科技有限公司.2012:271-298
附录
(1)触摸屏ADC 中断初始化的程序段
rADCDL Y=50000; //Normal conversion mode delay about (1/3.6864M)*50000=13.56ms
rADCCON=(1<<14)+(ADCPRS<<6); //ADCPRS En, ADCPRS Value
Uart_Printf("\nTouch Screen test\n");
rADCTSC=0xd3; //Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En
pISR_ADC = (int)AdcTsAuto;
rINTMSK=~BIT_ADC; //ADC Touch Screen Mask bit clear
rINTSUBMSK=~(BIT_SUB_TC);
(2)触摸屏中断程序断
void __irq AdcTsAuto(void)
{
U32 saveAdcdly;
if(rADCDAT0&0x8000)
{
//Uart_Printf("\nStylus Up!!\n");
rADCTSC&=0xff; // Set stylus down interrupt bit
}
//else
//Uart_Printf("\nStylus Down!!\n");
rADCTSC=(1<<3)|(1<<2); //Pull-up disable, Seq. X,Y postion measure.
saveAdcdly=rADCDL Y;
rADCDL Y=40000; //Normal conversion mode delay about (1/50M)*40000=0.8ms rADCCON|=0x1; //start ADC
while(rADCCON & 0x1); //check if Enable_start is low
while(!(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);
ydata=(rADCDAT1&0x3ff);
//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 Pen-up state
{
if(rSUBSRCPND & (BIT_SUB_TC)) //check if ADC is finished with interrupt bit
{
//Uart_Printf("Stylus Up Interrupt~!\n");
break; //if Stylus is up(1) state
}
}
Uart_Printf("count=%03d XP=%04d, YP=%04d\n", count++, xdata, ydata);
//X-position Conversion data
rADCDL Y=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);
}
(3)PWM蜂鸣器音阶发生功能
while(1)
{
U16 freq =800;
if((xdata>719 && ydata>800)){ Paint_Bmp(0,0,480,272,tu3_480272);
freq=220 ;Buzzer_Freq_Set( freq ) ; }
嵌入式系统设计基础
else if(xdata>526 &&
ydata>800){ Paint_Bmp(0,0,480,272,tu2_480272);freq=247 ;Buzzer_Freq_Set( freq ) ;} else if(xdata>332 &&
ydata>800){ Paint_Bmp(0,0,480,272,tu1_480272);freq=262 ;Buzzer_Freq_Set( freq ) ;} else if(xdata>719 && ydata<225)
{Paint_Bmp(0,0,480,272,tu6_480272);freq=294 ;Buzzer_Freq_Set( freq ) ;} else if(xdata>526 && ydata<225)
{Paint_Bmp(0,0,480,272,tu5_480272);freq=330 ;Buzzer_Freq_Set( freq ) ;} else if(xdata>332 && ydata<225)
{Paint_Bmp(0,0,480,272,tu4_480272);freq=349 ;Buzzer_Freq_Set(freq ) ;} else if(xdata>719 && ydata>225&& ydata<800) {freq=392 ;Buzzer_Freq_Set(freq ) ;} else {freq=392 ;Buzzer_Freq_Set(freq ) ;Buzzer_Stop() ;}
Paint_Bmp1(-40, 70, 480, 272,4, tu1_480272);
Paint_Bmp1(-40, 140, 480, 272,4, tu2_480272);
Paint_Bmp1(-40, 210, 480, 272,4, tu3_480272);
Paint_Bmp1(400, 70, 480, 272,4, tu4_480272);
Paint_Bmp1(400, 140, 480, 272,4, tu5_480272);
Paint_Bmp1(400, 210, 480, 272,4, tu6_480272);
Delay(500);
}
}
11。

相关文档
最新文档