ARM实验指导书wjq.docx

上传人:b****6 文档编号:7956853 上传时间:2023-01-27 格式:DOCX 页数:29 大小:269.10KB
下载 相关 举报
ARM实验指导书wjq.docx_第1页
第1页 / 共29页
ARM实验指导书wjq.docx_第2页
第2页 / 共29页
ARM实验指导书wjq.docx_第3页
第3页 / 共29页
ARM实验指导书wjq.docx_第4页
第4页 / 共29页
ARM实验指导书wjq.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

ARM实验指导书wjq.docx

《ARM实验指导书wjq.docx》由会员分享,可在线阅读,更多相关《ARM实验指导书wjq.docx(29页珍藏版)》请在冰豆网上搜索。

ARM实验指导书wjq.docx

ARM实验指导书wjq

实验一、ARM开发环境的建立

一、实验目的

学会安装ADS集成环境及连接仿真硬件平台。

二、实验设备

硬件:

嵌入式实验平台一套、仿真器一个、PC机一台。

软件:

Windows98/2000/NT/XP操作系统、仿真器驱动程序、ADS开发软件一套。

三、实验内容

正确安装完全版ARMADS1.2集成环境,并了解JTAG硬件仿真环境的一些设置和工作方法。

四、实验原理

ARMADS(ARMDEVELOPERSUITE)是ARM平台集成开发环境,它包括两个部分:

CodeWarriorforARMDeveloperSuite和AXDdebugger。

AXD调试通过Windows驱动程序及中间件软件与JTAG接口连接,并通过JTAG接口与硬件平台连接

本实验使用ARMJtagDebugFinal中间件软件通过LPT1并行接口经JTAG协议转换连接ARM目标板。

五、实验操作步骤

1、安装ADS1.2集成开发环境,把ADS1.2_Licence.rar中的license.dat文件copy到“C:

\ProgramFiles\ARM\ADSv1_2\licenses”路径中,覆盖原来的license.dat,若安装目录设置为其他目录,必须copy到相应目录中。

2、启动CodeWarriorforARMDeveloperSuite集成开发环境,设置许可证文件指向最新license.dat文件。

3、首次使用时,

把文件夹ARMJtagDebugFinal.rar中的文件copy到“C:

\ProgramFiles\ARM\ADSv1_2\ARMJtagDebugFinal”目录中或其他安装目录;

先安装ARMJtagDebugFinal驱动软件(以后不用再安装),即执行文件夹中的“安装驱动.exe”程序,并点击安装按钮,分别安装“并口驱动”和“OCX”;

在桌面建立Arm7Agent和Arm9Agent两给快捷连接,分别指向ARMJtagDebugFinal目录中的Arm9.exe,Arm7.exe;

4安装完毕驱动后,每次调试前,必须先启动运行Arm7Agent或Arm9Agent调试代理软件(中间件),调试过程始终不要关闭调试代理程序,启动并正确连接硬件目标系统之后,既可以开始调试ARM7系统或ARM9系统;

5、如果在以后的使用过程中发现程序无法启动,重新执行“安装驱动.exe”即可;

6、在ADW(SDT)/AXD(ADS)的调试配置选项里选择remote_a.dll

7、在ADW/AXD的调试配置里IP地址必须填写:

127.0.0.1

8、具体的调试使用可以参考"jtag.exe"的使用方法

六、常见问题

1、THUMB/ARM混合编程时断点设置要素当CPU处于一种CPU模式时(THUMB或ARM)断点只可以设置在当前模式下的指令处不可以设置在另一种模式下的指令解决方案设置一个断点在CPU模式切换指令处(如BX)当程序运行到此指令并停下来后然后通过单步执行(Step)进入另一种状态这时候就可以在当前模式下任意设置断点了;

2、THUMB/ARM混合编程时因为ADW/AXD启动时默任的CPU模式为ARM模式如果你启动调试前你的ARMCPU正在执行Thumb模式指令那么将会导致调试错误解决方案按一下你的板子的复位键,然后再启动ADW/AXD即可;

3、为了加快软件影响单步执行速度现在暂时屏蔽了semihosting功能如果你需要此功能可以EMAIL索取;

4、如果出现无法逼使CPU进入调试的提示只需要复位你的板子,重新启动软件即可;

5、如果发现软件没有任何动作把它关了再启动;

