1、ARM工作原理实验指导书嵌入式系统原理实验指导书(Ver1.0)刘永平编写西安邮电学院2009-5-10目 录实验一 ARM集成开发工具ADS练习 51.1 实验目的 51.2 实验设备 51.3 实验内容 51.4 实验预习要求 51.5 实验步骤 51.6 思考 19实验二 汇编指令实验1 202.1 实验目的 202.2 实验设备 202.3 实验内容 202.4 实验预习要求 202.5 实验步骤 212.6 实验参考程序 232.7 思考 24实验三 汇编指令实验2 253.1 实验目的 253.2 实验设备 253.3 实验内容 253.4 实验预习要求 253.5 实验步骤 26
2、3.6 实验参考程序 273.7 思考 30实验四 GPIO控制实验 324.1 实验目的 414.2 实验设备 414.3 实验内容 414.4 实验原理 414.5 实验硬件原理图 434.6 实验预习 444.7 实验过程 444.8 实验参考程序 444.9 思考 45实验五 UART通信实验 485.1 实验目的 485.2 实验设备 485.3 实验内容 485.4 实验原理 495.5 实验硬件原理图 495.6 实验预习 505.7 实验过程 505.8 实验参考程序 515.9 思考 61实验六 中断实验 626.1 实验目的 626.2 实验设备 626.3 实验内容 62
3、6.4 实验原理 636.5 实验硬件原理图 636.6 实验预习 636.7 实验过程 636.8 实验参考程序 636.9 思考 66总 论本实验包含两部分,前面三个实验是ARM 7指令系统指令实验,使用ADS的编译器和调试器进行仿真调试,主要目的是掌握ARM7的指令系统和开发工具的使用,理解ARM CPU的工作过程。后面三个实验是真实的ARM系统,硬件微控制器芯片为LPC2131(ARMCPU核+GPIO部件、UART0部件、UART1部件、Timer1、Timer2、VIC部件等),硬件电路板为广州周立功公司开发的EasyARM2131,学习配置ARM芯片内各模块部件,初步掌握简单嵌入
4、式系统的构成原理和简单应用。开发软件为ADS,调试接口为硬件JTAG模块(仿真器)+JTAG驱动程序构成开发系统。这部分时需要查看LPC2131芯片的外部特性、内部模块原理和配置方法。实验一 ARM集成开发工具ADS练习1.1 实验目的了解ADS1.2集成开发环境的使用方法1.2 实验设备 硬件:PC机一台 软件:Windows XP/2000系统,ADS1.2集成开发环境1.3 实验内容在ADS环境下创建工程、编辑源文件、编译、链接、调试。(1)建立一个新的工程。(2)建立一个汇编文件,并添加到工程中。(3)设置文本编辑器支持中文。(4)设置编译链接控制选项。(5)编译链接工程。(6)调试工
5、程。1.4 实验预习要求仔细阅读文档ADS集成开发环境及EasyJTAG-H仿真器应用或深入浅出ARM7LPC213x/214x(上册)书第二章的内容,了解ADS工具的组成(重要的软件功能模块ARM汇编器、ARM的C/C+编译器、Thumb的C/C+编译器、ARM链接器、AXD调试器、ARMulator指令模拟器等)、ADS的各模块选项配置、工程编辑的内容。1.5 实验步骤创建工程启动ADS1.2 IDE集成开发环境,选择File-New,使用ARM Executable Image工程模板建立一个工程,工程名为Project1,如图1.1所示。图1.1 新建Project操作界面图1.2 新
6、建Project操作界面(2)添加源文件,编辑源代码选择File-New,建立一个新的汇编文件TEST1.S,设置直接添加到项目中,如图1.3所示。在该文件中输入汇编指令代码,并保存,如图1.5所示。图1.3 新建File操作界面图1.4 编辑源文件选择操作界面图1.5 编辑源代码界面程序TEST1.S源代码(功能:计算两数的加法,被加数和加数分别放在R0、R1中,结果保存到R0中。) AREA EXAMPLE1,CODE,READONLY ;声明代码段Example1 ENTRY ;标识程序入口 CODE32 ;声明32位ARM指令START MOV R0,#15 ;设置参数 MOV R1,
7、#8 ADDS R0,R0,R1 ;R0 = R0 + R1 B START END在输入源代码的过程中,标号(此处如START)必须顶格输入,否则编译器不认,编译通不过。编辑选项配置由于ADS安装后默认字体是Courier New,对于中文支持不完善,因此建议修改字体。选择Edit-Perferences,弹出如图1.7所示对话框。在Font选项设置字体为Fixedsys, Script为CHINESE,由于Tab在不同文本编辑器解释不同,建议在Tab Inserts Spaces前打勾,使Tab键插入的是多个空格。图1.6 编辑选项配置界面图1.7 编辑器字体和Tab选项配置界面图1.8
8、编辑器字体和Tab选项配置界面(2)链接选项配置选择Edit-DebugRel Settings,在DebugRel Setting对话框的左边选择ARM Linker项,然后在Output页设置连接地址,如图1.10所示;在Options页设置调试入口地址,如图1.11所示。图1.9 DebugRel Setttings选项配置界面图1.10 ARM Linker链接地址配置界面图1.11 Image entry point地址配置界面编译链接工程选择Project-Make,将编译链接整个工程。若编译成功,如图1.12所示,Errors & Warnings对话框会报告编译错误为0,此时即
9、可对工程进行仿真。图1.12 Make Project界面图1.13 Make Project报告界面调试工程选择Project-Debug,或者单击快捷键F5,IDE环境就会启动AXD调试软件,如图1.15所示。图1.14 Debug Project界面断点调试方法:图1.15 AXD调试界面图1.16 AXD调试中设置断点选择界面图1.17 AXD调试中断点设置成功界面图1.18 AXD调试运行代码界面图1.19 AXD调试运行到断点处界面以图1.16为例,首先设置断点,只需双击第6行(ADDS R0,R0,R1)的灰色区域即可,若出现红色实心圆点,则表示断点设置成功,然后选择Execut
10、e-Go全速运行,(从MOV R0,#15开始运行)可以发现程序运行停止在第6行(ADDS R0,R0,R1)。还有一种比较简单的调试方法就是用Run to Cursor命令,单击鼠标第8行灰色区域,若AXD将第8行点亮,则表示设置成功,然后选择Execute Run to Cursor运行到光标,可以发现程序停止在第8行。通过断点调试可以观察ARM寄存器的数值变化,如图1.20首先添加寄存器观察窗口,注意查看R0、R1、运行以后R0、R1的值,以十六进制和十进制两种方式观察。图1.20 添加寄存器观察界面图1.21 添加寄存器观察界面图1.22 添加寄存器观察界面图1.23 寄存器值界面(代
11、码没有运行前)图1.24 寄存器值界面(代码运行到第6行)图1.25 寄存器值界面(代码运行到第7行)注意观察此时R0 = R0 + R1 = 15 + 8 = 23 = 0x17图1.26 寄存器值界面(以十六进制显示)图1.27 寄存器值界面(以十进制显示)1.6 思考(1)工程模板有哪些作用?(提示:编译控制设置)(2)如何强行重新编译工程的所有文件?(提示:选择Project-Remove Object Code删除工程中的*.obj文件。)实验二 汇编指令实验12.1 实验目的 了解ADS1.2集成开发环境及ARMulator软件仿真。 掌握ARM7TDMI汇编指令的用法,并能编写简
12、单的汇编程序。 掌握指令的条件执行以及使用LDR/STR指令完成存储器的访问。2.2 实验设备 硬件:PC机 一台 软件:Windows XP/2000系统,ADS1.2集成开发环境2.3 实验内容(1)在存储器地址为0x40003100上开辟一个计数器变量(COUNT),对其进行计数(每次加1),记到10后重新开始计数。C语言描述的伪算法为for(int count = 0 ;count=10,则此指令执行,R0 = 0,进行下一次循环 STR R0,R1 ;将R0的值保存到COUNT变量中 B LOOP ;循环 END2.7 思考(1)若使用LDRB/STRB代替程序清单中的所有加载存储指
13、令(LDRSTR),程序还能正确执行吗?(2)LDR伪指令与LDR加载指令的功能和应用有哪些区别,举例说明?(提示:LDR伪指令的形式为“LDR Rn,=expr”。)(3)LDR、STR指令的前索引偏移指令应如何编写?指令是怎样操作的?(4)在AXD调试时如何复位程序?(提示:选择File-Reload Current Image重新加载映像文件。)实验三 汇编指令实验23.1 实验目的 掌握ARM数据处理指令的使用方法 了解ARM指令灵活的第2操作数 掌握ARM乘法指令的使用方法 了解子程序编写及调用3.2 实验设备 硬件:PC机 软件:Windows 98、XP2000系统,ADS1.2
14、集成开发环境3.3 实验内容(1)使用MOV和MVN指令访问ARM通用寄存器。(2)使用ADD、SUB、AND、ORR、CMP和TST等指令完成数据加减运算及逻辑运算。(3)使用MOV和ADD指令实现:R8 = R3 = X + Y。(4)使用MOV、MVN和SUB指令实现:R5 = 0x5FFFFFF8 R88(5)使用CMP指令判断(5Y/2)(2X),若大于,则R5 = R5&0xFFFF0000,否则R5 = R5 | 0x000000FF(6)使用TST指令测试R5的BIT23是否为1,若是则将BIT6位清0(使用BIC指令)(7)使用STMFD/LDMFD、MUL指令编写一个整数乘
15、方的子程序,然后使用BL指令调用子程序计算的值。3.4 实验预习要求(1)仔细阅读课本第3章的内容(2)仔细阅读文档ADS集成开发环境及EasyJTAG-H仿真器应用或其他相关资料,了解ADS工程编辑和AXD调试的内容。(本实验使用软件仿真)3.5 实验步骤创建工程,添加源文件,编辑源代码启动ADS1.2,使用ARM Executable Image工程模板建立一个工程Project3。建立汇编源文件TEST3.S,编写实验程序,然后添加到工程中。链接选项配置设置工程链接地址RO Base为0x40000000,RW Base 0x40003000,设置调试入口地址Image entry po
16、int为0x40000000。编译链接工程选择Project-Debug,启动AXD进行软件仿真调试。打开寄存器窗口(Processor Registers),选择Current项监视各寄存器的值。调试工程单步运行程序,观察寄存器值的变化。 R8 = R3 = X + Y,单步运行调试寄存器窗口如图3.1所示。图3.1 单步调试运行界面 R5 = 0x5FFFFFF8 R88,单步运行调试寄存器窗口如图3.2所示。图3.2 单步调试运行界面3.6 实验参考程序汇编指令实验2的参考程序见程序清单2.3。程序清单2.3 汇编指令实验2参考程序X EQU 11 ;定义X的值为11Y EQU 8 ;定
17、义Y的值为8BIT23 EQU (1(2X)吗?若大于,则R5 = R5 & 0xFFFF0000,否则R5 = R5 | 0x000000FF MOV R0,#Y ADD R0,R0,R0,LSL #2 ;计算R0 = Y + 4Y = 5YMOV R0,R0,LSR #1 ;计算R0 = 5Y/2 MOV R1,#X MOV R1,R1,LSL #1 ;计算R1 = 2 X CMP R0,R1 ;比较R0和R1,即(5Y/2)(2X)进行比较 LDRHI R2,=0xFFFF0000 ;若(5Y/2)(2X),则R2 = 0xFFFF0000 ANDHI R5,R5,R2 ;若(5Y/2)
18、(2X),则R5 = R5&R2 ORRLS R5,R5,#0x000000ff ;若(5Y/2)(2X),则R5 = R5 | 0x000000FF, 否则R5 = R5 & 0xFFFF0000,程序应如何修改?(3)更改参考程序的X值为200,Y值为163,单步运行程序,每执行一步程序的结果是多少?(4)如何实现64位加法运算(R6、R5)= (R6、R5) + (R3、R2)?(提示:使用ADC指令。)(5)若需要考虑溢出问题(使用32位运算结果,判断运算是否溢出),如何修改实验参考程序?(提示:使用UMULL指令)(6)实验参考程序中的DO_MUL子程序,是否可以使用B、ADD和SUB指令返回?(提示:修改程序进行测试)开发板的连接和JTAG驱动程序的安装和配置硬件连接将开发板(本实验采用周立功Easy ARM2131电路板,主控芯片为LPC2131)通过JTAG硬件模
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1