《ARM嵌入式系统基础》实验指导书.docx
《《ARM嵌入式系统基础》实验指导书.docx》由会员分享,可在线阅读,更多相关《《ARM嵌入式系统基础》实验指导书.docx(22页珍藏版)》请在冰豆网上搜索。
《ARM嵌入式系统基础》实验指导书
ARM嵌入式系统基础1
实验指导书原大明2013.9
实验一ADS开发环境实验
一、实验目的
1、掌握ADS开发环境的使用;
2、了解ADSModule工程基本结构和内容;
3、掌握在ADS下建立工程进行开发的基本技巧。
二、实验内容
1、熟悉ADS开发环境中的各个组件;
2、建立并编译一个工程;
3、使用AXD调试仿真。
三、实验设备
1、硬件:
PC机
2、软件:
PC机操作系统(WINDOWSXP);
ARMDeveloperSuitev1.2。
四、预备知识
1、了解ARM和S3C2410体系结构;
2、了解ARM和S3C2410汇编语言。
五、实验内容
1、实验程序
AREAEXAMPLE3,CODE,READONLY;/*声明一段名为EXAMPLE3的CODE*/ENTRY;/*指定函数的入口*/
START
MOVR0,#0xFF;/*把#0xFF传送到R0*/MOVR1,#0xEF000000;/*把#0XEF000000传送到R1*/MOVR2,#0x2F000000;/*把#0x2F000000传送到R2*/MVNR3,#0Xff;/*把#0xFF取反后传送到R3*/ADDR4,R2,R1;/*把R2加R1的值传送到R4*/
ADDSR5,R2,R1;/*把R2加R1的值传送R5,s表示会影响cpsr*/ADCSR6,R2,R1;/*把R2加R1的值,再加上carry的值后传送到R6.;s表示值会影响cpsr*/
SUBR4,R2,R1;/R2减R1的值传送到R4*/
SUBSR4,R2,R1;/*R2减R1的值传送到R4,s表示影响cpsr*/RSBR5,R2,R1;/*R1减R2的值传送到R5*/
RSBSR5,R2,R1;/*R1减R2的值后传送到R5,
;s表示会影响cpsr*/
SBCR6,R1,R2;/*R1减R2的值再减去!
CARRY;后传送到R6*/
RSCR7,R1,R2;/*R2减R1的值再减去!
CARRY;后传送到R7*/
stop
BLstop
END;/*程序结束*/
2、实验步骤
1)编程
Step1:
启动ADS
点击桌面开始程序ARMDeveloperSuitev1.2CodeWarriorforARMDeveloperSuite,弹出CodeWarriorforARMDeveloperSuite的界面。
Step2:
建立新的工程,点击FileNew,弹出新建工程对话框。
Step3:
建立新的汇编文件,点击FileNew,弹出新建工程对话框。
Step4:
将汇编文件添加至工程列表,编程。
Step5:
设置工程属性。
Step6:
编译连接工程。
点击工程管理对话框中的编译链接按钮。
2)调试
Step1:
运行AXD,启动调试界面。
Step2:
设置调试属性。
Step3:
加载映像文件。
Step4:
单步执行,观察程序的运行,寄存器值的变化。
3)保存退出。
实验二ARM实时仿真环境建立
一、实验目的
1、熟悉Multie-Server与JTAG下载的方法;
2、熟悉ADS开发环境中“AXDDebugger”组建的使用;
3、熟悉掌握ADS调试程序的方法。
二、实验内容
1、正确连接实验系统硬件系统;
2、使用Multie-Server建立主机与实验板的连接;
3、使用仿真器在线调试程序。
三、实验设备
1、硬件:
THUEA-1A实验系统;
PC机;
JTAG仿真器;
串口线;
并口线。
2、软件:
PC机操作系统(WINDOWSXP);
ARMDeveloperSuitev1.2;
Multi-ICEV2.2;
超级终端。
四、预备知识
1、了解ARM体系结构;
2、了解ARM汇编语言;
3、掌握C、C++语言;
4、掌握“实验一ADS开发环境实验”内容。
五、基础知识
1、ARMJTAG接口电路
JTAG(JointTestActionGroup,联合测试行动小组)是一种国际标准测试协议,主要用于芯片内部测试及对系统进行仿真、调试,JTAG技术是一种嵌入式调试技术,它在芯片内部封装了专门的测试电路TAP(TestAccessPort,测试访问口),通过专用的JTAG测试工具对内部节点进行测试。
目前大多数比较复杂的器件都支持JTAG协议,如ARM、DSP、FPGA器件等。
标准的JTAG接口是4线:
TMS、TCK、TDI、TDO,分别为测试模式选择、测试时钟、测试数据输入和测试数据输出。
2、Multi-ICEServer简介
Multi-ICEServer是由ARM公司提供的Windows操作系统下ARMJTAG的配置程序。
通过它可以使ARMJTAG与目标板建立通讯连接,并能够反馈目标板上ARM处理器的硬件信息。
Multi-ICEServer可以适应大多数JTAG仿真器而不需要其它特别的驱动。
这个软件为主机(上位机)和实验板(下位机)之间打建了软件的桥梁(硬件的桥梁就是仿真器)。
在工程的下载,调试,单步运行中这个软件要始终打开。
六、实验步骤
1、硬件连接:
断电进行(串并口不支持热插拔)
2、建立超级终端:
Step1:
点击“程序→开始→附件→通讯→超级终端”,进入如下画面,输入名称并选择
图标:
Step2:
点击确定出现如下画面,选择COM1,点击确定:
Step3:
对端口进行如下设置,并确定:
Step4:
显示超级终端界面:
3、建立实时仿真
Step1:
安装Multi-ICE2.2软件
打开Multi-ICE2.2安装文件夹,点击Setup.exe可执行文件,按照软件提示选择适当路径安装Multi-ICE2.2,假设安装路径为:
C/ProgramFiles/ARM/Multi-ICE。
正确安装Multi-ICE2.2后,打开:
C/ProgramFiles/ARM/Multi-ICE,右键单击single.cfg配置文件,选择打开方式为记事本。
在single.cfg相同目录:
C/ProgramFiles/ARM/Multi-ICE下,新建记事本文件:
920t.cfg,将single.cfg记事本的内容复制到920t.cfg,然后在920t.txt中将所有“ARM7TDMI”更改为“ARM920t”,保存。
Step2:
配置Multi-ICE2.2软件
检查好实验箱仿真器和电脑并口连接,打开实验箱电源。
在PC开发主机上选择开始>程序>ARMMulti-ICEv2.2>Multi-ICEServer进入Multi-ICEServer主界面
Step3:
使用Multi-ICE2.2软件
点击File/LoadConfiguration,查找路径为:
C/ProgramFiles/ARM/
Multi-ICE/920t.cfg,打开920t.cfg后,出现如下画面:
Step4:
实时在线仿真器配置完成。
注意:
并口类型是在PC的BIOS中进行设置的通常提供四种类型
□Basictype部分BIOS提供值为Default或SPP等
□EPP
□ECP
□EPP+ECP
由于ARMJTAG使用双向的并口数据总线通常ECP或EPP类型能够符合要求,但在一些比较新的BIOS版本中可能要选用基本类型而不是ECP或其它增强型,由于历史上的原因并口规范和IEEE1283协议的执行存在弹性,所以不同计算机主板厂商在并口设计上存在一些差异,当第一次使用ARMJTAG时需要对并口类型设置多作几次试验目前我们推荐用户选择EPP类型。
4、ADS编程
Step1:
打开2410TEST例程。
Step2:
确定RO_Base的地址映射在SDRAM:
0x30000000。
5、AXD仿真
Step1:
运行AXD,加载映像文件。
Step2:
点击“Options/ConfigureTarget„”,选择Multi-ICE.dll,然后点击configure,
出现如下界面:
点击“确定”按钮,回到上一界面,点击“OK”,AXDDebugger下实时在线仿真器设置完成,关闭AXDDebugger界面,再次运行,就可通过实时在线仿真器进行目标代码的下载调试。
实验三数码管显示实验
一、实验目的
1、了解数码管的显示原理;
2、掌握数码管显示的编程方法;
3、熟悉AXD仿真调试;
4、掌握超级终端下载BIN可执行文件。
二、实验内容
1、编写程序控制数码管显示;
2、ADS软件编写程序;
3、AXD调试程序;
4、超级终端下载程序。
三、实验设备
1、硬件:
THUEA-1A实验系统;
PC机;
JTAG仿真器;
串口线;
并口线。
2、软件:
PC机操作系统(WINDOWSXP);
ARMDeveloperSuitev1.2;
Multi-ICEV2.2;
超级终端。
四、预备知识
1、掌握在ADS集成开发环境中编写和调试程序的基本过程;
2、了解ARM应用程序的框架结构;
3、了解S3C2410的I/O口的控制。
五、基础知识
1、LED显示原理
发光二极管数码显示器简称LED显示器。
LED显示器具有耗电低、成本低、配置简单灵活、安装方便、耐震动、寿命长等优点,目前广泛应用于各类电子设备之中。
7段LED由7个发光二极管按“日”字排列。
所有发光二极管的阳极连接在一起称共阳极接法,阴极连接在一起称为共阴极接法。
一般共阴极可以不需要外接电阻。
其中各二极管的排列如上图在共阳极接法中,如果显示数字“5”,需要在a、c、d、f、g端加上高电压,其它加低电压。
这样如果码表按照h、g、f、e、d、c、b、a的顺序由高位到低位排列的话对应的码段是“6DH”。
其它的字符同理可以得到。
2、数码管显示驱动
数码管的显示一般有动态显示和静态显示两大类,另外按照驱动方式又分串行驱动和并行驱动两种方式。
串行驱动主要是提供串——并转换,减少控制线数量;并行驱动对每一个段提供单独的驱动,电路相对简单。
1)静态显示:
LED数码管采用静态接口时,共阴极或共阳极节点连接在一起接地或者接高电平。
每个显示位的段选线与一个8位并行口线相连,只要在显示位上的段选位保持段码电平不变,则该位就能保持相应的显示字符。
这里的8位并行口可以直接采用并行I/O口驱动,也可以采用串行驱动。
相应的电路如下:
很明显采用静态显示方式要求有较多的控制端(并行)或较复杂的电路(串行)。
但是在设计中对器件的要求低。
2)动态显示
在多位LED显示时,为了简化电路、节省端口(在很多系统中I/O端口资源非常宝贵),将所有的段选线并联在器件上由一个8位I/O口控制。
而共阴极(或共阳极)分别由相应的I/O口控制,实现各位的分时选通。
由于各个数码管共用一个段码输出口,分时轮流通电,从而大大简化了硬件线路。
降低了成本。
但是这种方式的数码管接口电路中数码管不宜太多,一般应控制在8个以内。
否则会因为每个数码管发光时间太短而导致亮度低。
若LED位数较多,应采用增加驱动能力的方式提高显示亮度。
六、实验步骤
1、实验电路
4位共阴极并行动态数码管显示电路。
ADDR20-23是位选信号引脚,DATA0-7是段码信号引脚,rGCS7和rGCS4为74HC573选通信号引脚。
2、ADS编程:
led.c源程序文件
/***************************************************/
#include"2410addr.h"
#include"2410lib.h"
#include"led.h"
#definerSMG0(*(volatileunsignedchar*)0x20000000)
/****************共阴极数码管段码表*****************/
unsignedcharst[16]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
/***************************************************/voidtest_led(void)
{
rGPACON=rGPACON&0x7f7e1f;//端口A设置,位选数码管显示
//GPA5,6,7,8,15
rGPADAT=0x8000;//打开74HC573rSMG0=st[0];//送显示"0"rGPADAT=0x0000;//关闭74HC573}
3、AXD调试:
led.axf映像文件
4、超级终端下载:
led.bin二进制文件
Xmodem协议传输BIN二进制文件。
实验四按键数码管显示实验
一、实验目的
1、了解键盘电路原理;
2、掌握键盘电路编程方法;
3、熟悉AXD仿真调试;
4、掌握超级终端下载BIN可执行文件。
二、实验内容
1、编写程序控制数码管显示;
2、ADS软件编写程序;
3、AXD调试程序;
4、超级终端下载程序。
三、实验设备
1、硬件:
THUEA-1A实验系统;
PC机;
JTAG仿真器;
串口线;
并口线。
2、软件:
PC机操作系统(WINDOWSXP);
ARMDeveloperSuitev1.2;
Multi-ICEV2.2;
超级终端。
四、预备知识
1、掌握在ADS集成开发环境中编写和调试程序的基本过程;
2、了解ARM应用程序的框架结构;
3、了解S3C2410的I/O口的控制。
五、基础知识
1、LED显示原理
发光二极管数码显示器简称LED显示器。
LED显示器具有耗电低、成本低、配置简单灵活、安装方便、耐震动、寿命长等优点,目前广泛应用于各类电子设备之中。
7段LED由7个发光二极管按“日”字排列。
所有发光二极管的阳极连接在一起称共阳极接法,阴极连接在一起称为共阴极接法。
一般共阴极可以不需要外接电阻。
其中各二极管的排列如上图在共阳极接法中,如果显示数字“5”,需要在a、c、d、f、g端加上高电压,其它加低电压。
这样如果码表按照h、g、f、e、d、c、b、a的顺序由高位到低位排列的话对应的码段是“6DH”。
其它的字符同理可以得到。
2、键盘驱动原理
把键盘接入嵌入式应用系统中,使系统能够感知按键状态的变化的方法有轮询和中断。
轮询方式通过把按键直接连接到系统外部I/O总线上,使程序以访问外部端口的方式获知总线状态,然后再读取按键所连接的位,从而判断出开关的状态。
程序不断地读入外部端口的数值,如果有变化,就可以判断按键已经被按下或者被放开。
采用轮询方式效率是非常低的,它只能用于一些比较简单且功能单一的应用系统中。
在大多数情况下,都是使用中断方式。
带有中断方式的矩阵键盘连接如下图:
列线通过电阻接正电源,并将行线所接的I/O作为输出端,而列线所接的I/O口则作为输入端。
这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。
由于行线输出是低电平,一旦有键按下,则输入线(列线)就会被拉低,并通过SN74LV08,把EINT7信号拉低,CPU就会收到一个中断信号,这时CPU就可以跳入中断子程序去判断哪个键被按下了。
而不同于轮询方式,CPU要不断地扫描键盘,降低了CPU地效率。
在产生中断后就确认有键被按下,然后确认闭合键所在地位置。
其方法使:
依次将行线置为低电平,在逐行检测各列线的电平状态。
若某列为低,则该列线与置为低的行线交叉处的按键即为闭合键。
六、实验步骤
1、ADS编程:
KEYBOARD.c源程序文件
/*********************按键显示程序******************/
#include
#include"2410addr.h"
#include"2410lib.h"
#include"def.h"
/***************************************************/
voidRead_value(intdata);//按键显示函数
void__irqKeyboard_Int(void);//键盘扫描函数
/***************************************************/
unsignedcharst[4][4]={//共阴极数码管段码表
{0x71,0x79,0x5e,0x39},
{0x7c,0x77,0x6f,0x7f},
{0x07,0x7d,0x6d,0x66},
{0x4f,0x5b,0x06,0x3f},
};
/***************************************************/
voidTest_keyboard(void)//键盘显示函数初始化
{
#definerSMG0(*(volatileunsignedchar*)0x20000000)
pISR_EINT4_7=(unsigned)Keyboard_Int;
rGPECON=rGPECON&0xffC0157f;//端口E设置,用于连接4*4键盘
rGPECON=rGPECON|0x1540;//GPE3~GPE6:
输出;GPE7~GPE10:
输入rGPEUP=rGPEUP|0x7f8;//GPE3~10pull-upDISABLErGPEDAT=rGPEDAT&0xff87;//GPE3~GPE6:
Output0
rGPACON=rGPACON&0x7f7e1f;//端口A设置,位选数码管显示//GPA5,6,7,8,15IOaboutsmgrGPADAT=0x8000;//初始显示"0"
rSMG0=0x3f;
rGPADAT=0x0000;
rGPFCON=rGPFCON&0x3fff;//端口F设置,外中断设置,检测键盘rGPFCON|=(2<<14);//GPF7:
INT7
rGPFUP|=(0x01<<7);//GPF7pull-upDISABLE
rEXTINT0&=~(0x1<<28);//
rEXTINT0&=~(0x1<<29);//
rEXTINT0&=~(0x1<<30);//INT7Lowlevel
rEINTMASK&=~(0x1<<7);//INT7Enable外中断开启
rSRCPND&=~(0x1<<4);
rINTMOD&=~(0x1<<4);
rINTPND&=~(0x1<<4);
rINTMSK&=~(BIT_EINT4_7);
}
/***************************************************/voidRead_value(intdata)//键值显示函数
{
unsignedintkeydata;
keydata=(rGPEDAT>>7)&0xf;
switch(keydata)
{
case(0x7):
rGPADAT=0x8000;//GPA5,6,7,8输出0,15输出高
rSMG0=st[data][3];//数码管显示
rGPADAT=0x0000;//GPA5,6,7,8输出0,15输出低
break;
case(0xb):
rGPADAT=0x8000;//GPA5,6,7,8输出0,15输出高
rSMG0=st[data][2];//数码管显示
rGPADAT=0x0000;//GPA5,6,7,8输出0,15输出低
break;
case(0xd):
rGPADAT=0x8000;//GPA5,6,7,8输出0,15输出高
rSMG0=st[data][1];//数码管显示
rGPADAT=0x0000;//GPA5,6,7,8输出0,15输出低
break;
case(0xe):
rGPADAT=0x8000;//GPA5,6,7,8输出0,15输出高
rSMG0=st[data][0];//数码管显示
rGPADAT=0x0000;//GPA5,6,7,8输出0,15输出低
break;
}
}
/***************************************************/
void__irqKeyboard_Int(void)//扫描键值中断函数
{
inti;//定义行变量
rGPEDAT=rGPEDAT&0xfff7;//置GPE3为低,扫描键盘第四行rGPEDAT=rGPEDAT|0x70;//GPE4、5、6为高
i=3;
Read_value(i);//读列键值
rGPEDAT=rGPEDAT&0xffef;//置GPE4为低,扫描键盘第三行rGPEDAT=rGPEDAT|0x68;//GPE3、5、6为高
i=2;
Read_value(i);//读列键值
rGPEDAT=rGPEDAT&0xffdf;//置GPE5为低,扫描第二行键盘rGPEDAT=rGPEDAT|0x58;//GPE3、4、6为高
i=1;
Read_value(i);//读列键值
rGPEDAT=rGPEDAT&0xffbf;//置GPE6为低,扫描第一行键盘rGPEDAT=rGPEDAT|0x38;//GPE3、4、5为高
i=0;
Read_value(i);//读列键值
}
2、AXD调试:
led.axf映像文件
4、超级终端下载:
led.bin二进制文件
注意:
Xmodem协议传输BIN二进制文件。
VIVI采用LOAD命令加载程序。