嵌入式培训报告总结.docx
- 文档编号:1660782
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:23
- 大小:1.06MB
嵌入式培训报告总结.docx
《嵌入式培训报告总结.docx》由会员分享,可在线阅读,更多相关《嵌入式培训报告总结.docx(23页珍藏版)》请在冰点文库上搜索。
嵌入式培训报告总结
化工学院
嵌入式实训报告
院系名称:
计算机与电子信息学院
专业班级:
学生姓名:
指导教师:
实训时间:
2
嵌入式实训
1、实训目的
1、掌握keil4软件的基本使用方法,学会程序的调试和下载方法。
2、了解micro-2440开发板的各种资源和功能及其基本原理。
3、学会建立新的工程项目,并运行和调试程序的功能。
4、通过嵌入式创新实训来锻炼我们建立工程的思想,并且将我们之前学习到的知识与实践相连接,综合锻炼我们的能力。
2、实训器材:
Micro2440核心板、仿真器、电脑
3、实训过程
1、开发板资源介绍
1.1Micro2440核心板简介
如图为Micro2440核心板布局图,它采用6层板设计,并使用等长布线以满足信号完整性要求。
其部分资料介绍如下:
1、CPUS3C2440A,ARM9系列处理器,时钟频率533MHz。
2、RAM:
32M*2=64M字节
S3C2440A内部内存4K字节,访问开始地址:
0x40000000----.
外扩64M字节RAM,访问开始地址:
0x30000000----
3、ROM:
2种
(1)左下角位置,Norflash,2M字节。
(2)右下角位置,Nandflash,
K9F1G08(128M)
K9F2G08(256M)
Norflash,裸机下载到此芯片,代码可直接在上面运行。
Nandflash,只做存储,代码不可直接在上面运行,代码要复制到内存运行。
开发板左下角开关进行2种ROM的选择.
打到Nor---选择Norflash,裸机试验选择此模式。
移植Linux操作系统选择Nandflash模式。
1.2Micro2440SDK底板布局及简介
Micro2440SDK底板布局及接口资源如下图所示,它是一个双层电路板,为了方便用户学习开发参考使用,上面引出了常见的各种接口,并且大部分都集中在电路板一侧,多余的IO口和系统总线则通过2.0mm间距的插针引出。
1.3、Micro2440SDK底板资源特性:
(1)1个100M网络RJ-45接口,采用DM9000网卡芯片
(2)3个串口接口,分别有RS232接口和TTL接口引出
(3)4个USBHost(使用USB1.1协议),通过USBHUB芯片扩展
(4)1个USBSlave(使用USB1.1协议)
(5)标准音频输出接口,在板麦克风(MIC)
(6)1个PWM控制蜂鸣器
(7)1个可调电阻接W1,用于AD转换测试
(8)6个用户按键,并通过排针座引出,可作为其他用途。
(9)1个标准SD卡座
(10)2个LCD接口座,其中LCD1为41Pin0.5mm间距贴片接口,可直接连接本公司提供的真彩屏显示模块或者VGA转接板,另一个LCD接口适合直接连接群创“7”LCD。
(11)2个触摸屏接口,分别有2.0mm和2.54间距两种,实际它们的定义都是相同的,
(12)1个CMOS摄像头接口(CON4),为20Pin2.0mm间距插针,可直接连接本公司的CAM130摄像头模块。
(13)在板RTC备份电池
(14)1个电源输入口,+5V供电
1.4、Micro2440SDK底板功能:
1、音频播放,MP3,MP4;
2、电容式话筒,音频录音。
3、RS232座,与PC通讯。
4、方形USB座,USB从机,ARM模拟鼠标,键盘。
5、扁口USB座,USB主机,ARM成为主机,读取U盘,读取USB鼠标,键盘。
6、RJ-45网口,互联网上网
7、TFT彩屏,7寸,3.5寸
8、4线制电阻触摸屏
9、SD卡座,读取SD卡
10、AD测量,模数转换,8路
11、摄像头接口,CMOS摄像头图像采集
2、程序的调试和下载
2.1、检验连接。
J-LINK驱动安装完成后,连接好j-link与目标板,在pc端运行j-linkGDBserver,正确的显示如图:
可以看到目标器件的类型,ID,目标板电压等。
说明此时GDBserver已经与目标器件建立了联系,等待GDB从端口2331来连接。
1、打开工程调试,程序在RAM中运行。
3、程序下载,程序固化到ROM中。
3、怎样新建工程项目
步骤:
1、Debug、Include直接复制。
2、新建List,保存编译后的中间文件。
(先空)
3、新建Output,保存编译后的结果,如xx.bin,xx.axf,xx.hex(先为空)
4、新建Source,存放源码.c(先为空)
5、Startup直接拷贝。
6、点品字形按钮,添加才菜单,代码分组。
7、选择“IFlash”,点魔术棒按钮设置工程。
9、选择“Iram”设置调试模式。
µVision3调试器提供了两种调试模式,可以从Project->OptionsforTarg对话框的Debug页内选择操作模式,如图2-32所示。
如下图:
调试器的选择
软件仿真模式:
在没有目标硬件情况下,可以使用仿真器(Simulator)将µVision3调试器配置为软件仿真器。
它可以仿真微控制器的许多特性,还可以仿真许多外围设备包括串口、外部I/O口及时钟等。
所能仿真的外围设备在为目标程序选择CPU时就被选定了。
在目标硬件准备好之前,可用这种方式测试和调试嵌入式应用程序。
GDI驱动模式:
使用高级GDI驱动设备连接目标硬件来进行调试,例如使用ULINKDebugger。
对µVision3来说,可用于连接的驱动设备有:
(1)JTAG/OCDS适配器:
它连接到片上调试系统,例如AMREmbeddedICE。
(2)Monitor(监视器):
它可以集成在用户硬件上、也可以用在许多评估板上。
(3)Emulator(仿真器):
它连接到目标硬件的CPU引脚上。
(4)In-SystemDebugger(系统内调试器):
它是用户应用程序的一部分,可以提供基本功能的测试
(5)TestHardware(测试硬件):
如PhilipsSmartMXDBox、InfineonSmartCardROMMonitorRM66P等。
使用仿真器调试时,选择菜单项Project->Project-OptionforTarget或者直接单击,打开OptionforTarget对话框的Debug页,弹出如下对话框,可进行调试配置。
图2-33选择ULINKUSB-JTAG仿真器调试
如果目标板已上电,并且与ULINKUSB-JTAG仿真器连接上,点击图2-33中的“Settings”,将弹出如图2-34所示的对话框,正常则可读取目标板芯片ID号。
如果读不出ID号,则需要检查ULINKUSB-JTAG仿真器与PC或目标板的连接是否正确。
4、第一个ARM程序:
点亮一个灯
4.1、CPU规格书:
S3C2440A包含了130个多功能输入/输出口引脚并且它们为如下显示的八个端口:
–端口A(GPA):
25位输出端口
–端口B(GPB):
11位输入/输出端口
–端口C(GPC):
16位输入/输出端口
–端口D(GPD):
16位输入/输出端口
–端口E(GPE):
16位输入/输出端口
–端口F(GPF):
8位输入/输出端口
–端口G(GPG):
16位输入/输出端口
–端口H(GPH):
9位输入/输出端口
–端口J(GPJ):
13位输入/输出端口
每个端口都可以简单的由软件配置为各种系统配置和设计要求。
你必须在开始主程序前定义使用的每个引脚的功能。
如果没有使用某个引脚的复用功能,这个引脚可以配置为I/O口。
在端口控制方面则配置了以下几个寄存器:
(1)端口配置寄存器(GPACON至GPJCON)
(2)端口数据寄存器(GPADAT至GPJDAT)
(3)端口上拉寄存器(GPBUP至GPJUP)
(4)杂项控制寄存器:
此寄存器控制睡眠模式,USB引脚和CLKOUT选择的数据端口上拉电阻。
(5)外部中断控制寄存器:
24个外部中断由各种信号方式触发。
EXTINT寄存器为外部中断请求配置信号触发方式为低电平触发、高电平触发、下降沿触发、上升沿触发或双边沿触发。
以B口为例,则其相关寄存器为:
1)、端口寄存器GPBCON
2)、端口上拉电阻寄存器GPBUP
3)、端口输入、输出数据寄存器GPBDAT
4.2、实训例程及解析
/****************************************************************************
*****信盈达电子技术服务有限公司
*****模块名:
main.c
*****功能:
GPIO跑马灯测试程序
*****说明:
4个LED分别接在GPB5~GPB8上
*****************************************************************************/
#include"2440addr.h"//包含头文件,它在工程目录/Include/2440addr.h
/*****************************************************************************
*****函数名:
main()
*****功能:
主程序GPIO跑马灯测试程序
*****说明:
4个LED分别接在GPB5~GPB8上
*****************************************************************************/
intmain(void)
{
inti,j;//ARM编译器int(32bit)
intdat;//ARM编译器short(16bit)//00000000000000010101010000000000配置成输出GPB5~GPB8
rGPBCON&=(~((3<<12)|(3<<10)));//
(1)
rGPBCON|=((1<<12)|(1<<10));//
(2)
rGPBUP=0x3ff;//GPB1~GPB10禁止上拉
while
(1)
{
dat=0x1df;//
for(j=0;j<2;j++)
{
for(i=0;i<200000;i++)
{
;
}
rGPBDAT=dat;
dat=dat<<1;
}
}
}
程序相关解析:
此程序最为重要的设置就是
(1)和
(2)首先我们要通过设置使得GPB5~GPB8为输出口3<<10这个语句的意思是将3(二进制编码左移10位)
000000000000000000000000000000000011(二进制编码三)
000000000000000000000000110000000000(左移十位后的三)
同理可得3<<12后编码为:
000000000000000000000011000000000000
(3<<12)|(3<<10)这句话的意思是将两者的编码取或可得
000000000000000000000011110000000000
~((3<<12)|(3<<10))这句话的意思是逐位取反
111111111111111111111100001111111111
rGPBCON&=(~((3<<12)|(3<<10)))这句话的意思是将该寄存器的每一位都与上一个编码取与关系这样就可以得到自己想要的寄存器的某一个具体位的状态从而达到直接配置该寄存器某一位的目的。
语句
(2)解析同上。
5、LED显示原理讲解——如何显示图片、文字
5.1、相关名词
1、位像素:
屏上一个像素点的色彩占多少bit。
以16位像素(2字节)为例,其分布比例为5:
6:
5,分别表示红、绿、蓝所占的位数。
例如:
全红:
0xf800——1111100000000000
全绿:
0x07e0——0000011111100000
全蓝:
0x001f——0000000000011111
全黑:
0x0000——0000000000000000
全白:
0xFFFF——1111111111111111
24位像素(3字节)红、绿、蓝的分布比例则是8:
8:
8。
2、显存:
即显示缓存,表示一个画面所有色彩在内存的存储区域;
显存的计算:
X35:
240*320*2byte=153600byte(16位像素)
W35:
320*240*2byte=153600byte(16位像素)
程序:
/*擦除刚才的3个十字形,在位置上填充白色即可*/
drawCross(24,32,0xFFFFFFFF);
Draw_Strign(27,35,0xFFFFFFFF,0xFFFFFFFF,"1");
drawCross(LCD_WIDTH-30,LCD_HEIGHT/2,0xFFFFFFFF);
Draw_Strign(LCD_WIDTH-30+3,LCD_HEIGHT/2+3,0xFFFFFFFF,0xFFFFFFFF,"2");
drawCross(LCD_WIDTH/2,LCD_HEIGHT-30,0xFFFFFFFF);
Draw_Strign(LCD_WIDTH/2+3,LCD_HEIGHT-30+3,0xFFFFFFFF,0xFFFFFFFF,"3");
/*显示校正完成*/
此处可以看出你想要在某个区域填充你想要的颜色你只需要首先确定相关区域的位置坐标,然后赋值相关区域的颜色如0xFFFFFFFF代表在相关区域填充白色,其他的操作同理可得。
6、综合实践练习——触摸密码键盘
参考例程:
裸机例程/2.7触摸屏校正
1、开机后,三点校正:
得出个系数K、A、B、C、D、E、F
2、进入主函数大循环while
(1):
检测Adjust是否为1,=1表明用户点击了屏幕;一旦用户点击,计算点击坐标:
yLcd:
0-239xLcd:
0-319(w35)
yLcd:
0-319xLcd:
0-239(x35)
3、在示例程序2.7的基础上添加密码键盘图片显示;校正完成后显示。
4、点击识别、点了1就显示1;使用区间判断(加到最后)
if(xLcd>1号键的坐标最左边&&
xLcd<1号键的坐标最右边&&
xLcd>1号键的坐标最上边&&
xLcd<1号键的坐标最下边&&)
{
//执行1号键对应动作
}
5、按OK
用户输入密码对比。
如输入1234,显示“欢迎”;如输入其他,显示“错误,重新输入”。
相关三点校正的程序:
Draw_Strign(20,100,0x0,0xffff,"信盈达触摸屏三点校正:
");
/*画校正用的第1个十字坐标*/
drawCross(24,32,0xf800);
Draw_Strign(27,35,0xf800,0xFFFF,"1");
Adjust=0;
Draw_Strign(20,116,0xf800,0xffff,"请点击第1点");
while(Adjust==0);//如果没有按下,等待按下
xt[0]=xdata;
yt[0]=ydata;
xd[0]=24;
yd[0]=32;
/*画校正用的第2个十字坐标*/
drawCross(LCD_WIDTH-30,LCD_HEIGHT/2,0x07c0);
Draw_Strign(LCD_WIDTH-30+3,LCD_HEIGHT/2+3,0x07c0,0xFFFF,"2");
Adjust=0;
Draw_Strign(20,132,0x07c0,0xffff,"请点击第2点");
while(Adjust==0);//如果没有按下,等待按下
xt[1]=xdata;
yt[1]=ydata;
xd[1]=LCD_WIDTH-30;
yd[1]=LCD_HEIGHT/2;
/*画校正用的第3个十字坐标*/
drawCross(LCD_WIDTH/2,LCD_HEIGHT-30,0x001f);
Draw_Strign(LCD_WIDTH/2+3,LCD_HEIGHT-30+3,0x001f,0xFFFF,"3");
Adjust=0;
Draw_Strign(20,148,0x001f,0xffff,"请点击第3点");
while(Adjust==0);//如果没有按下,等待按下
xt[2]=xdata;
yt[2]=ydata;
xd[2]=LCD_WIDTH/2;
yd[2]=LCD_HEIGHT-30;
/*擦除刚才的3个十字形,在位置上填充白色即可*/
drawCross(24,32,0xFFFFFFFF);
Draw_Strign(27,35,0xFFFFFFFF,0xFFFFFFFF,"1");
drawCross(LCD_WIDTH-30,LCD_HEIGHT/2,0xFFFFFFFF);
Draw_Strign(LCD_WIDTH-30+3,LCD_HEIGHT/2+3,0xFFFFFFFF,0xFFFFFFFF,"2");
drawCross(LCD_WIDTH/2,LCD_HEIGHT-30,0xFFFFFFFF);
Draw_Strign(LCD_WIDTH/2+3,LCD_HEIGHT-30+3,0xFFFFFFFF,0xFFFFFFFF,"3");
/*显示校正完成*/
Draw_Strign(20,164,0xf800,0xffff,"校正完成,请点击屏幕任一点");
delay(100000000);
/*计算参数*/
K=(xt[0]-xt[2])*(yt[1]-yt[2])-(xt[1]-xt[2])*(yt[0]-yt[2]);
//A=(32-288)*(yt[1]-yt[2])-(160-288)*(yt[0]-yt[2]);
//A=(32-288)*(yt[1]-yt[2])-(160-288)*(yt[0]-yt[2]);
//B=(xt[0]-xt[2])*(160-288)-(32-288)*(xt[1]-xt[2]);
//C=yt[0]*(xt[2]*160-xt[1]*288)+yt[1]*(xt[0]*288-xt[2]*32)+yt[2]*(xt[1]*32-xt[0]*160);
//D=(24-120)*(yt[1]-yt[2])-(216-120)*(yt[0]-yt[2]);
//E=(xt[0]-xt[2])*(216-120)-(24-120)*(xt[1]-xt[2]);
//F=yt[0]*(xt[2]*216-xt[1]*120)+yt[1]*(xt[0]*120-xt[2]*24)+yt[2]*(xt[1]*24-xt[0]*216);
A=(yd[0]-yd[2])*(yt[1]-yt[2])-(yd[1]-yd[2])*(yt[0]-yt[2]);
B=(xt[0]-xt[2])*(yd[1]-yd[2])-(yd[0]-yd[2])*(xt[1]-xt[2]);
C=yt[0]*(xt[2]*yd[1]-xt[1]*yd[2])+yt[1]*(xt[0]*yd[2]-xt[2]*yd[0])+yt[2]*(xt[1]*yd[0]-xt[0]*yd[1]);
D=(xd[0]-xd[2])*(yt[1]-yt[2])-(xd[1]-xd[2])*(yt[0]-yt[2]);
E=(xt[0]-xt[2])*(xd[1]-xd[2])-(xd[0]-xd[2])*(xt[1]-xt[2]);
F=yt[0]*(xt[2]*xd[1]-xt[1]*xd[2])+yt[1]*(xt[0]*xd[2]-xt[2]*xd[0])+yt[2]*(xt[1]*xd[0]-xt[0]*xd[1]);
Paint_Bmp(0,0,240,320,gImage_mm);
此处的gImage_mm即为你想要显示的密码门禁的界面图片在使用相关取模软件后得到的数组。
7、自己设计的密码门禁系统
1、使用画图板或其他绘图工具绘制如下图片,尺寸为240*320像素。
1、利用画图板或其他工具,获取图片上各按键的区域像素坐标区间。
各按键坐标如下:
按键名称
X坐标范围
Y坐标范围
显示框
10-234
8-61
1
10-60
81-131
2
97-147
81-131
3
184-234
81-131
4
10-60
138-188
5
97-147
138-188
6
184-234
138-188
7
10-60
204-254
8
97-147
204-254
9
184-234
204-254
Del
10-60
268-318
0
97-147
268-318
OK
184-234
268-318
2、程序解析:
intmain(void)
{
while
(1)
{
for(i=0;i<4;i++)
{
Adjust=0;
while(Adjust==0);//如果没有按下,等待按下
/*坐标转换计算*/
yLcd=(A*xdata+B*ydata+C)/K;//计算Y轴坐标
xLcd=(D*xdata+E*ydata+F)/K;//计算X轴坐标
if(xLcd>10&&xLcd<60&&yLcd>81&&yLcd<131)//显示1
{
Draw_Strign(15,15,0,0xffff,"1");
touch[i]=1;
}
if(xLcd>97&&xLcd<147&&yLcd>81&&yLcd<131)//显示2
{
Draw_Strign(15,15,0,0xffff,"2");
touch[i]=2;
}
if(xLcd>184&&xLcd<234&&yLcd>81&&yLcd<131)//显示3
{
Draw_Strign(15,15,0,0xffff,"3");
touch[i]=3;
}
if(xLcd>10&&xLcd<60&&yLcd>138&&yLcd<188)//显示4
{
Draw_Strign(15,15,0,0xffff,"4");
touch[i]=4;
}
if(xLcd>97&&xLcd<147&&yLcd>138&&yLcd<188
)//显示5
{
Draw_Strign(15,15,0,0xffff,"5");
touch[i]=5;
}
if(xLcd>184&&
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 培训 报告 总结