ARM嵌入式系统基础实验指导书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ARM嵌入式系统基础 1
试验指导书原大明 20XX.9
试验一 ADS 开发环境试验
一、试验目标
1、掌握 ADS 开发环境使用;
2、了解 ADSModule 工程基础结构和内容;
3、掌握在 ADS 下建立工程进行开发基础技巧。
二、试验内容
1、熟悉 ADS 开发环境中各个组件;
2、建立并编译一个工程;
3、使用AXD调试仿真。
三、试验设备
1、硬件:
PC 机
2、软件:
PC 机操作系统(WINDOWS XP);
ARM Developer Suite v1.2。
四、预备知识
1、了解 ARM 和 S3C2410 体系结构;
2、了解 ARM 和 S3C2410 汇编语言。
五、试验内容
1、试验程序
AREA EXAMPLE3,CODE,READONLY ;/*申明一段名为EXAMPLE3CODE*/ ENTRY ;/*指定函数入口*/
START
MOV R0,#0xFF ;/*把#0xFF传送到R0*/ MOV R1,#0xEF000000 ;/*把#0XEF000000传送到R1*/ MOV R2,#0x2F000000 ;/*把#0x2F000000传送到R2*/ MVN
R3,#0Xff ;/*把#0xFF取反后传送到R3*/ ADD R4,R2,R1 ;/*把R2加R1值传送到R4*/
ADDS R5,R2,R1 ;/*把R2加R1值传送R5,s表示会影响cpsr*/ ADCS R6,R2,R1 ;/*把R2加R1值,再加上carry值后传送到R6. ;s表示值会影响cpsr*/
SUB R4,R2,R1 ;/R2减R1值传送到R4*/
SUBS R4,R2,R1 ;/*R2减R1值传送到R4, s表示影响cpsr*/ RSB R5,R2,R1 ;/*R1减R2值传送到R5*/
RSBS R5,R2,R1 ;/*R1减R2值后传送到R5,
; s表示会影响cpsr*/
SBC R6,R1,R2 ;/*R1减R2值再减去!CARRY ;后传送到R6*/
RSC R7,R1,R2 ;/*R2减R1值再减去!CARRY ;后传送到R7*/
stop
BL stop
END ;/*程序结束*/
2、试验步骤
1)编程
Step1: 开启 ADS
点击桌面开始程序ARM Developer Suite v1.2 CodeWarrior for ARM Developer Suite,弹出 CodeWarrior for ARM Developer Suite 界面。
Step2: 建立新工程,点击 FileNew,弹出新建工程对话框。
Step3: 建立新汇编文件,点击 FileNew,弹出新建工程对话框。
Step4: 将汇编文件添加至工程列表,编程。
Step5: 设置工程属性。
Step6:编译连接工程。
点击工程管理对话框中编译链接按钮。
2)调试
Step1:运行AXD,开启调试界面。
Step2:设置调试属性。
Step3:加载映像文件。
Step4:单步实施,观察程序运行,寄存器值改变。
3)保留退出。
试验二 ARM实时仿真环境建立
一、试验目标
1、熟悉 Multie-Server和 JTAG下载方法;
2、熟悉 ADS 开发环境中“AXD Debugger”组建使用;
3、熟悉掌握 ADS 调试程序方法。
二、试验内容
1、正确连接试验系统硬件系统;
2、使用 Multie-Server建立主机和试验板连接;
3、使用仿真器在线调试程序。
三、试验设备
1、硬件:
THUEA-1A试验系统;
PC 机;
JTAG 仿真器;
串口线;
并口线。
2、软件:
PC 机操作系统(WINDOWS XP);
ARM Developer Suite v1.2;
Multi-ICE V2.2;
超级终端。
四、预备知识
1、了解 ARM 体系结构;
2、了解 ARM 汇编语言;
3、掌握 C、C++语言;
4、掌握“试验一 ADS 开发环境试验”内容。
五、基础知识
1、ARM JTAG接口电路
JTAG(Joint Test Action Group,联合测试行动小组)是一个国际标准测试协议,关键用于芯片内部测试及对系统进行仿真、调试,JTAG 技术是一个嵌入式调试技术,它在芯片内部封装了专门测试电路 TAP(Test Access Port,测试访问口),经过专用 JTAG 测试工具对内部节点进行测试。
现在大多数比较复杂器件全部支持 JTAG 协议,如 ARM、DSP、FPGA 器件等。
标准 JTAG 接口是 4 线:TMS、TCK、TDI、TDO,分别为测试模式选择、测试时钟、测试数据输入和测试数据输出。
2、Multi-ICE Server 介绍
Multi-ICE Server 是由 ARM 企业提供 Windows 操作系统下 ARM JTAG 配置程序。
经过它能够使 ARM JTAG 和目标板建立通讯连接,并能够反馈目标板上
ARM 处理器硬件信息。
Multi-ICE Server 能够适应大多数 JTAG 仿真器而不需要其它尤其驱动。
这个软件为主机(上位机)和试验板(下位机)之间打建了软件桥梁(硬件桥梁就是仿真器)。
在工程下载,调试,单步运行中这个软件要一直打开。
六、试验步骤
1、硬件连接:断电进行(串并口不支持热插拔)
2、建立超级终端:
Step1:点击“程序→开始→附件→通讯→超级终端”,进入以下画面,输入名称并选择
图标:
Step2:点击确定出现以下画面,选择 COM1,点击确定:
Step3:对端口进行以下设置,并确定:
Step4:显示超级终端界面:
3、建立实时仿真
Step1:安装Multi-ICE2.2软件
打开 Multi-ICE2.2 安装文件夹,点击 Setup.exe 可实施文件,根据软件提醒选择合适路径安装 Multi-ICE2.2,假设安装路径为:C/ Program Files/ ARM/ Multi-ICE。
正确安装 Multi-ICE2.2 后,打开:C/ Program Files/ ARM/ Multi-ICE,右键单击single.cfg配置文件,选择打开方法为记事本。
在 single.cfg 相同目录:C/ Program
Files/ ARM/ Multi-ICE下,新建记事本文件:920t.cfg,将 single.cfg 记事本内容复制到 920t.cfg,然后在 920t.txt 中将全部“ARM7TDMI”更改为“ARM920t”,保留。
Step2:配置Multi-ICE2.2软件
检验好试验箱仿真器和电脑并口连接,打开试验箱电源。
在PC开发主机上选择开始>程序>ARM Multi-ICE v2.2>Multi-ICE Server进入Multi-ICE Server主界面
Step3:使用Multi-ICE2.2软件
点击 File/Load Configuration,查找路径为:C/ Program Files/ ARM/
Multi-ICE/920t. cfg,打开 920t. cfg 后,出现以下画面:
Step4:实时在线仿真器配置完成。
注意:并口类型是在PCBIOS中进行设置通常提供四种类型
□ Basic type部分BIOS提供值为Default或SPP等
□ EPP
□ ECP
□ EPP + ECP
因为ARM JTAG使用双向并口数据总线通常ECP或EPP类型能够符合要求,但在部分比较新BIOS版本中可能要选择基础类型而不是ECP或其它增强型,因为历史上原因并口规范和IEEE1283协议实施存在弹性,所以不一样计算机主板厂商在并口设计上存在部分差异,当第一次使用ARM JTAG时需要对并口类型设置多作几次试验现在我们推荐用户选择EPP类型。
4、ADS编程
Step1:打开2410TEST例程。
Step2:确定 RO_Base 地址映射在 SDRAM:0x30000000。
5、AXD仿真
Step1:运行AXD,加载映像文件。
Step2:点击“Options/Configure Target…”,选择 Multi-ICE.dll,然后点击 configure, 出现以下界面:
点击“确定”按钮,回到上一界面,点击“OK”,AXD Debugger 下实时在线仿真器设置完成,关闭 AXD Debugger界面,再次运行,就可经过实时在线仿真器进行目标代码下载调试。
试验三数码管显示试验
一、试验目标
1、了解数码管显示原理;
2、掌握数码管显示编程方法;
3、熟悉AXD仿真调试;
4、掌握超级终端下载BIN可实施文件。
二、试验内容
1、编写程序控制数码管显示;
2、ADS软件编写程序;
3、AXD调试程序;
4、超级终端下载程序。
三、试验设备
1、硬件:
THUEA-1A试验系统;
PC 机;
JTAG 仿真器;
串口线;
并口线。
2、软件:
PC 机操作系统(WINDOWS XP);
ARM Developer Suite v1.2;
Multi-ICE V2.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"
#define rSMG0 (*(volatile unsigned char *)0x20XX0000)
/****************共阴极数码管段码表*****************/
unsigned char st[16]= { 0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
/***************************************************/ void test_led(void) {
rGPACON=rGPACON & 0x7f7e1f; //端口A设置,位选数码管显示
//GPA5,6,7,8,15
rGPADAT=0x8000; //打开74HC573 rSMG0=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 机操作系统(WINDOWS XP);
ARM Developer Suite v1.2;
Multi-ICE V2.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 <string.h>
#include "2410addr.h"
#include "2410lib.h"
#include "def.h"
/***************************************************/
void Read_value(int data); //按键显示函数
void __irq Keyboard_Int(void); //键盘扫描函数
/***************************************************/
unsigned char st[4][4]= { //共阴极数码管段码表
{0x71,0x79,0x5e,0x39},
{0x7c,0x77,0x6f,0x7f},
{0x07,0x7d,0x6d,0x66},
{0x4f,0x5b,0x06,0x3f},
};
/***************************************************/
void Test_keyboard(void) //键盘显示函数初始化
{
#define rSMG0 (*(volatile unsigned char *)0x20XX0000)
pISR_EINT4_7=(unsigned)Keyboard_Int;
rGPECON=rGPECON & 0xffC0157f; //端口E设置,用于连接4*4键盘rGPECON=rGPECON | 0x1540; //GPE3~GPE6:输出;GPE7~GPE10:输入rGPEUP=rGPEUP | 0x7f8; //GPE3~10 pull-up DISABLE rGPEDAT = rGPEDAT & 0xff87; //GPE3~GPE6:Output0
rGPACON=rGPACON & 0x7f7e1f; //端口A设置,位选数码管显示
//GPA5,6,7,8,15 IO about smg rGPADAT=0x8000; //初始显示"0"
rSMG0= 0x3f;
rGPADAT=0x0000;
rGPFCON=rGPFCON & 0x3fff; //端口F设置,外中止设置,检测键盘rGPFCON|=(2<<14); //GPF7:INT7
rGPFUP|=(0x01<<7); //GPF7 pull-up DISABLE
rEXTINT0 &=~(0x1<<28); //
rEXTINT0 &=~(0x1<<29); //
rEXTINT0 &=~(0x1<<30); //INT7 Low level
rEINTMASK &=~(0x1<<7); //INT7 Enable 外中止开启
rSRCPND &=~(0x1<<4);
rINTMOD &=~(0x1<<4);
rINTPND &=~(0x1<<4);
rINTMSK &=~(BIT_EINT4_7);
}
/***************************************************/ void Read_value(int data) //键值显示函数
{
unsigned int keydata;
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 __irq Keyboard_Int(void) //扫描键值中止函数
{
int i; //定义行变量
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命令加载程序。