6、如果发现软件根本无法运行看不到其运行界面那么执行“安装驱动.exe”,重新驱动OCX即可;

7、如果出现打开并口失败,那么执行安装驱动.exe,重新并口驱动即可;

8、如果提示检测不到ARM核如果你的CPU没坏供电正常那么就一定是你的JTAG板子问题了,应该参考常用的那种"SDT"或"Wiggler"接线然后在JTAG调试软件选择对应的选项SDT或wiggler或自定义;

9、排除这些如果出现其他的调试错误,那么就是你设置ADW/AXD或你的板子问题了

10、一些常见问题请参考上的BBS;

11、有任何疑问请EMAILsendtoyou@Tang-ZhongGen,调程序

实验二、ADS1.2集成开发环境练习

ARMADS(ARMDeveloperSuiteV1.2)是ARM公司,为开发ARM内核处理机而提供的集成开发环境(IDE)和集成调试环境(ICE)。

本书涉及的实验均以ADS为默认开发、调试环境。

一、实验目的

学会ADS集成环境。

二、实验设备

硬件:

嵌入式实验平台一套、仿真器一个、PC机一台。

软件:

Windows98/2000/NT/XP操作系统、仿真器驱动程序、ADS开发软件一套。

三、实验内容

正确安装完全版ARMADS1.2集成环境,并了解整个仿真环境的一些设置和工作方法。

四、实验原理

ARMADS(ARMDEVELOPERSUITE)是ARM平台集成开发环境,它包括两个部分,

CodeWarriorforARMDeveloperSuite和AXDdebugger,前者具有编辑,编译,链接等功能并可生成二进制文件(.bin)和可执行的映象文件(.axf)以及各源文件的目标代码(.o);

后者可以装载映象文件或二进制文件到ARM平台,并可实现跟踪调试。

五、实验操作步骤

1.启动CodeWarriorforARMDeveloperSuite(ADS集成开发环境),点击开始菜单/程序/ARMDeveloperSuitev1.2/CodeWarriorforARMDeveloperSuite会出现如下界面:

2.点击【File】菜单中的【NEW】,在打开的菜单中选择PROJECT,在窗口中定义路径、名称以及工程项目的属性(ARMEXECUTABLEIMAGE)然后点击“确定”。

3.生成的项目默认目标有DEBUG(调试版)、RELEASE(发行版)和DEBUGREL(带部分调试信息的发行版)。

在【TARGET】中可以看到,此时的项目是个没有内容的空项目,需要加入文件【FILES】。

4.点击【FILES】后,加入文件的方法有两种,从工具栏PROJECT下拉菜单中选择ADDFILES(CREATEGROUP文件组)或在空白区域内点击鼠标右键弹出菜单,加入FILE(GROUP)。

5.将先前编辑好的文件test.s添加到该项目中来。

6.文件添加完毕之后,可以打开其中的一个或多个文件进行修改和编辑。

与文本编辑相关的操作主要在工具栏【EDIT】菜单中,主要有删除、拷贝、剪切、粘贴、恢复等操作。

查找、替换等需要在多个文件间切换的功能菜单在【SEARCH】工具栏菜单中。

7.修改完毕后保存好新建的项目。

8.根据目标板的具体情况进行一些必要的设置工作。

在CodeWarriorforARMDeveloper

Suite中点击Edit\DebugRelSettings…..按钮。

将Linker\ARMLinker中的ROBase和RWBase值改为目标板的ROM,RAM地址,然后点击OK按钮。

对项目进行完设置后,点击Project\Make按钮或按快捷键F7,对项目文件进行编译。

9.在对项目进行了编译之后如果没有编译错误,就可以进行仿真了。

点击Project\Debug

按钮或按快捷键F5,启动AXD,用仿真器进行仿真。

提示:

本书以后所有演示程序在运行前,均需在DebugRelSettings做以下的设置:

1.ARMLinker设置ROBase为0x0c008000

2.做如下图的设置:

完成以上两步,程序方可正常执行。

六、练习题

1.仿真环境包括哪些内容?

2.仿真手段除了介绍的方式外还有哪些?

3.把平台初始化文件hm.ini中的命令行,逐行解释出来(在AXDcommand窗口下按F1可

得到命令说明)。

实验三、汇编指令实验

一、实验目的

掌握ARM7TMDI汇编指令的用法,并能编写简单的汇编程序;

学习ARM微控制器的16位Thumb汇编指令的使用方法掌握指令的条件执行;

