嵌入式系统及应用实验指导书.docx
《嵌入式系统及应用实验指导书.docx》由会员分享,可在线阅读,更多相关《嵌入式系统及应用实验指导书.docx(37页珍藏版)》请在冰豆网上搜索。
![嵌入式系统及应用实验指导书.docx](https://file1.bdocx.com/fileroot1/2023-6/17/922253b3-3940-48d5-9a2c-5e75f24d77e8/922253b3-3940-48d5-9a2c-5e75f24d77e81.gif)
嵌入式系统及应用实验指导书
嵌入式系统及应用
实验指导书
李剑编
中国矿业大学
信息与电气工程学院
2012年12月
实验要求
实验前应充分预习阅读实验指导书,查看相关技术文档,复习教材中有关内容。
明确实验目的、实验原理及内容,以减少实验中的盲目性,提高主动性。
自行拟定实验步骤,掌握注意事项。
实验报告在实验完成后一周内交到实验室,采用统一报告纸,手写完成,并装订成册。
嵌入式系统与应用实验硬软件介绍
实验一ADIIDE嵌入式集成开发环境基础实验
实验二嵌入式Linux应用程序开发基础实验
嵌入式系统与应用实验硬软件介绍
一、JXARM9-2410实验箱硬件简介:
图1JXARM9-2410实验箱结构示意图
JXARM9-2410教学实验系统的硬件部分包括:
基本模块、调试模块、通讯模块、人机交互模块、A/D模块、步进电机驱动模块、IDE/CF接口模块、GPRS模块、GPS模块。
1.基本模块:
SDRAM存储器:
主板包含64MBSDRAM。
由一片16位数据宽度的SDRAM存储器组成,地址从0x30000000~0x33fffffff。
FLASH存储器:
主板包含32MBNORFLASH存储器和8MBNANDFLASH,NORFLASH内部存放启动代码Bootloader、Linux内核映象、IIS测试声音文件等。
其数据宽度为32位,地址从:
0x00000000~0x01ffffff;NANDFLASH中包含一个cramfs文件系统,在Linux中使用。
串行通讯口:
主板包含3个UART接口:
UART0和UART1用作RS232串行接口,UART2用作RS485接口。
UART0在Bootloader、演示程序、Linux和多个实验中用于人机交互(通过超级终端)以及文件传输;
IIS录放音接口:
主板有一个可以基于DMA操作的IIS总线接口,可进行立体声录放音;
I2C总线接口:
与24C08芯片接口,可以存放一些固定的配置数据;
4个LED跑马灯:
可独立软件编程;
6个七段数码管:
6个共阳七段数码管;
外部中断测试:
一个按键用于外部中断0的测试;
复位按键:
按键用于CPU复位;
两通道通用DMA,两通道具有外部请求引脚的外设DMA;
五个PWM定时器和一个内部定时器;
看门狗定时器;
8通道10-bitADC。
2.调试模块:
标准JTAG接口:
14针标准JTAG接口,该接口用于高速仿真调试;
简易调试接口并口:
直连标准计算机并口,调试接口,该接口用于简易仿真调试。
3.通讯模块:
以太网通讯接口:
10M以太网卡;
USB接口:
遵循USB1.1标准;
标准计算机打印口(并口)。
4.人机交互模块:
显示器/触摸屏:
8英寸,TFTLCD显示器,640X480;
按键:
4X4按键。
5.A/D模块:
10bitA/D模块。
6.步进电机驱动模块:
两相步进电机驱动。
7.IDE/CF接口模块:
标准IDE硬盘接口;
标准CF卡接口。
8.GPRS模块:
GPRS无线通讯模块。
9.GPS模块:
GPS全球定位系统模块。
二、JXARM9-2410实验箱硬件资源分配
在使用实验箱中的各个模块硬件资源时,需了解模块对应的地址空间及空间组织,以便编程调用。
1.地址空间分配以及片选信号定义
表1ARM9-2410地址空间分配表
2.RAM空间组织
存储空间的定制是嵌入式系统开发的一个特色,我们可以根据自己的需要自行规定内存的使用。
在本教学实验系统中,SDRAM地址范围从0x30000000–0x33ffffff共64Mbytes。
在不同的程序中,SDRAM空间范围被分配成不同的区域用于不同的用途,下表是实验测试程序所用的一个默认分配方式,它的代码空间和数据空间分配如下:
表2SDRAM空间组织分布
3.FLASH空间组织
FLASH地址范围从0x00000000–0x01ffffff共32Mbytes。
其空间组织如下表,各地址空间对应了不同的用途:
表3FLASH空间组织分布
三、超级终端的使用
普通PC软件开发是使用键盘和显示器作为标准输入输出设备,而嵌入式系统开发一般使用串口作为标准输入输出设备。
嵌入式系统上电后执行u-boot代码进行系统引导,在u-boot中指定了串口0作为输入输出设备。
这对于我们进行嵌入式应用非常重要。
超级终端是windowsXP系统自带的终端连接软件,当连接设备选择为串口时,即可作为实验箱的输入输出界面使用。
Widows7等版本不自带超级终端,但网上有大量的类似软件可以使用。
下面介绍超级终端的使用方法。
下图给出了xp系统中超级终端打开的路径:
图2超级终端打开路径
打开超级终端后弹出的画面如图3所示,随意给新建连接起个名称,如ARM、ARM2410:
图3超级终端界面1
点击确定后,弹出的界面如图4所示:
图4
再点击取消,界面如图5所示,此时还为设置连接。
图5
点击图5中红圈所圈的工具图标,弹出的设置对话框如图6所示
图6超级终端设置对话框
点击“连接时使用”的下拉条,选中相应的串口设备,普通PC机上一般是com1。
如果是笔记本或其他电脑没有自带串口的,一般使用USB转串口设备,此时需先打开系统的设备管理器,找到端口一项,查看USBserial的端口号。
然后点击超级终端设置对话框中的设置按钮,打开串口属性设置对话框,设置如图7所示:
图7串口属性设置对话框
按照图7所示进行设置后,点击确定后返回到图6对话框,再点击确定,回到主界面,点击呼叫图标(有时候设置好后返回主界面会自动连接呼叫)如图8所示红圈内的电话标志,就可以连接外部串口设备了。
如果要断开连接就点击旁边的断开图标。
图8
用串口线连接到JXARM9-2410实验箱的串口0上,打开超级终端的呼叫图标,然后打开实验箱的电源,正常情况下超级终端会显示如下信息,如图9所示:
四、嵌入式Linux开发环境的建立(JXARM9-2410实验箱)
嵌入式Linux开发环境主要包括四个方面:
选择并安装一个合适的主机Linux操作系统;在主机Linux系统中安装tftp服务器;在主机中安装Linux系统;在主机Linux系统安装交叉编译器。
1.安装主机Linux操作系统
要进行嵌入式linux的开发首先要按照好一个主机开发环境,因为嵌入式linux下的大部分开发工作都是在pc中开发的。
如果你的机器足够好(内存至少大于1GB),那么建议首先在Windows下安装一个虚拟机软件vmware,毕竟Windows下可用的工具比较多,再在vmware基础上安装一个桌面版本的Linux系统。
实验室使用的是vmware-8.0和Ubuntu-11.10,这2个软件都可以在网上下载到。
由于在linux系统的开发过程中需要经常使用管理员权限,因此建议使用root登录linux系统。
通常新建系统是不允许root登录的,如何获得root登录则需根据不同的linux系统版本在网络上查找方法,本文不详细介绍。
2.建立tftp服务器
在嵌入式linux开发过程中需要使用tftp方式从Linux主机下载文件到板子中,因此需要在主机linux系统中安装tftp服务器。
(1)安装tftp软件
在Ubuntu的终端中输入“apt-getinstalltftpdtftpxinetd”,默认执行到结束。
(2)建立配置文件
在终端中输入“gedit/etc/xinetd.d/tftp”新建一个tftp配置文件,并在文件中输入:
servicetftp
{
socket_type=dgram
protocol=udp
wait=yes
user=root
server=/usr/sbin/in.tftpd
server_args=-s/tftpboot
disable=no
per_source=11
cps=1002
flags=IPv4
}
服务器的根目录地址即为tftpboot。
(3)重启服务
在终端中输入“/etc/init.d/xinetdrestart”。
3.建立nfs服务器
在嵌入式linux开发的时候,常常需要使用nfs以方便程序的调试。
使用nfs,用户可以将板子要用到的根文件系统放在主机目录下,开发板则通过以太网挂载到这个目录并将这个目录下的文件作为根文件系统的内容,这样用户的程序更新后不比重新烧写板子的根文件系统便能被重新使用,这点能够大大加快程序的调试。
Ubuntu下安装nfs服务器的步骤如下:
(1)进行NFS服务器端与客户端的安装:
apt-getinstallnfs-kernel-servernfs-commonportmap
安装客户端的作用是可以在本机进行NFS服务的测试。
(2)配置portmap
两种方法任选一种就可以:
gedit/etc/default/portmap
去掉-i127.0.0.1
或:
dpkg-reconfigureportmap
运行后选择“否”
另外很重要的一点,要用sysv-rc-conf(而不是chkconfig)工具查看一下当前nfs和portmap的状态,若是off,则用sysv-rc-confportmapon或sysv-rc-confnfs-kernel-serveron打开
(3)配置挂载目录和权限
gedit/etc/exports
在最后一行添加配置如下:
/nfsboot*(rw,sync)
其中/nfsboot指的是是NFS的共享目录,*表示任何IP都可以共享这个目录,你可以改为受限的IP,rw表示的是权限,sync是默认的。
(4)重启NFS服务
/etc/init.d/nfs-kernel-serverrestart重启nfs服务
4.安装交叉编译链
arm处理器不断发展,已经有很多种架构,针对不同的arm架构和linux内核版本,需使用不同的编译器。
JXARM9-2410的嵌入式linux系统使用的是版本为2.95.3。
(1)安装编译器
将附件文件cross-2.95.3.tar复制到Ubuntu主文件夹下,然后打开终端执行:
mkdir/usr/local/arm
cpcross-2.95.3.tar/usr/local/arm
cd/usr/local/arm
tarxvfcross-2.95.3.tar
rm/usr/local/arm/cross-2.95.3.tar
(2)将编译器添加到环境变量中
为了使用方便,还可以编辑/etc/bash.bashrc文件添加把编译器路径到环境变量PATH中,只要在这个文件中添加下面这个语句即可:
exportPATH=$PATH:
/usr/local/arm/2.95.3/bin:
编辑完毕后使用source/etc/bash.bashrc命令执行以下这个文件,让设置生效。
实验一ADIIDE嵌入式集成开发基础实验
一、实验目的
1.了解ADTIDE的ARM开发环境;
2.掌握ADTIDE开发环境中基本的工程设置以及程序编译方法;
3.掌握ADTIDE开发环境中基本的程序调试方法。
二、实验内容
在ADT集成开发环境中编写数码管显示程序,利用6位数码管构成一个简易秒表。
三、实验设备
1.硬件:
JXARM9-2410教学实验箱、PC机;
2.软件:
PC机操作系统Windows98(2000、XP)+ADT1000开发环境。
四、实验预备知识
更详细的内容见《ARM9嵌入式技术及嵌入式Linux高级实践教程》第4章。
1.C语言的基础知识;
2.ADIIDE集成开发环境的程序调试基础知识和方法;
3.LED数码管基本原理;
发光二极管数码显示器简称LED显示器。
LED显示器具有耗电省、成本低廉、配置简单灵活、安装方便、耐振动、寿命长等优点,目前广泛应用于嵌入式系统中。
7段LED由7个发光二极管按“日”字形排列,所有发光二极管的阳极连在一起称共阳极接法,阴极连在一起称为共阴极接法。
一般共阴极可以不需外接电阻,但共阳极接法中发光二极管必须外接电阻。
LED的结构及连接图见下图。
当选用共阴极的LED显示器时,所有发光二极管的阴极连在一起接地,当某个发光二极管的阳极加入高电平时,对应的二极管点亮。
因此要显示某字形就应使此字形的相应段的二极管点亮,也就是送一个用不同电平组合代表的数据字来控制LED的显示,此数据称为字符的段码。
字符0、1、2…F与LED码段A、B、C…F以及DP(小数点)的关系如表4:
字符
DP
G
F
E
D
C
B
A
段码(共阴)
段码(共阳)
0
0
0
1
1
1
1
1
1
3FH
C0H
1
0
0
0
0
0
1
1
0
06H
F9H
2
0
1
0
1
1
0
1
1
5BH
A4H
3
0
1
0
0
1
1
1
1
4FH
B0H
4
0
1
1
0
0
1
1
0
66H
99H
5
0
1
1
0
1
1
0
1
6DH
92H
6
0
1
1
1
1
1
0
1
7DH
82H
7
0
0
0
0
0
1
1
1
07H
F8H
8
0
1
1
1
1
1
1
1
7FH
80H
9
0
1
1
0
1
1
1
1
6FH
90H
A
0
1
1
1
0
1
1
1
77H
88H
B
0
1
1
1
1
1
0
0
7CH
83H
C
0
0
1
1
1
0
0
1
39H
C5H
D
0
1
0
1
1
1
1
0
5EH
A1H
E
0
1
1
1
1
0
0
1
79H
86H
F
0
1
1
1
0
0
0
1
71H
8EH
-
0
1
0
0
0
0
0
0
40H
BFH
.
1
0
0
0
0
0
0
0
80H
7FH
熄灭
0
0
0
0
0
0
0
0
00H
FFH
说明:
共阴的LED,被选中时的段为高电平有效,熄灭的段码为00H;
共阳的LED,被选中时的段为低电平有效.熄灭的段码为FFH。
LED显示器的接口一般有静态显示与动态显示接口两种方式,下面分别加以介绍。
1)静态显示
LED数码管采用静态接口时,共阴极或共阳极点连接在一起接地或接高电平。
每个显示位的段选线与一个8位并行口线对应相连,只要在显示位上的段选线上保持段码电平不变,则该位就能保持相应的显示字符。
这里的8位并行口可以直接采用并行I/O口,也可以采用串入/并出的移位寄存器或是其它具有三态功能的锁存器等。
2)动态显示
在多位LED显示时,为了简化电路,降低成本,将所有位的段选线并联在一起,由一个8位I/O口控制。
而共阴(或共阳)极公共端分别由相应的I/O线控制,实现各位的分时选通。
由于各个数码管是共用同一个段码输出口,分时轮流通电的,从而大大简化了硬件线路,降低了成本。
不过这种方式的数码管接口电路中数码管不宜太多,一般在8个以内,否则每个数码管所分配的实际导通时间会太少,显得亮度不足。
若LED位数较多时应采用增加驱动能力以提高显示亮度。
本实验中采用的是动态显示接口,其中数码管扫描控制地址为0x0:
1000006,位0-位5每位分别对应一个数码管,将其中某位清0来选择相应的数码管,地址0x01000004为数码管的数据寄存器。
数码管采用共阳方式,向该地址写一个数据就可以控制LED的显示,其原理图如下图所示:
五、实验步骤
1.硬件连接
将实验箱的电源线接到电源插座上,使用串口连接线连接PC串口端和实验箱串口0,使用并口线连接PC机并口端和实验箱的简易JTAG并口调试端。
2.超级终端
按照前面的内容建立好一个超级终端后,打开实验箱电源,检查U-boot启动是否正常
3.建立工程
1)(以英文版为例,汉化版请同学们自己对照)打开ADTIDE,点击“File->New菜单”,弹出New对话框,如上图所示,选择Project页,在Project页中选择调试设备,对于简易调试器的用户,请选择“ARM9SIMPLE”,在“Projectname”和“Location”中输入工程名称和路径,请注意路径和工程名中不能包含空格。
在工程类型中选择“EXEC”。
2)新建一个文件并保存为d:
\leddemo\leddemo.c,编辑该文件,添加如下代码:
/****************************************************************************/
/*文件名称:
LEDSEG7.C*/
/*实验现象:
数码管依次显示出0、1,2、……9、a、b、C、d、E、F*/
/****************************************************************************/
#defineU8unsignedchar
staticintdelayLoopCount=1000;
unsignedcharseg7table[16]={
/*01234567*/
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
/*89ABCDEF*/
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,
};
voidDelay(inttime);
/****************************************************************************/
/*函数说明:
JXARM9-24107段构共阳数码管测试*/
/*功能描述:
依次在7段数码管上显示0123456789ABCDEF*/
/*返回代码:
无*/
/*参数说明:
无*/
/****************************************************************************/
voidTest_Seg7(void){
inti;
*((U8*)0x010000006)=0x00;/*为什么是0x01000006?
它是做什么用的?
*/
for(;;){
/*数码管从0到F依次将字符显示出来*/
for(i=0;i<0x10;i++){
/*查表并输出数据*/
*((U8*)0x010000004)=seg7table[i];/*0x01000004又是做什么用的?
*/
Delay(1000);
}
/*数码管从F到0依次将字符显示出来*/
for(i=0xf;i>=0x0;i--){
/*查表并输出数据*/
*((U8*)0x010000004)=seg7table[i];
Delay(1000);
}
}
}
/****************************************************************************/
/*Functionname:
循环延时子程序*/
/*Description:
循环'time'次*/
/*Returntype:
void*/
/*Argument:
循环延时计数器*/
/****************************************************************************/
voidDelay(inttime){
inti;
for(;time>0;time--)
for(i=0;i}
3)将leddemo.c文件加入到工程leddemo中,如下图所示,点击右键菜单:
将弹出文件选择对话框,选择d:
\leddemo\leddemo.c文件,并点击“打开”按钮。
4)新建一个文件并保存为d:
\leddemo\ldscript,编辑该文件,添加如下内容:
SECTIONS
{
.=0x30000000;
.text:
{*(.text)}
Image_RO_Limit=.;
Image_RW_Base=.;
Image_RO_Base=.;
Image_RW_Limit=.;
.data:
{*(.data)}
.rodata:
{*(.rodata)}
Image_ZI_Base=.;
.bss:
{*(.bss)}
Image_ZI_Limit=.;
__bss_start__=.;
__bss_end__=.;
__EH_FRAME_BEGIN__=.;
__EH_FRAME_END__=.;
PROVIDE(__stack=.);
end=.;
_end=.;
.debug_info0:
{*(.debug_info)}
.debug_line0:
{*(.debug_line)}
.debug_abbrev0:
{*(.debug_abbrev)}
.debug_frame0:
{*(.debug_frame)}
}
该文件为链接脚本文件,链接脚本文件中全部使用半角符号,文件编写格式必须从SECTIONS关键字开始,紧接着是开大括号,后面是所有需要输出的描述部分,最后用闭大括号收尾。
具体意义参考附录A。
该文件必须通过第5步中的工程设置对话框设置到链接参数中才有效。
鼠标右键点击工程中的MISC目录,选择添加文件,将该文件添加到工程中。
5)如下图所示,在工作区窗口中的leddemo工程名上右键点击并选择“Setting”菜单项。
弹出设置对话框,选择“Link”页,在“Linkscript”链接脚本中输入“.\ldscript”,点击“OK”按钮。
6)如下图所示,在工作区窗口中的leddemo工程名上右键点击并选择“Build”菜单项。
编译成功后结果如下图所示。
7)如并口线已经连接到JXARM9-2410的简易JTAG并口上,且实验箱已经上电,就直接点击“Debug”菜单的“RemoteConnect”进行连接,如下图所示。
正常连接结果如下图所示,有targetconnected的提示。
如果连接正确“Debug”菜单项将如下图所示