资源描述
1、ADS 1.2集成开发环境练习1.1实验目的 了解ADS 1.2集成开发环境的使用方法。1.2实验设备硬件:PC机一台软件:Windows98/XP/2000系统,ADS 1.2集成开发环境1.3实验内容1. 建立一个新的工程;2. 建立一个C源文件,并添加到工程中;3. 设置编译连接控制选项;4. 编译连接工程。1.4实验预习要求仔细阅读本书第2.2节ADS工程编辑的内容。1.5实验步骤1. 启动ADS1.2 IDE集成开发环境,选择【File】-【New】,使用ARM Executable Image 工程模板建立一个工程,工程名称为ADS,见图1。图1建立ARM指令代码的工程2.选择【File】-【New】建立一个新的文件TEST1.S,设置直接添加到项目中,见 图1.2。输入如程序清单1所示的代码,并保存,见图1.3。图2新建文件TEST1.S程序清单1 TEST1.S文件代码AREA Example1,C0DE,READ0NIY ;声明代码段 ExamplelENTRYCODE32START MOV R0,#15;标识程序入口;声明32位ARM指令;设置参数MOV R1,#8ADDS R0,R0,R1;R0 = R0 + R1B STARTEND图3添加了 TEST1.S的工程管理窗口1. 选择【Edit-【DebugRel Settings】,在DebugRel Settings对话框的左边选择ARM Linker项,然后在Output页设置连接地址(见图1.4),在Options页设置调试入口地址(见图 1.5)。图4工程连接地址设置图5工程调试入口地址设置4.选择【Project】-【Make】,将编译连接整个工程。1.6思考工程模板有何作用?(提示:编译控制设置)如何强行重新编译工程的所有文件?(提示:选择【Project-【Remove Object Code】 删除工程中的*.obj文件)2汇编指令实验12.1实验目的1 .了解ADS 1.2集成开发环境及ARMulator软件仿真;2.掌握ARM7TDMI汇编指令的用法,并能编写简单的汇编程序;3.掌握指令的条件执行和使用LDR/STR指令完成存储器的访问。2.2实验设备硬件:PC机一台软件:Windows98/XP/2000系统,ADS 1.2集成开发环境2.3实验内容使用LDR指令读取0x40003100上的数据,将数据加1,若结果小于10则使用STR指 令把结果写回原地址,若结果大于等于10,则把0写回原地址。使用ADS 1.2软件仿真,单步、全速运行程序,设置断点,打开寄存器窗口(Processor Registers)监视R0、R1的值,打开存储器观察窗口(Memory)监视0x40003100上的值。2.4实验预习要求仔细阅读ARM与嵌入式系统基础教程第4章ARM指令系统的内容;仔细阅读本书第2.2、2.3节ADS工程编辑和AXD调试的内容。(本实验使用软件仿真)2.5实验步骤1. 启动 ADS 1.2,使用 ARM Executable Image 工程模板建立一个工程Instruction1。2. 建立汇编源文件TEST2.S,编写实验程序,然后添加到工程中。3. 设置工程连接地址RO Base为0x40000000,RW Base为0x40003000。设置调试入 口地址 Image entry point 为 0x40000000。4. 编译连接工程,选择【Project-【Debug】,启动AXD进行软件仿真调试。5. 打开寄存器窗口(Processor Registers),选择Current项监视R0、R1的值。打开存储 器观察窗口(Memory)设置观察地址为0x40003100,显示方式Size为32Bit,监视 0x40003100地址上的值。说明:在Memory窗口中点击鼠标右键,Size项中选择显示格式为8Bit、16Bit、32Bit。 如图1.6所示。6. 可以单步运行程序,可以设置/取消断点,或者全速运行程序,停止程序运行,调试 时观察寄存器和0x40003100地址上的值。运行结果见图1.7。Tirpfc | lup | filn 口|1UAUUKLL腳HJ.ri.-VLU4 1 WrPl12AEC1JCBF-FUM10E.Lx:tD BH0f MMthEi电BTQk.L. Viedk Vtlu_1帰F申Savch Bnu*;.TCClt库中曲训皿R卅1TcjeIi-ntFL1ABiJ - PwffitfrfMOiaaiDOEi Exvih,Td?L - Mi -Ik pr !. I TftlE-His-Md-Hi-Ra pni.K |0 | J. L 23AFL4t aiithrn l:bdeIxJdDDSlflOm r? 12F5TD7 iMIe-v dx-xki3BOF J.D44 or弾2JC14MBCJLF 却 傩1493 阳9FB243F4 17 Fl1721HiW MJ CSC5 HE DEC7EBl EA 8bBEGOJib72?1 2C開坍 帖J?aU CE M3B祐J? n图6 Memory窗口显示格式设置图7汇编实验1程序运行结果2.6实验参考程序 汇编指令实验1的参考程序见程序清单2。程序清单2汇编指令实验1参考程序COUNT EQU 0x40003100 ;定义一个变量,地址为 0x40003100AREA Example2,CODE,READONLY ;声明代码段 Example2 ENTRY ;标识程序入口CODE32 ;声明32位ARM指令START LDR R1,=COUNT ; R1 = COUNTMOV R0,#0 ; R0 = 0STR R0,R1 ; R1 = R0,即设置 COUNT 为 0LOOPLDR R1,=COUNTLDR RO,R1 ; RO = R1ADD R0,R0,#1 ; RO = RO + 1CMP RO,#1O ; RO与10比较,影响条件码标志MOVHS R0,#0 ;若R0大于等于10,则此指令执行,R0 = 0STR R0,R1 ; R1 【Reload Current Image重新加 载映象文件)3汇编指令实验23.1实验目的1. 掌握ARM数据处理指令的使用方法;2. 了解ARM指令灵活的第2个操作数。3.2实验设备硬件:PC机一台软件:Windows98/XP/2000系统,ADS 1.2集成开发环境3.3实验内容1. 使用MOV和MVN指令访问ARM通用寄存器;2. 使用ADD、SUB、AND、ORR、CMP、TST等指令完成数据加减运算及逻辑运算。3.4实验预习要求仔细阅读ARM与嵌入式系统基础教程第4章ARM指令系统的内容;仔细阅读本书第2.2、2.3节ADS工程编辑和AXD调试的内容。(本实验使用软件仿真)3.5实验步骤1. 启动 ADS 1.2,使用 ARM Executable Image 工程模板建立一个工程 Instruction2。2. 建立汇编源文件TEST3.S,编写实验程序,然后添加到工程中。3. 设置工程连接地址RO Base为0x40000000, RW Base为0x40003000。设置调试入 口地址 Image entry point 为 0x40000000。4. 编译连接工程,选择【Project】-【Debug】,启动AXD进行软件仿真调试。5. 打开寄存器窗口(Processor Registers),选择Current项监视各寄存器的值。 说明:使用鼠标左键选择某一个寄存器,然后点击鼠标右键,Format项中选择显示 格式Hex、Decimal等等。如图1.8所示。图8设置寄存器显示格式6. 单步运行程序,观察寄存器值的变化。说明:有变化的寄存器会以红色显示。如图1.9所示。創甫I bgl圖|护|划鱼區 K4LSLFFeglswrValut& Cuiien I:JStQ11卜:E】9沁當OteKOUMDO19OxEO(J2CaOO卜忙5flxTFFFFI78卜:E旨fa4Hmiac-* -tiodx95A3BCEhoonmonk2Ote5CEE7AFrl-34* LB丄字20片iEj_gjE|fji_gg | |Ms,EQU3TAPTI#EQU EDU(12AREA I EfiTPT E0UE32navMQV皿HOT1=MVMrEUBF图9寄存器值更新的显示3.6实验参考程序汇编指令实验2的参考程序见程序清单3。程序清单3汇编指令实验2参考程序XEQU 11 ;定义X的值为11YEQU 8 ;定义Y的值为8BIT23 EQU (1VV23);定义 BIT23 的值为 0x00800000AREA Example3,CODE,READONLY ;声明代码段 Example3ENTRY ;标识程序入口CODE32 ;声明32位ARM指令START;使用 MOV、ADD 指令实现:R8 = R3 = X + YMOV R0,#X ; R0 = X,X的值必须是8位图数据MOV R1,#Y ; R1 = Y, Y的值必须是8位图数据ADD R3,R0,R1 ;即是 R3 = X + YMOV R8,R3 ; R8 (2*X)吗?若大于则R5 = R5&0xFFFF0000,否则R5 =R5l0x000000FFMOV R0,#YADD R0,R0,R0,LSL #2 ;计算 R0 = Y + 4*Y = 5*YMOV R0,R0,LSR #1 ;计算 R0 = 5*Y/2MOV R1,#XMOV R1,R1,LSL #1 ;计算 R1 = 2*XCMP R0,R1 ;比较R0和R1,即(5*Y/2)和(2*X)进行比较LDRHI R2,=0xFFFF0000 ;若(5*Y/2)(2*X),贝V R2 (2*X),则 R5 = R5&R2ORRLS R5,R5,#0x000000FF ;若(5*Y/2)W(2*X),则 R5 = R5l0x000000FF;使用TST指令测试R5的bit23是否为1,若是则将bit6位清零(使用BIC指令)TST R5,#BIT23BICNE R5,R5,#0x00000040B STARTEND3.7思考指令MOV R0,#0x12345678是否正确?为什么?将参考程序中应用CMP指令的代码,功能改为若(5*Y/2)(2*X)则R5 = R5|0x000000FF, 否则R5 = R5&0xFFFFOOOO,程序应如何修改?更改参考程序的X的值为200,Y的值为163,单步运行程序,每执行一步程序的结果 是多少?如何实现64位加法运算(R6、R5) = (R6、R5) + (R3、R2)?(提示:使用ADC指令)4汇编指令实验34.1实验目的1. 掌握ARM乘法指令的使用方法;2. 了解子程序编写及调用。4.2实验设备硬件:PC机一台软件:Windows98/XP/2000系统,ADS 1.2集成开发环境4.3实验内容使用STMFD/LDMFD、MUL指令编写一个整数乘方的子程序,然后使用BL指令调用 子程序计算 的值。4.4实验预习要求仔细阅读ARM与嵌入式系统基础教程第4章ARM指令系统的内容;仔细阅读本书第2.2、2.3节ADS工程编辑和AXD调试的内容。(本实验使用软件仿真)4.5实验原理ynA = X*X *X*X,其中相乘的X的个数为n个。先将X的值装入R0和R1,使用 寄存器R2进行计数,循环n-1次R0 = RO*R1,运算结果就保存在R0中。(不考虑结果溢 出问题)注意,若n为0,则运算结果直接赋1;若n为1,则运算结果直接赋X。4.6实验步骤1. 启动 ADS 1.2,使用 ARM Executable Image 工程模板建立一个工程 Instruction3。2. 建立汇编源文件TEST4.S,编写实验程序,然后添加到工程中。3. 设置工程连接地址RO Base为0x40000000,RW Base为0x40003000。设置调试入 口地址 Image entry point 为 0x40000000。4. 编译连接工程,选择【Project】-【Debug】,启动AXD进行软件仿真调试。5. 打开寄存器窗 口(Processor Registers),选择 Current 项监视寄存器 R0、Rl、R13 (SP) 和R14(LR)的值。6. 打开存储器观察窗口(Memory)设置观察地址为0x40003EA0,显示方式Size为 32Bit,监视从0x40003F00起始的满递减堆栈区。7. 单步运行程序,跟踪程序执行的流程,观察寄存器值的变化和堆栈区的数据变化, 判断执行结果是否正确。8. 调试程序时,更改参数X和n来测试程序,观察是否得到正确的结果。例如:先复 位程序(选择【File】-【Reload Current Image),接着单步执行到“BL POW”指令,在寄存器窗口中将R0、R1的值进行修改,然后继续运行程序。说明:用鼠标双击寄存器窗口的寄存器,即可修改寄存器的值。输入数据可以是十进制 数(如136、198),也可以是十六进数(如0x123,0xF0),输入数据后回车确定。4.7实验参考程序汇编指令实验3的参考程序见程序清单4。程序清单4汇编指令实验3参考程序;文件名:TEST4.S;功能:计算X的n次方的值;说明:X和n均为无符号整数X EQU 9 ;定义X的值为9 nEQU 8 ;定义n的值为8AREA Example4,C0DE,READ0NIY ;声明代码段 Example4ENTRY ;标识程序入口CODE32 ;声明32位ARM指令START LDR SP,=0x40003F00 ;设置堆栈(满递减堆栈,使用STMFD/LMDFD指令) LDR R0,=XLDR R1,=nBL POW ;调用子程序POW,返回值为R0HALT B HALT;名称:POW;功能:整数乘方运算。;入口参数:R0底数;R1指数;出口参数:R0运算结果;占用资源:RO、R1;说明:本子程序不考虑溢出问题POWSTMFD SP!,R1-R12,LR;寄存器入栈保护MOVS R2,R1 ;将指数值复制到R2,并影响条件码标志MOVEQ R0,#1 ;若指数为0,则设置R0=1BEQ POW_END ;若指数为0,则返回CMP R2,#1BEQ POW_END ;若指数为1,则返回。(此时R0没有被更改)MOV R1,R0 ;设置DO_MUL子程序的入口参数R0和R1SUB R2,R2,#1 ;计数器R2 =指数值减1POW_L1 BL DO_MUL ;调用 DO_MUL 子程序,RO = R1 * ROSUBS R2,R2,#1 ;每循环一次,计数器R2减1BNE POW_L1 ;若计数器R2不为0,跳转到POW_L1POW_END LDMFD SP!,R1-R12,PC;寄存器出栈,返回;名称:DO_MUL;功能:32位乘法运算。;入口参数:R0乘数;R1 被乘数;出口参数:R0计算结果;占用资源:RO、R1;说明:本子程序不会破坏R1DO_MUL MUL R0,R1,R0; RO = R1 * ROMOV PC,LR ;返回END4.8思考若需要考虑溢出问题(使用32位运算结果,判断运算是否溢出),如何修改实验参考程 序?(提示:使用UMULL指令)在实验参考程序中的DO_MUL子程序,是否可以使用B、ADD、SUB指令返回?(提 示:修改程序进行测试)5汇编指令实验45.1实验目的 学习ARM微控制器的16位Thumb汇编指令的使用方法。5.2实验设备硬件:PC机一台软件:Windows98/XP/2000系统,ADS 1.2集成开发环境5.3实验内容使用Thumb指令ADD、MOV、CMP、B实现1+2+3-+N的运算(N为0时,结果为0; N为1时结果1)。5.4实验预习要求仔细阅读ARM与嵌入式系统基础教程第4章ARM指令系统的内容;仔细阅读本书第2.2、2.3节ADS工程编辑和AXD调试的内容。(本实验使用软件仿真)5.5实验原理ARM微控制器复位后处于ARM状态,此时只能执行ARM指令,所以需要使用BX指 令切换到Thumb状态,才能开始执行Thumb指令。程序使用R0保存结果,所以一开始就要初始化为0;循环执行R0=R0+R1, R1为循环 计数器,从1开始计数,每一次循环R1加1;当循环计数器R1的值到达N时,运算结束。5.6实验步骤1. 启动 ADS 1.2,使用 ARM Executable Image 工程模板建立一个工程 Instruction4。2. 建立汇编源文件TEST5.S,编写实验程序,然后添加到工程中。3. 设置工程连接地址RO Base为0x40000000,RW Base为0x40003000。设置调试入 口地址 Image entry point 为 0x40000000。4. 编译连接工程,选择【Project】-【Debug】,启动AXD进行软件仿真调试。5. 打开寄存器窗口(Processor Registers),选择Current项监视各寄存器的值。6. 单步运行程序,注意执行BX R0指令前后CPSR寄存器的T位。说明:在寄存器窗口的CPSR寄存器,大写字母的位表示该位为1,小写字母的位表示 该位为0(比如“T”表示T位为1, “t”表示T位为0)。5.7实验参考程序汇编指令实验4的参考代码见程序清单5。程序清单5汇编指令实验4参考程序;文件名:TEST5.S;功能:计算1+2+.+N的值;说明:N20,当N=0时结果为0;当N=1时结果为1。NEQU 100 ;定义N的值为100AREA Example5,CODE,READONLY ;声明代码段 Example5ENTRY ;标识程序入口CODE32 ;声明32位ARM指令ARM_CODE LDR SP,=0x40003F00 ;设置堆栈指针ADR R0,THUMB_CODE+1BX RO ;跳转并切换处理器状态LTORG ;声明文字池CODE16 ;声明16位Thumb指令THUMB_CODELDR R0,=N ;设置子程序SUM_N的入口参数BL SUM_N ;调用子程序SUM_NB THUMB_CODE;名称:SUM_N;功能:计算1+2+.+N的值;入口参数:R0 N的值;出口参数:R0运算结果;占用资源:R0;说明:当N=0时结果为1;当N=1时结果为1。;若运算溢出,结果为0。SUM_NPUSH R1-R7,LR;寄存器入栈保护MOVS R2,R0 ;将N的值复制到R2,并影响条件码标志BEQ SUM_END ;若N的值为0,则返回。(此时R0没有被更改)CMP R2,#1BEQ SUM_END ;若N的值为1,则返回。(此时R0没有被更改)MOV R1,#1 ;初始化计数器R1=1MOV R0,#0 ;初始化结果寄存器R0=0SUM_L1 ADD R0,R1; RO = RO + R1BCS SUM_ERR ;结果溢出,跳转到SUM_ERRCMP R1,R2 ;将计数器的值与N比较BHS SUM_END ;若计数器的值三N,则运算结束ADD R1,#1B SUM_L1SUM_ERR MOV R0,#0SUM_END POP R1-R7,PC;寄存器出栈,返回 END5.8思考在Thumb指令只有哪一条指令具有条件执行功能?Thumb指令“ADD Rd,Rm”是否会更新条件码标志?Thumb指令“MOV R8,#0xFF000000”是否正确?如果不正确应如何更改?6汇编指令实验56.1实验目的通过实验了解如何使用ARM汇编指令实现结构化程序编程。6.2实验设备z硬件:PC机一台z软件:Windows98/XP/2000系统,ADS 1.2集成开发环境6.3实验内容使用ARM汇编指令实现if条件执行;使用ARM汇编指令实现for循环结构;使用ARM汇编指令实现while循环结构;使用ARM汇编指令实现dowhile循环结构;使用ARM汇编指令实现switch开关结构。6.4实验预习要求仔细阅读ARM与嵌入式系统基础教程第4章ARM指令系统的内容;仔细阅读本书第2.2、2.3节ADS工程编辑和AXD调试的内容。(本实验使用软件仿真) 6.5实验步骤1. 思考如何使用ARM汇编指令实现结构化编程,具体的条件自己设定。比如if条件 执行,if(xy) z=0,设x为R0,y为R1,z为R2,汇编代码如何编写。2. 启动 ADS 1.2,使用 ARM Executable Image 工程模板建立一个工程 Instruction5。3. 建立汇编源文件TEST6.S,编写实验程序,然后添加到工程中。4. 设置工程连接地址RO Base为0x40000000, RW Base为0x40003000。设置调试入 口地址 Image entry point 为 0x40000000。5. 编译连接工程,选择【Project】-【Debug】,启动AXD进行软件仿真调试。6. 打开寄存器窗口(Processor Registers),选择Current项监视各寄存器的值。7. 单步运行程序,判断程序是否按设计的程序逻辑执行。6.6实验参考程序汇编指令实验5的参考程序见程序清单6。程序清单6汇编指令实验5参考程序AREA Example6,CODE,READONLY ;声明代码段 Example6ENTRY ;标识程序入口CODE32 ;声明32位ARM指令START ; if(xy) z=100;else z=50;;设x为R0,y为R1,z为R2 (x、y、z均为无符号整数)MOV R0,#76 ;初始化x的值MOV R1,#243 ;初始化y的值 CMP R0,R1 ;判断 xy?MOVHI R2,#100 ; xy 条件正确,z=100MOVLS R2,#50 ;条件失败,z=50;for(i=0; i0);;设x为R0 (x为无符号整数) MOV R0,#5 ;初始化x的值DOWHILE_L1 ADD R0,R0,#-1 ;循环体,xDOWHILE_L2 MOVS R0,R0; R0 4x000 QM07UkDOODOCOBKesOxODOOOOO-eIDDxDD口 cm宜-Ell呗QOOQOOBbMOCiMOt-E1SBx7Fm:313-pcnvinnihinri4jfe-cpst 3P3EnzcvqxE t lT35E回FIOH-T!8!iiIJl;定宜flf枝的尢小-UJ. STICK LEGTOlU3SVC ST心 LEiSW(|U4TIfl_STiiJEK_LEGWQ0REIJU占ABT_STJIEK_:LZM?EQU7UHD_ST*CK_LDGTHEQU9AREA.ExupleT,JLDEHT3LT11C0M3Z1Z叭和13KUVHl,.#!14H0V15MOV叭鶴16MOV:17MOV丄也MOV叭肝MOV20MOV21MOV枫艸22MOVK1031023MOVRL1.HL24MOVP12,fl2肺i 2BLInitStack2?图10 CPSR寄存器显示方式7.6实验参考程序ARM微控制器工作模式实验的参考程序见程序清单7。 程序清单7 ARM微控制器工作模式实验参考程序 ;定义堆栈的大小USR_STACK_LEGTH EQU 64SVC_STACK_LEGTH EQU 0FIQ_STACK_LEGTH EQU 16IRQ_STACK_LEGTH EQU 64ABT_STACK_LEGTH EQU 0UND_STACK_LEGTH EQU 0AREA Example7,CODE,READONIY ;声明代码段 Example7ENTRY ;标识程序入口CODE32 ;声明32位ARM指令START MOV R0,#0MOV Rl,#lMOV R2,#2MOV R3,#3MOV R4,#4MOV R5,#5MOV R6,#6MOV R7,#7MOV R8,#8MOV R9,#9MOV R10,#10MOV R11,#11MOV R12,#12BL InitStack ;初始化各模式下的堆栈指针;打开IRQ中断(将CPSR寄存器的I位清零)MRS R0,CPSR ; R0 = CPSRBIC R0,R0,#0x80MSR CPSR_cxsf,RO ; CPSR = R0;切换到用户模式MSR CPSR_c, #0xd0MRS R0,CPSR;切换到管理模式MSR CPSR_c, #0xdfMRS R0,CPSRHALT B HALT;名称:InitStack;功能:堆栈初始化,即初始化各模式下的堆栈指针。;入口参数:无;出口参数:无;说明:在特权模式下调用此子程序,比如复位后的管理模式InitStackMOV R0, LR ; R0 0)void Main(void) uint32 i;sum = 0;for(i=0; i=N; i+) sum += i;while(1);程序清单1.9简单的起动代码;起动文件。初始化C程序的运行环境,然后进入C程序代码。IMPORT IImage$RO$LimitlIMPORT |Image$RW$Base|IMPORT |Image$ZI$Base|IMPORT IImage$ZI$LimitlIMPORT Main ;声明C程序中的Main()函数AREA Start,CODE,READONIY ;声明代码段 StartENTRY ;标识程序入口CODE32 ;声明32位ARM指令Reset LDR SP,=0x40003F00;初始化C程序的运行环境LDR R0,=|Image$RO$Limit|LDR R1,=|Image$RW$Base|LDR R3,=|Image$ZI$Base|CMP R0,R1BEQ LOOP1LOOP0 CMP R1,R3LDRCC R2,R0,#4STRCC R2,R1,#4BCCLOOP0LOOP1 LDR R1,=|Image$ZI$Limit|MOV R2,#0LOOP2 CMP R3,R1STRCC R2,R3,#4BCC LOOP2B Main ;跳转到C程序代码Main()函数END8.7思考在实验参考程序中,Startup.S文件的作用是什么?如果没有Startup.S文件,C程序会运 行出错吗?实验程序中的Main()函数名是否可以更改为其它名字?(提示:Main只是一个标号)9C语言调用汇编程序实验9.1实验目的掌握在C语言程序中调用汇编程序,了解ATPCS基本规则。9.2实验设备z硬件:PC机一台z软件:Windows98/XP/2000系统,ADS 1.2集成开发环境9.3实验内容在C程序调用汇编子程序,实现两个整数的加法运算。汇编子程序的原型为:uint32 Add(uint32 x, uint32 y)其中 uint32 已定义为 unsigned into9.4实验预习要求仔细阅读ARM公司的ATPCS的相关文档,比如ATPCS.PDF;仔细阅读本书第2.2、2.3节ADS工程编辑和AXD调试的内容。(本实验使用软件仿真) 9.5实验步骤1. 启动ADS 1.2,使用ARM Executable Image工程模板建立一个工程ProgramCl。2. 建立源文件Startup.S、Add.S和Test.c,编写实验程序,然后添加到工程中。3. 设置工程连接地址RO Base为0x40000000, RW Base为0x40003000。设置调试入 口地址 Image entry point 为 0x40000000 o4. 设置工程连接选项,位于开始位置的起始代码段设置为Startup.o的Start段。5. 编译连接工程,选择【Project】-【Debug】,启动AXD进行软件仿真调试。6. 在Test.c文件中的调用Add()的代码处设置断点,然后全速动行程序。7. 程序在断点处停止。使用Setp In单步运行程序,观察程序是否转到汇编程序Add.S。8. 选择【Processor Views】-【Va r iab le s】)打开变量观察窗口,观察全局变量的值, 单步/全速运行程序,判断程序的运算结果是否正确。9.6实验参考程序C语言调用汇编程序实验的参考程序见程序清单1.10。汇编加法函数代码见程序清单1.11。程序清单1.10 C语言调用汇编程序实验参考程序#define uint8 unsigned char#define uint32 unsigned intextern uint32 Add(uint32 x, uint32 y);uint32 sum;/调用汇编程序Add实现加法运算void Main(void) sum = Add(555, 168);while(1);程序清单1.11汇编加法函数代码;加法函数,原型为 uint32 Add(uint32 x, uint32 y)。EXPORT AddAREA AddC,CODE,READONLY ;声明代码段 AddCENTRY ;标识程序入口CODE32 ;声明32位ARM指令Add ADD R0,R0,R1 ;输入参数 x 为 R0,y 为 R1MOV PC,LR ;返回值为ROEND9.7思考在实验参考程序中,如何以指针形式传递参数?(即设计uint32 Add(uint32 *x, uint32 *y) 函数)10 GPIO输出控制实验110.1实验目的1. 掌握LPC2200专用工程模板的使用;2. 掌握EasyJTAG仿真器的安装和使用;3. 能够在EasyARM2200开发板上运行第一个程序(无操作系统);4. 熟悉LPC2000系列ARM7微控制器的GPIO控制。10.2实验设备 z硬件:PC机一台 EasyARM2200开发板一套 z软件:Windows98/XP/2000系统,ADS 1.2集成开发环境10.3实验内容控制EasyARM2200开发板上的蜂鸣器报警。先使用片外RAM(IS61LV25616AL芯片) 进行调试,调试通过后将程序固化到片外FLASH(SST39VF160芯片),然后脱机运行。10.4实验预习要求仔细阅读ARM与嵌入式系统基础教程第5.7节的LPC2000管脚连接模块,第5.9 节的GPIO。仔细阅读本书第1章的内容,了解EasyARM2200开发板的硬件结构,注意蜂鸣器的相 关控制电路。仔细阅读本书第2章的内容,了解ADS 1.2集成开发环境、LPC2200专用工程模板、 EasyJTAG仿真器的应用。10.5实验原理如何在EasyARM2200上运行第一个程序。z 安装 ADS 1.2 (PC)z 了解 ADS 1.2 (PC)z连接EasyJTAG仿真器和EasyARM2200开发板(硬件)z安装EasyJTAG驱动程序(PC)z添加工程模板(PC)z用工程模板建立第一个工程(PC)z仿真调试第一个工程(PC+硬件)说明
展开阅读全文