二、实验设备

硬件:

嵌入式实验平台一套、仿真器一个、PC机一台。

软件:

Windows98/2000/NT/XP操作系统、仿真器驱动程序、ADS开发软件一套。

三、实验内容

分别使用ARM、Thumb指令ADD,MOV,CMP,B计算1+2+3+…+N的值。

四、实验原理

ARM处理器共有两种工作状态:

ARM32位,这种状态下执行字对准的ARM指令。

Thumb16位,这种状态下执行半字对准的Thumb指令。

注意:

ARM和Thumb之间状态的切换不影响处理器的模式或寄存器的内容。

ARM处理器在两种工作状态之间可以切换。

(1)进入Thumb状态。

当操作数寄存器的状态位0为1时,执行BX指令进入Thumb状态。

如果处理器在Thumb状态进入异常,则当从异常出来(IRQ、FIQ、Undef、Abort、SWI)返回时,自动切换到Thumb状态。

(2)进入ARM状态。

当操作数寄存器的状态位0为0时,执行BX指令进入ARM状态。

处理器进行异常处理(IRQ、FIQ、Undef、Abort、SWI)。

在此情况下,把PC放入异常模式链接寄存器中。

从异常向量地址开始执行也可以进入ARM状态。

Thumb状态下的寄存器集是ARM状态下寄存器集的子集。

程序员可以直接访问8个通用寄存器(R0-R7)、PC、SP、LR和CPSP。

每一种特权模式都有一组SP、LR和SPSR。

Thumb状态的R0-R7与ARM状态的R0-R7一致。

Thumb状态的CPSR和SPSR与ARM状态下的CPSR和SPSR一致。

Thumb状态的SP映射到ARM状态的R13。

Thumb状态的LR映射到ARM状态的R14。

Thumb状态的PC映射到ARM状态的PC(R15)。

本程序使用R0保存结果,所以一开始就要初始化为0;循环执行R0=R0+R1,R1为循环计数器,从1开始计数,每一次循环R1加1;当循环计数器R1的值到达N时,运算结束。

五、实验操作步骤

1.启动ADS1.2,使用ARMExecuatableImage工程模板建立一个工程ASM_Project。

2.建立源文件test2.s,编写实验程序,然后添加到工程中(ARM指令和Thumb指令实验的test2.s程序源码分别见下清单)。

3.设置工程链接地址ROBase为0x0C000000

4.编译链接工程,选择【Project】->【Debug】,启动AXD进行调试。

5.打开寄存器窗口(ProcessorRegisters),选择Current项监视各寄存器的值。

6.单步运行程序,注意执行BXR0指令前后CPSR寄存器的T位。

说明:

在寄存器窗口的CPSR寄存器,大写字母的位表示该位为1,小写字母的位表示

该位为0(比如“T”表示T位为1,“t”表示T位为0)。

7.理解并掌握本实验原理及程序,完成练习题。

六、实验参考程序

Thumb汇编指令实验的参考程序代码清单

;文件名:

test.s

;功能:

计算1+2+3+…+N的值

NEQU50;定义N的值为50

AREAtestcode,CODE,READONLY;声明代码段testcode

ENTRY;标识程序入口

CODE32;声明32位ARM指令

ARM_CODE

LDRSP,=0x40003F00;设置堆栈指针

ADRR0,THUMB_CODE+1

BXR0;跳转并切换处理器状态

LTORG;声明文字池

CODE16;声明16位Thumb指令

THUMB_CODE

LDRR0,=N;设置子程序SUM_N的入口参数

BLSUM_N;调用子程序SUM_N

BTHUMB_CODE

;名称:

SUM_N

;功能:

计算1+2+3+…+N的值

;入口参数:

R0(N的值)

;出口参数:

R0(运算结果)

SUM_N

PUSH{R1-R7,LR};寄存器入栈保护

MOVSR2,R0;将N的值复制到R2,并影响条件码标志

BEQSUM_END;若N的值为0,则返回。

CMPR2,#1

BEQSUM_END;若N的值为1,则返回。

MOVR1,#1;初始化计算器R1=1

MOVR0,#0;初始化结果寄存器R0=0

SUM_L1ADDR0,R1;R0=R0+R1

BCSSUM_ERR;结果溢出,跳转到SUM_ERR

CMPR1,R2;将计算器的值与N比较

