广东工业大学嵌入式实验报告.docx
《广东工业大学嵌入式实验报告.docx》由会员分享,可在线阅读,更多相关《广东工业大学嵌入式实验报告.docx(38页珍藏版)》请在冰点文库上搜索。
广东工业大学嵌入式实验报告
嵌入式系统实验报告
学生学院计算机学院
专业班级软件工程班
学号
学生姓名
指导教师
2010年月日
实验一:
ARM调试环境和ADS的使用
实验项目性质:
普通
所属课程名称:
嵌入式系统
实验计划学时:
2
一、实验目的:
了解ARM系统的基本开发环境和手段,建立调试系统和ADS编译系统使用方法和技巧。
二、实验内容和要求
●设备连接方法
●启动服务器软件
●调试系统的配置
●学习编辑编译程序
●学习调试方法
三、实验主要仪器设备和材料
嵌入式系统实验箱,微机,
四、实验方法、步骤及结构测试
1.设备连接:
上电时注意观察指示灯状态,ProbeICE-ARM上设有三个指示灯,分别是:
CFG(配置)、Busy(工作中)、PWR(电源)。
在ProbeICE-ARM在供电正确、内部电路工作正常时,三个指示应是:
CFG:
闪烁,表明配置正确
Busy:
灭,表明仿真器处于空闲态。
仿真器工作时(比如程序下载)闪烁
PWR:
常亮,表明供电正确
注意:
务必在断电情况下连接ProbeICE-ARM和目标板。
带电插拔可能会对仿真器造成永久损害!
请使用仿真器配套的专用直流电源,其他电源可能导致意想不到的问题出现!
2.启动服务器软件
使用ProbeICE-ARM仿真器之前须安装服务器(Server)和调试环境(ADS1.2或SDT251)。
ProbeICE-ARM使用与Multi-ICE2.2兼容的服务器软件ProbeICE-Server。
请按以下步骤启动和使用ProbeICE-Server:
启动:
从Windows开始菜单中选择ProbeICE-Server启动,或从服务程序安装目录中直接启动。
配置:
从主菜单File→Auto-configure。
如果连接和配置正常,会有相应的ARM内核提示信息,出现如图所示的画面,表明服务器已经识别目标板ARM内核并作好准备为它服务了。
现在您可以启动调试软件开始调试了。
如果没有成功,就在File菜单中重新装载配置文件2410.CFG
3.启动ADS调试开发环境
运行软件ARMDeveloperSuitv1.2----CodeWarriorARMDeveloperSuit
4.新建项目:
激活File菜单的New项,输入项目名称,选择项目存盘路径。
5.设置项目参数:
6.添加源文件:
在项目窗口点击鼠标右键激活,出现添加文件的对话,将与实验相关的源程序*.c,*.s,*.h,添加到该项目中。
7.编译程序:
按F7执行make命令,要确认无编译错误
启动调试程序:
按F5启动AXD调试程序,如果有问题,需确认AXD的配置,从AXD的Option→ConfigureTarget,出现一个目标配置窗口,在目标环境列表中选择‘Multi-ICE’,点击‘OK’。
8.调试程序,变量,寄存器观察:
AXD和ProbeICE-ARM支持非常丰富的调试手段。
以下是一些最基本的调试方法:
●下载影像文件:
从AXD主菜单File→Loadimage,然后找到您要调试的可执行文件,点击‘确定’,就可将影像文件通过ProbeICE-ARM下载到目标板中。
●资源显示:
通过AXD的‘ProcessorView’菜单可以显示目标板的各种资源,包括源代码、寄存器、存储器、变量、符号等。
●断点设置:
双击源码窗口的可执行语句可设置永久性断点,屏幕出现红色标记,在此双击该处,可取消断点。
●运行控制:
通过AXD的‘Execute’菜单可以各种方式控制被调试程序的运行,如单步执行(Step,StepIn,StepOut)、全速执行(Go,RuntoCursor)、
●命令行接口:
AXD支持传统的命令行接口(CLI)调试形式。
您可以根据自己的喜好选择IDE方式或CLI。
启动CLI:
从AXD的‘SystemView’菜单,选择‘CommandLineInterface’,出现以‘Debug>’为提示符的CLI窗口,在CLI窗口中,您可以键入各种命令进行调试。
例如:
Debug>breakmain.c|50;在main.c的50行处设置断点
Debug>go;全速执行
Debug>step;单步执行
Debug>regcurrent;显示当前模式寄存器内容
Debug>mem0x1000+0xf32;以32位方式显示0x1000开始共16个单元。
五、实验报告要求:
讲叙ARM开发系统的架构:
应用(Application)
应用(Application)
标准接口函数(API)
驱动/板级支持包
(Driver/BSP)操作系统(OS)
硬件(Hardware)硬件抽象层(HAL)
硬件(Hardware)
(不带操作系统支持)(带操作系统支持)
相关硬件和软件:
中断向量表,初始化存储器系统,初始化堆栈,初始化有特殊要求的端口、设备,初始化应用程序执行环境,改变处理器模式,呼叫主应用程序;
六、思考题
实验中设置项目相关编译参数的原因:
1.关键字ENTRY并非总是用来设置程序入口点,所以通常需要在连接选项里显式地指定程序入口点;
2.存储器端口的接口时序优化是非常重要的,影响到整个系统的性能;
3.一般堆栈的大小要根据需要而定,但是要尽可能给堆栈分配快速和高带宽的存储器。
堆栈性能的提高对系统整体性能的影响是非常明显的。
实验三:
LCD显示与触摸屏
实验项目性质:
普通
所属课程名称:
嵌入式系统
实验计划学时:
2
一、实验目的:
学习LCD显示和触摸屏的编程方法。
二、实验内容和要求:
1.在彩色LCD显示屏上显示数字和汉字以及画图。
2.触摸屏编程,触摸位置信息的检测
3.编程实现,任点触摸屏一下,即在该处显示该处的x,y坐标数据。
三、实验主要仪器设备和材料:
嵌入式系统实验箱,微机
四、实验方法、步骤及结构测试:
1.编程要点与相关函数
a)画点:
intsetpixel(intx,inty,unsignedshortpencolor)
b)清屏:
clrsrc(void)
c)显示字符:
drawtext(intx0,inty0,char*c,intpencolor)
d)触摸屏初始化:
INT_ADC_Enable(TRUE);
e)读取X:
intadc_x_position()
f)读取Y:
intadc_y_position()
2.编译程序
3.调试
五、实验报告要求:
1.试验程序流程图
2.带注解的程序清单
程序清单:
1.LCD
voidC_Entry()
{
inti,j,k=0;
i=0;
Led4_On_or_Off(TRUE);
while(i++<1000000);
Led4_On_or_Off(FALSE);
clrsrc();
for(i=0;i<240;i++)
for(j=0;j<320;j++)
{
setpixel(j,j,0xff);
}
while(10);
;
}
intsetpixel(intx,inty,unsignedshortpencolor)
{
intmovetop;/*THEPIXELADDRESS*/
short*p;
if(x<0||x>(int)x_limit)returnERROR;
if(y<0||y>(int)y_limit)returnERROR;
/*指向所要显示的像素偏移地址*/
movetop=(x*x_size+y)*2;//一个像素占两个字节
p=(short*)(VideoAddrStart+movetop);
*p=pencolor;
return1;
}
voidclrsrc(void)
{
short*p;
for(p=(short*)VideoAddrStart;p<(short*)VideoAddrEnd;p++)*p=0;
return;
}
voidLed1_On_or_Off(intflag)
{
inttemp;
if(flag==TRUE)//led1on
{
//setGPF4
temp=rGPFCON;
rGPFCON=temp|(1<<8);
temp=rGPFDAT;
rGPFDAT=temp&(0<<4);
}
else//led1off
{
//setGPF4
temp=rGPFCON;
rGPFCON=temp|(1<<8);
temp=rGPFDAT;
rGPFDAT=temp|(1<<4);
}
}
voidLed2_On_or_Off(intflag)
{
inttemp;
if(flag==TRUE)//led1on
{
//setGPF4
temp=rGPFCON;
rGPFCON=temp|(1<<10);
temp=rGPFDAT;
rGPFDAT=temp&(0<<5);
}
else//led1off
{
//setGPF4
temp=rGPFCON;
rGPFCON=temp|(1<<10);
temp=rGPFDAT;
rGPFDAT=temp|(1<<5);
}
}
voidLed3_On_or_Off(intflag)
{
inttemp;
if(flag==TRUE)//led1on
{
//setGPF4
temp=rGPFCON;
rGPFCON=temp|(1<<12);
temp=rGPFDAT;
rGPFDAT=temp&(0<<6);
}
else//led1off
{
//setGPF4
temp=rGPFCON;
rGPFCON=temp|(1<<12);
temp=rGPFDAT;
rGPFDAT=temp|(1<<6);
}
}
voidLed4_On_or_Off(intflag)
{
inttemp;
if(flag==TRUE)//led1on
{
//setGPF4
temp=rGPFCON;
rGPFCON=temp|(1<<14);
temp=rGPFDAT;
rGPFDAT=temp&(0<<7);
}
else//led1off
{
//setGPF4
temp=rGPFCON;
rGPFCON=temp|(1<<14);
temp=rGPFDAT;
rGPFDAT=temp|(1<<7);
}
}
2.触摸屏
voidC_Entry()
{
INT_ADC_Enable(TRUE);
while(10);
;
}
voidadcdly(intnumber)
{
inti,t;
/*delayingthetime*/
for(i=0;i{
for(t=0;t<0x100;t++);
}
}
voidtp_rewaite_int(void)
{
/*definethepointervariblepointtotheregister*/
int*p_adctsc;
p_adctsc=(int*)ADCTSC;
*p_adctsc=0xd3;/*confinguretheregisterADCTSCrenablethetouchpanelinterrupt*/
}
intadc_x_position()
{
/*definethepointervaribleandpointtotheregister*/
volatileint*p_adccon;
int*p_adctsc;
int*p_adcdat1;
intadc_xdata,x_data;
p_adccon=(int*)ADCCON;
p_adctsc=(int*)ADCTSC;
p_adcdat1=(int*)ADCDAT1;
/*confinguretheADCTSCregisterandbegintheXaxiscovision*/
*p_adctsc=0x9a;
*p_adccon=0x7ff9;
while(!
(*p_adccon&0x8000));/*ifthecovisionisend?
*/
adcdly
(1);/*delaylittletimeformorenicety*/
adc_xdata=(*p_adcdat1)&0x3ff;/*getthevaluefromregisterADCADT0*/
x_data=(0x3c8-adc_xdata)*320/TP_XRAGE;/*covertthealuetocoordinate*/
returnx_data;
}
intadc_y_position()
{
/*definethepointervaribleandpointtotheregister*/
volatileint*p_adccon;
int*p_adctsc;
int*p_adcdat0;
intadc_ydata,y_data;
p_adccon=(int*)ADCCON;
p_adctsc=(int*)ADCTSC;
p_adcdat0=(int*)ADCDAT0;
*p_adctsc=0x69;/*confinguretheADCTSCregisterandbegintheYaxiscovision*/
*p_adccon=0x7FE9;
while(!
(*p_adccon&0x8000));/*ifthecovisionisend?
*/
adcdly
(1);/*delaylittletimeformorenicety*/
adc_ydata=(*p_adcdat0)&0x3ff;/*getthevaluefromregisterADCADT0*/
y_data=(0x3c8-adc_ydata)*240/TP_YRAGE;/*covertthealuetocoordinate*/
returny_data;
}
voidTouchPanel_LISR(void)
{
volatileintxPosition;
volatileintyPosition;
yPosition=adc_y_position();
xPosition=adc_x_position();
tp_rewaite_int();
}
intsetpixel(intx,inty,unsignedshortpencolor)
{
intmovetop;/*THEPIXELADDRESS*/
short*p;
if(x<0||x>(int)x_limit)returnERROR;
if(y<0||y>(int)y_limit)returnERROR;
/*指向所要显示的像素偏移地址*/
movetop=(x*x_size+y)*2;//一个像素占两个字节
p=(short*)(VideoAddrStart+movetop);
*p=pencolor;
return1;
}
voidclrsrc(void)
{
short*p;
for(p=(short*)VideoAddrStart;p<(short*)VideoAddrEnd;p++)*p=0;
return;
}
voidLed1_On_or_Off(intflag)
{
inttemp;
if(flag==TRUE)//led1on
{
//setGPF4
temp=rGPFCON;
rGPFCON=temp|(1<<8);
temp=rGPFDAT;
rGPFDAT=temp&(0<<4);
}
else//led1off
{
//setGPF4
temp=rGPFCON;
rGPFCON=temp|(1<<8);
temp=rGPFDAT;
rGPFDAT=temp|(1<<4);
}
}
voidLed2_On_or_Off(intflag)
{
inttemp;
if(flag==TRUE)//led1on
{
//setGPF4
temp=rGPFCON;
rGPFCON=temp|(1<<10);
temp=rGPFDAT;
rGPFDAT=temp&(0<<5);
}
else//led1off
{
//setGPF4
temp=rGPFCON;
rGPFCON=temp|(1<<10);
temp=rGPFDAT;
rGPFDAT=temp|(1<<5);
}
}
voidLed3_On_or_Off(intflag)
{
inttemp;
if(flag==TRUE)//led1on
{
//setGPF4
temp=rGPFCON;
rGPFCON=temp|(1<<12);
temp=rGPFDAT;
rGPFDAT=temp&(0<<6);
}
else//led1off
{
//setGPF4
temp=rGPFCON;
rGPFCON=temp|(1<<12);
temp=rGPFDAT;
rGPFDAT=temp|(1<<6);
}
}
voidLed4_On_or_Off(intflag)
{
inttemp;
if(flag==TRUE)//led1on
{
//setGPF4
temp=rGPFCON;
rGPFCON=temp|(1<<14);
temp=rGPFDAT;
rGPFDAT=temp&(0<<7);
}
else//led1off
{
//setGPF4
temp=rGPFCON;
rGPFCON=temp|(1<<14);
temp=rGPFDAT;
rGPFDAT=temp|(1<<7);
}
}
voidINT_ADC_Enable(intflag)
{
inttemp;
if(flag==FALSE)
{
temp=rINTSUBMSK;
temp|=(1<<10);
rINTSUBMSK=temp;
temp=rINTMSK;
temp|=0x80000000;
rINTMSK=temp;
}
else
{
temp=rINTSUBMSK;
temp=0x5ff;
rINTSUBMSK=temp;
temp=rINTMSK;
temp&=~(0x80000000);
rINTMSK=temp;
}
}
六.思考题:
1.如何实现动画功能。
用WindowsAPI提供或MFC封装后的GDI绘图函数来实现;在内存中创建一个与显示动画的窗口区域一样大的位图,先用GDI函数绘制位图,然后在适当的时候从内存中显示出来。
还可以在显示位图时作优化显示
2.如何把检测到的触摸屏的位置信息转换位显示屏的位置信息。
在触摸屏上选择至少三个坐标点;利用触摸点在触摸屏上产生的声波信号,计算触摸点与每个坐标点之间的距离;以所述坐标点为圆心、所述触摸点与坐标点之间的距离为半径,构造至少三个圆,所述多个圆的公共交点为所述触摸点;通过求解所述公共交点的坐标值,确定出所述触摸点在触摸屏上的位置。
实验五:
WinCE操作系统
实验项目性质:
综合性
所属课程名称:
嵌入式系统
实验计划学时:
4
一、实验目的:
学习WinCE操作系统的建立以及应用程序的编程方法。
二、实验内容和要求:
1.了解WinCE操作系统的建立。
2.WinCE操作系统的编译系统建立
3.了解WinCE操作
4.编写一个应用程序,实现简单的计算器功能。
5.了解装载应用程序的方法。
三、实验主要仪器设备和材料:
嵌入式系统实验箱,微机
四、实验方法、步骤及结构测试:
1.编程要点与相关函数
2.编译程序
3.调试
五、实验报告要求:
1.操作过程说明
第一步安装BSP
1-1PC上安装PlatformBuilder4.2开发环境。
(这里假定安装路径为x:
\wince420)
1-2进入到x:
\WINCE420\PLATFORM\SMDK2410目录下,将里面的内容全部删除。
1-3插入配套资料光盘,拷贝资料光盘中的
WINCE\SMDK2410目录中的内容到
x:
\WINCE420\PLATFORM\SMDK2410目录。
1-4光盘里的文件带有只读属性,所以我们要先将刚才拷贝过来的所有文件及子目录的只读属性去除。
1-5运行PlatformBuilder4.2
1-6选择“File”菜单下的”ManageCatalogFeatures…”菜单项
1-7在Catalog列表中,选中smdk2410.cec
1-8点击Remove按钮,在弹出的对话框中,选择“是(Y)”按钮
1-9点击右边的Import按钮
1-10在弹出的对话框中,进入到x:
\WINCE420\PLATFORM\SMDK2410目录,选中smdk2410.cec文件
1-11点击”打开”按钮,将新的smdk2410.cec文件添加到Catalog列表中,然后点击”OK”按钮
1-12在Catalog窗口的BSPs下,将会自动添加SamsungSMDK2410:
ARMV4I项
1-13至此,新的BSP安装完成。