BHSSUM_END;若计数器的值≥N,则运算结束

ADDR1,#1

BSUM_L1

SUM_ERRMOVR0,#0

SUM_ENDPOP{R1-R7,PC};寄存器出栈,返回

END

;ARM汇编指令实验的参考程序代码清单

;文件名:

add.s

;功能:

计算1+2+3+…+N的值

NEQU5;

AREAExample,CODE,READONLY

ENTRY

CODE32

START

LDRR0,=N

MOVR2,R0;R2充当计数器

MOVR0,#0

MOVR1,#0

LOOP

CMPR1,R2

BHIADD_END

ADDR0,R0,R1

ADDR1,R1,#1

BLOOP

ADD_END

BSTART

END

七、练习题

1.如何切换处理器状态

2.在Thumb指令只有哪一条指令具有条件执行功能?

3.如何判断运算结果溢出?

实验四、ARM微处理器工作模式实验

一、实验目的

通过实验掌握学会使用MSR/MRS指令实现ARM处理器工作模式的切换,观察

不同模式下的寄存器,加深对CPU结构的理解。

二、实验设备

硬件:

嵌入式实验平台一套、仿真器一个、PC机一台。

软件:

Windows98/2000/NT/XP操作系统、仿真器驱动程序、ADS开发软件一套。

三、实验内容

通过ARM汇编指令,在各种处理器模式下切换并观察各种模式下寄存器的区别;掌握

ARM不同模式的进入与退出。

四、实验原理

1.ARM处理器模式

ARM体系结构支持表1-所示的7种处理器模式。

处理器模式说明:

用户usr正常程序执行模式

FIQfiq支持告诉数据传送或通道处理

IRQIrq用于通用中断处理

管理svc操作系统保护模式

中止abt实现虚拟存储器和/或存储器保护

未定义und支持硬件协处理器的软件仿真

系统sys运行特权操作系统任务

在软件控制下也可以改变模式,外部中断或异常处理也可以引起模式发生改变。

大多数应用程序在用户模式下执行。

当处理器工作在用户模式时,正在执行的程序不能访问某些被保护的系统资源,也不能改变模式,除非异常发生。

这允许适当编写操作系统来控制系统资源的使用。

除用户模式外的其他模式成为特权模式。

它们可以自由地访问系统资源和改变模式。

中5种称为异常模式,即:

FIQ(FastInterruptRequest);

IRQ(InterruptRequest);

管理(Supervisor);

中止(Abort);

为定义(Undefined)。

当特定的异常出现时,进入相应的模式。

每种模式都有某些附加的寄存器,以避免异常出现时用户模式的状态不可靠。

剩下的模式是系统模式。

仅ARM体系结构V4以及以上的版本有该模式。

不能由于任

何异常而进入该模式。

它与用户模式有相同的寄存器,但它是特权模式,不受用户模式的限

制。

它供需要访问系统资源的操作系统任务使用,但希望避免使用与异常模式有关的附加寄

存器。

避免使用附加寄存器保证了当任何异常出现时,都不会使任务的状态不可靠。

2.程序状态寄存器

在所有处理模式下,都可以访问当前程序状态寄存器CPSR。

CPSR包含条件码标志、中断禁止位、当前处理器模式以及其他状态和控制信息。

每种异常模式都有一个程序状态保存寄存器SPSR。

当异常出现时,SPSR用于保存CPSR的状态。

CPSR和SPSR的格式如下:

313029282726876543210

NZCVQDNM(RAZ)IFTMMMMM

(1)条件码标志

N、Z、C、V:

大多数指令可以检测这些条码标志,以决定程序指令如何执行。

(2)控制位

最低8位I、F、T和M位用作控制位。

当异常出现时改变控制位。

当处理器在特权模式下时也可以由软件改变。

中断禁止位:

I置1则禁止IRQ中断;F置1则禁止FIQ中断。

T位:

T=0指示ARM执行;T=1指示Thumb执行。

在这些体系结构的系统中,可自由地使用能在ARM和Thumb状态之间切换的指令。

模式位:

M0、M1、M2、M3和M4(M[4:

0])是模式位。

这些位决定处理器的工作模

式,如表1-所列:

M[4:

0]模式可访问的寄存器

0b10000用户PC,R14~R0,CPSR

0b10001FIQPC,R14_fiq~R8_fiq,R7~R0,CPSR,SPSR_fiq

0b10010IRQPC,R14_irq~R13_irq,R12~R0,CPSR,SPSR_irq

0b10011管理PC,R14_svc~R13_svc,R12~R0,CPSR,SPSR_svc

0b10111中止PC,R14_abt~R13_abt,R12~R0,CPSR,SPSR_abt

0b11011为定义PC,R14_und~R13_und,R12~R0,CPSR,SPSR_und

0b11111系统PC,R14~R0,CPSR

(3)其他位

程序状态寄存器的其他位保留,用作以后扩展。

五、实验操作步骤

1.启动ADS1.2,建立一个新的工程;

2.建立汇编源程序文件TEST3.S,编写实验程序,添加到工程中;

3.编译链接工程,点击Debug按钮,启动AXD进行调试;

4.点击【ProcessorViews】->【Registers】,打开Current项监视个寄存器的值;

5.单步运行程序,注意观察CPSR、SPSR以及R0寄存器值得变化。

说明:

CPSR寄存器显示方式如图1-所示。

显示分为两部分,一部分是各个标志位,

另一部分是工作模式。

标志位NZCVQ为条件码标志N、Z、C、V、Q,显示为大写字母,表示该位为1;显示为小写字母,表示该位为0。

Q标志在ARM体系结构v5及以上版本的E变量中才有效。

标志位IFT为IRQ中断禁止位I、FIQ中断禁止位F、ARM微控制器状态位T,显示为

大写字母,表示该位为1;显示为小写字母,表示该位为0。

T标志在ARM体系结构v4及以上版本的T变量中才有效。

6.理解并掌握本实验原理及程序,完成练习题

 

六、实验参考程序

;ARM微控制器工作模式实验的参考程序如下:

;定义堆栈的大小

USR_STACK_LEGTHEQU64

SVC_STACK_LEGTHEQU0

FIQ_STACK_LEGTHEQU16

IRQ_STACK_LEGTHEQU64

ABT_STACK_LEGTHEQU0

UND_STACK_LEGTHEQU0

AREAExample3,CODE,READONLY;声明代码段Example3

ENTRY;标识程序入口

CODE32;声明32位ARM指令

STARTMOVR0,#0

MOVR1,#1

MOVR2,#2

MOVR3,#3

MOVR4,#4

MOVR5,#5

MOVR6,#6

MOVR7,#7

MOVR8,#8

MOVR9,#9

MOVR10,#10

MOVR11,#11

MOVR12,#12

BLInitStack;初始化各模式下的堆栈指针

;打开IRQ中断(将CPSR寄存器的1位清零)

MRSR0,CPSR;R0<-CPSR

BICR0,R0,#0X80

MSRCPSR_cxsf,R0;CPSR<-R0

;切换到用户模式

MSRCPSR_c,#0xd0

MRSR0,CPSR

;切换到管理模式

MSRCPSR_c,#0xd0

MRSR0,CPSR

HALTBHALT

;名称:

InitStack

;功能:

堆栈初始化,即初始化各模式下下的堆栈指针。

;入口参数:

;出口参数:

;说明:

在特权模式下调用此子程序,比如复位后的管理模式

InitStack

MOVR0,LR;R0<-LR,因为各种模式下R0是相同的

;设置管理模式堆栈

MSRCPSR_c,#0xd3

LDRSP,StackSvc

;设置中断模式堆栈

MSRCPSR_c,#0xd2

LDRSP,StackIrq

;设置快速中断模式堆栈

MSRCPSR_c,#0xd1

LDRSP,StackFiq

;设置中止模式堆栈

MSRCPSR_c,#0xd7

LDRSP,StackAbt

;设置为定义模式堆栈

MSRCPSR_c,#0xdb

LDRSP,StackUnd

;设置系统模式堆栈

MSRCPSR_c,#0xdf

LDRSP,StackUsr

MOVPC,R0

StackUsrDCDUsrStackSpace+(USR_STACK_LEGTH-1)*4

StackSvcDCDSvcStackSpace+(SVC_STACK_LEGTH-1)*4

StackIrqDCDIrqStackSpace+(IRQ_STACK_LEGTH-1)*4

StackFiqDCDFiqStackSpace+(FIQ_STACK_LEGTH-1)*4

StackAbtDCDAbtStackSpace+(ABT_STACK_LEGTH-1)*4

StackUndDCDUndStackSpace+

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 英语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1