《微机原理与嵌入式系统基础实验.doc》由会员分享,可在线阅读,更多相关《微机原理与嵌入式系统基础实验.doc(34页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、微机原理与嵌入式系统基础实验指导嵌入式系统教研室2010 年4 月7 日西安邮电学院 计算机系 嵌入式系统教研室2第1 章 ADS 1.2 IDE 工具简介.31.1 ADS 1.2 简介.31.2 ADS 1.2 集成开发环境练习.4第2 章 ARM 指令系统及运算基础实验.102.1 二进制数加减运算.102.2 带符号数的加减法运算.132.3 简单分支程序设计.152.4 数据块转储实验(循环程序设计).162.5 数值1 到数值100 的累加程序设计.182.6 搜寻最大数、最小数程序设计.192.7 子程序实验.21第3 章 ARM(LPC2000 系列)体系结构实验.243.1
2、EasyARM2131 实验板简介.243.2 JTAG 仿真器的启动与设置.243.3 基于嵌入式系统的C 语言程序实验.263.4 GPIO 输出控制实验1(单点).273.5 GPIO 输出控制实验2(多点).293.6 GPIO 输入实验.313.7 外中断实验.333.8 定时器基本功能实验1(匹配反转输出功能应用) .353.9 定时器基本功能实验2(定时器中断).373.10 UART 串行数据通信实验1(查询方式) .393.11 UART 串行数据通信实验2(中断方式) .42西安邮电学院 计算机系 嵌入式系统教研室3第1章 ADS 1.2 IDE 工具简介1.1 ADS 1
3、.2 简介ARM ADS 全称为ARM Developer Suite,是由ARM 公司提供的专门用于ARM 处理器应用开发和调试的综合性工具软件。目前使用的ADS1.2 版本是一款功能强大的开发工具和易于使用的集成开发环境(Integrated Development Environment,IDE)。它可以安装在WindowsNT4,Windows 2000,Windows 98,Windows 95,Windows XP 和Windows Me 等操作系统。ADS 主要包含CodeWarrior IDE、AXD 两部分; CodeWarrior IDE 工具主要用于工程的管理配置、源程序
4、的编辑、编译和链接;嵌入式系统开发人员在此环境中,用C、C+或ARM 汇编语言编写ARM 和Thumb 处理器源程序,将源代码文件、库文件、其他相关的文件以及编译环境设置等组织在一个工程中,并可以设置生成在SRAM 调试(DebugInSRAM)、在Flash 调试(DebugInFLASE)或发布版(RelInFLASH)等不同的生成目标。各生成目标在同一个工程中共享源文件、库文件等,便于用户在不同开发阶段的使用。工具界面参见图 1-1。图 1-1 CodeWarrior IDE 视窗 AXD 主要用于工程的下载和调试。嵌入式系统开发人员使用此工具软件可以对用户程序进行诸如断点的设置与清除、
5、程序运行控制、单步执行、寄存器数据监视和变量的查看等调试操作。另外,AXD 挂接在CodeWarrior IDE 中,用户可在CodeWarrior IDE 中直接点击启动AXD,调试用户程序;也可以单独启动AXD,加载、调试用户代码。工具界面参见图 1-2。西安邮电学院 计算机系 嵌入式系统教研室4图 1-2 AXD 视窗1.2 ADS 1.2 集成开发环境练习1. 实验目的学习ADS1.2 集成开发环境的使用方法。2. 实验设备 硬件:PC 机 一台 软件:Windows 98/XP/2000 系统,ADS1.2 集成开发环境3. 实验内容(1) A
6、DS 的启动;(2) 使用asm for lpc2131 工程模板,建立一个新的工程。(3) 在模板文件main.S 文件中,加入用户汇编代码。(4) 编译链接工程。(5) 调试工程。(6) 学习ADS 工具的使用。4. 实验预习要求阅读ADS 集成开发环境及仿真器应用文档或其它相关资料,了解系统调试技术,了解ADS、AXD 的基本功能。5. 实验步骤 启动ADS1.2IDE 集成开发环境。西安邮电学院 计算机系 嵌入式系统教研室5图 1-3 启动ADS 在ADS 主窗口主菜单选择File-New,使用asm for lpc2131 工程模板建立一个工程( 图例中工程名称为: ZQL_LIB1
7、 ), 指定工程路径( 图例中工程路径为D:ARM_Lib_BakARM_asm)。图 1-4 使用模板在ADS 中创建工程 点击确认,创建工程。 在ZQL_LIB1 工程窗口,双击模板文件main.S,打开该文件。图 1-5 ADS 工程管理器 可在主窗口菜单选择Edit-Perferences,设置字体和字号。 在main.S 文件编辑窗的 “add the user code here. 添加用户代码”行下建立用户汇编程序代码 。可选用的工程模板列表西安邮电学院 计算机系 嵌入式系统教研室6图 1-6 ADS 视窗的主要组成 选择Project-Make(或快捷键),编译链接整个工程。若
8、编译成功,则Erros &Warnings 对话框会报告编译错误为0,此时即可对工程进行仿真。图 1-7 ADS 主菜单在此处添加用户代码用户代码编辑窗用户工程窗ADS 窗口主菜单ADS 窗口工具条行西安邮电学院 计算机系 嵌入式系统教研室7图 1-8 ADS 编译报告窗口 选择Project-Debug(或快捷键),IDE 环境就会启动AXD 调试软件。图 1-9 从ADS 中启动AXD编译报告窗口西安邮电学院 计算机系 嵌入式系统教研室8图 1-10 AXD 工具窗口的主要构成6. 调试方法 单步运行;在AXD 调试器主窗口,选择 Execute - Step (或快捷键),处理器执行一行
9、代码; 设置断点;在AXD 调试器“代码调试窗口”双击目标代码行,若出现红色实心圆点,则表示断点设置成功;然后选择Execute-Go 全速运行,处理器执行程序停止在断点行; 运行到光标行;在AXD 调试器“代码调试窗口”单击选择目标代码行,然后在AXD调试器主窗口,选择Execute-Run to Cursor 运行到光标处;通过断点调试可以观察ARM 寄存器和存储单元的数值变化,具体操作方法在后面的实验中会作详细介绍。AXD 寄存器窗口,可点击打开各模式寄存器集AXD 内存显示窗口蓝色箭头指向当前待执行指令执行控制工具图标西安邮电学院 计算机系 嵌入式系统教研室9图 1-11 AXD 工具
10、调试用户代码与查看内存7. 思考(1) 工程模板有哪些作用?(提示:对照VC Studio IDE。)(2) 如何强行重新编译工程的所有文件?(提示:选择Project-Remove Object Code 删除工程中的*.obj 文件。)AXD 调试窗口AXD 调试代码窗口指定显示内存的地址空间西安邮电学院 计算机系 嵌入式系统教研室10第2章 ARM 指令系统及运算基础实验2.1 二进制数加减运算1. 实验目的 了解ADS1.2 集成开发环境及ARMulator 软件仿真。 掌握ARM7TDMI 常用汇编指令的用法,并能编写简单的汇编程序。h
11、8698; 学习使用LDR/STR/ADD/SUB 指令完成存储器的访问及二进制数据加减运算。 领会处理器进行数据处理的方式原理。2. 实验设备 硬件:PC 机 一台 软件:Windows 98/XP/2000 系统,ADS1.2 集成开发环境3. 实验内容(1) 使用LDR 指令读取Data1、Data2 数据,完成两数相加/减,将结果写入到Data3 单元。(2) 使用ADS1.2 软件仿真,单步、全速运行程序,设置断点,打开寄存器窗口(ProcessorRegisters)监视R0 和R1 的值,打开存储器观察窗口(Memory
12、)监视Data1、Data2 和Data3存储单元的值。4. 实验预习要求学习ADS 工程编辑和AXD 调试工具的使用,二进制运算,处理器运行原理。5. 实验步骤 启动ADS1.2IDE 集成开发环境,选择asm for lpc2131 工程模板建立一个工程TEST2。 在模板文件main.S 中,补加用户代码,编写实验程序,保存。 选择主窗口菜单 Project-Make(或直接快捷键),联编工程; 联编无错后,选择主窗口菜单Project-Debug,启动AXD 进行软件仿真调试。 注意首次使用 AXD 时, 需要设置 AXD 仿真环境,AXD 主菜单: 选择Options-Configu
13、re Target,打开 Choose Target 窗口,并在其中选择:ARMUL 仿真器;方法如下图示:备注:ARMUL 仿真器是AXD 环境下的软件仿真器,在PC 机上仿真了ARM 处理器的执行情况;可用于软件算法调试,不能仿真硬件外设系统。西安邮电学院 计算机系 嵌入式系统教研室11图 2-1 为AXD 配置仿真环境图 2-2 配置AXD 使用软件仿真 打开寄存器窗口(Registers),选择Current 项,监视R0、R1 和R2 的值。打开存储器观察窗口(Memory)设置观察Data1、Data2 和Data3 单元值,显示方式Size 为32bit。6. 实验参考程序Dat
14、a3 = Data1 + Data2 运算汇编指令实验1 的参考程序见程序清单 2-1程序清单 2-1 汇编指令实验1 参考程序AREA Example1,CODE,READONLY ; 声明代码段Example1配置 AXD 目标配置 AXD 使用ARMUL 软件仿真器西安邮电学院 计算机系 嵌入式系统教研室12ENTRY ; 标识程序入口CODE32 ; 声明32 位ARM 指令START LDR R11, =Data1 ; R11 =address( Data1)LDR R0, R11 ; R0 = Data1LDR R11, =Data2 ; R11 =address( Data2)L
15、DR R1, R11 ; R0 = Data2ADD R2, R1, R0LDR R11, =Data3 ; R11 =address( Data3)STR R2,R11 ; R1 = R2,即设置COUNT 为0HALT B HALTData1 DCD 0xData2 DCD 0xData3 DCD 0x00ENDData3 = Data2 Data1 运算汇编指令实验2 的参考程序见程序清单 2-2。程序清单 2-2 汇编指令实验2 参考程序AREA Example1,CODE,READONLY ; 声明代码段Example1ENTRY ; 标识程序入口CODE32 ; 声明32 位ARM
16、 指令START LDR R11, =Data1 ; R11 =address( Data1)LDR R0, R11 ; R0 = Data1LDR R11, =Data2 ; R11 =address( Data2)LDR R1, R11 ; R0 = Data2SUB R2, R1, R0LDR R11, =Data3 ; R11 =address( Data3)STR R2, R11 ; R1 Reload Current Image 重新加载映像文件。)西安邮电学院 计算机系 嵌入式系统教研室132.2 带符号数的加减法运算1. 实验目的 了解ADS1.2 集成开发
17、环境及ARMulator 软件仿真。 掌握ARM7TDMI 常用汇编指令的用法,并能编写简单的汇编程序。 学习使用LDR/STR/ADD/SUB 指令完成存储器的访问及带负号数的加减运算。 领会处理器进行数据处理的方式原理及符号数的表示与运算。2. 实验设备 硬件:PC 机 一台 软件:Windows 98/XP/2000 系统,ADS1.2 集成开发环境3. 实验内容(1) 使用LDR 指令读取Data1、Data2 数据,完成两数相加/减,将结果写入到Data3 单元。(2) 使用ADS1.
18、2 软件仿真,单步、全速运行程序,设置断点,打开寄存器窗口(ProcessorRegisters)监视R0 和R1 的值,打开存储器观察窗口(Memory)监视Data1、Data2 和Data3存储单元的值。(3) 注意观察“CPSR_标志位”的情况,领会CPSR 标志位的工作情况与含义;(4) 注意观察符号数的计算机表示方式;4. 实验预习要求学习ADS 工程编辑和AXD 调试工具的使用,符号数的表示与运算,处理器运行原理。5. 实验步骤(1) 启动ADS1.2IDE集成开发环境,选择asm for lpc2131 工程模板建立一个工程TEST2。(2) 在模板文件main.S 中,补加用
19、户代码,编写实验程序,保存。(3) 选择主窗口菜单 Project-Make(或直接快捷键),联编工程;(4) 联编无错后,选择主窗口菜单Project-Debug,启动AXD 进行软件仿真调试。(5) 打开寄存器窗口(Registers),选择Current 项,监视R0、R1 和R2 的值。打开存储器观察窗口(Memory)设置观察Data1、Data2 和Data3 单元值,显示方式Size 为32bit,注意观察CPSR 寄存器中的各标志位的情况。6. 实验参考程序Data3 = Data1 + Data2 运算汇编指令实验1 的参考程序见程序清单 2-3。程序清单 2-3 汇编指令实
20、验3 参考程序INCLUDE LPC2294.INC ; Include the head file 引入头文件;声明MAIN 函数;Export MAIN functonEXPORT MAIN ;MAIN Function 主程序CODE32AREA main,CODE,READONLY ; 声明代码段Example1西安邮电学院 计算机系 嵌入式系统教研室14ENTRY; 标识程序入口CODE32 ; 声明32 位ARM 指令MAIN;add the user code here. 添加用户代码LDR R11, =Data1 ; R11 =address( Data1)LDR R0, R1
21、1 ; R0 = Data1LDR R11, =Data2 ; R11 =address( Data2)LDR R1, R11 ; R0 = Data2ADDS R2, R1, R0LDR R11, =Data3 ; R11 =address( Data3)STR R2,R11 ; R1 = R2,即设置COUNT 为0HALT B HALTData1 DCD -18Data2 DCD 6Data3 DCD 0ENDData3 = Data2 Data1 运算汇编指令实验4 的参考程序见程序清单 2-4。程序清单 2-4 汇编指令实验4 参考程序INCLUDE LPC2294.INC ; In
22、clude the head file 引入头文件;声明MAIN 函数;Export MAIN functonEXPORT MAIN ;MAIN Function 主程序CODE32AREA main,CODE,READONLY ; 声明代码段Example1ENTRY; 标识程序入口CODE32 ; 声明32 位ARM 指令MAIN;add the user code here. 添加用户代码LDR R11, =Data1 ; R11 =address( Data1)LDR R0, R11 ; R0 = Data1LDR R11, =Data2 ; R11 =address( Data2)L
23、DR R1, R11 ; R0 = Data2SUBS R2, R1, R0LDR R11, =Data3 ; R11 =address( Data3)STR R2,R11 ; R1 = R2,即设置COUNT 为0HALT B HALT西安邮电学院 计算机系 嵌入式系统教研室15Data1 DCD 0xData2 DCD 0xData3 DCD 0END7. 思考(1) 模拟32bit 处理器对带符号数(63)+(-65)在计算机中的表示与运算。(2) 参考程序清单中关于加减法指令,如果不加S 后缀的话,对CPSR 会有什么影响?2.3 简单分支程序设计1. 实验目的 掌
24、握ARM 条件执行指令的使用方法,学习分支程序设计。 加深领会处理器可以自动区分情况进行数据处理的方式原理。2. 实验设备 硬件:PC 机 一台 软件:Windows 98/XP/2000 系统,ADS1.2 集成开发环境3. 实验内容使用条件执行指令编写完成下述C 代码功能的分支程序。if( x = = y ) z= a + b;else if( x Debug,启动AXD 进行软件仿真调试。 打开寄存器窗口(Processor Registers),选择Current 项监视各相关寄存器值。 打开存储器观察窗口(Memory),观
25、察a、b 和z 存储单元的值情况。 单步运行程序,跟踪程序执行的流程,观察寄存器和a、b 和z 存储单元值的变化。 修改x、y 单元数据重复上述操作,观察寄存器和a、b 和z 存储单元值的变化。6. 实验参考程序汇编指令实验3 的参考程序见程序清单 2-5 汇编指令实验3 的参考程序。程序清单 2-5 汇编指令实验3 的参考程序; 文件名:main.S; 功能:使用条件执行指令实现分支程序功能; 说明:x、y、a、b 和z 均为符号整数AREA Example,CODE,READONLY ; 声明代码段ExampleENTRY ; 标识程序入口西安邮电学院 计算机系 嵌入式系统教研室16COD
26、E32 ; 声明32 位ARM 指令START LDR R11, =x ; R11 指向xLDR R0, R11 ; 取 x 到 R0LDR R11, =y ; R11 指向yLDR R1, R11 ; 取 y 到 R1LDR R11, =a ; R11 指向aLDR R2, R11 ; 取 a 到 R2LDR R11, =b ; R11 指向bLDR R3, R11 ; 取 b 到 R3LDR R11, =r ; R11 指向zCMP R0, R1 ; 比较 x 与 yADDEQ R4, R2, R3 ; 使用 R4 资源, if(x=y) then R4=a+bSUBLT R4, R2,
27、R3 ; if(xy) then R4=b-aSTR R4, R11 ;保存结果到 zHALT B HALTx DCD 0x01 ; 定义x 的值y DCD 0x02 ; 定义y 的值a DCD 0x03 ; 定义a 的值b DCD 0x04 ; 定义b 的值z DCD 0x00END7. 思考(1) 若将实现条件变成if(x= =y) & (a = =b) then z = z + 1,考虑如何修改实验参考程序?2.4 数据块转储实验(循环程序设计)1. 实验目的 了解ADS1.2 集成开发环境及ARMulator 软件仿真。 掌握ARM7TDMI 常
28、用汇编指令的用法,并能编写简单的汇编程序。 学习使用LDR/STR/ADD/CMP/B 指令完成存储器的访问及加法运算。2. 实验设备 硬件:PC 机 一台 软件:Windows 98/XP/2000 系统,ADS1.2 集成开发环境3. 实验内容 数据块转储;使用LDR 指令读取src 中的数据,再通过STR 指令完成存入dst 中。 使用ADS1.2 软件仿真,单步、全速运行程序,设置断点,打开寄存器窗口(Processor西安邮电学院 计算机系 嵌入式系统教研室17Registers)监视R0、R1、R2、R3、src 和dst
29、 单元的值,打开存储器观察窗口(Memory)监视dst 存储单元的值。 注意观察“CPSR_标志位”的情况,领会CPSR 标志位的工作情况与含义;4. 实验预习要求多寄存器存储器访问指令,简单循环程序设计设计。5. 实验步骤 启动ADS1.2IDE集成开发环境,选择asm for lpc2131 工程模板建立一个工程TEST2。 在模板文件main.S 中,补加用户代码,编写实验程序,保存。 选择主窗口菜单 Project-Make(或直接快捷键),联编工程; 联编无错后,选择主窗口菜单Project-Debug,启动AXD 进行软件仿真调试。 打开寄存器窗口(Registers),选择Cu
30、rrent 项,监视R0、R1、R2 和R3 的值。打开存储器观察窗口(Memory)设置观察src 和dst 单元值,显示方式Size 为32bit,注意观察CPSR 寄存器中的各标志位的情况。6. 实验参考程序程序清单 2-6 数据转储程序清单INCLUDE LPC2294.INC ; Include the head file 引入头文件num EQU 20 ; 需要拷贝的字符个数;声明MAIN 函数;Export MAIN functonEXPORT MAIN ;MAIN Function 主程序AREA main,CODE,READONLY ; 声明代码段mainENTRY; 标识程
31、序入口CODE32 ; 声明32 位ARM 指令MAIN;add the user code here. 添加用户代码LDR R0, =src ; R0 =address( src)LDR R1, =dst ; R1 Make(或直接快捷键),联编工程; 联编无错后,选择主窗口菜单Project-Debug,启动AXD 进行软件仿真调试。 打开寄存器窗口(Registers),选择Current 项,监视R0、R1 和R11 的值。打开存储器观察窗口(Memory)设置观察SUM 单元值,显示方式Size 为32bit,注意观察CPSR 寄存器中的各标志位的情况。6. 实验参考程序1 0 0i
32、 1i= 运算汇编指令实验的参考程序见程序清单 2-7。程序清单 2-7 求和1+2+.+100 的汇编参考程序INCLUDE LPC2294.INC ; Include the head file 引入头文件;声明MAIN 函数;Export MAIN functon西安邮电学院 计算机系 嵌入式系统教研室19EXPORT MAIN ;MAIN Function 主程序CODE32AREA main,CODE,READONLY ; 声明代码段Example1ENTRY; 标识程序入口CODE32 ; 声明32 位ARM 指令MAIN;add the user code here. 添加用户代
33、码LDR R11, =SUM ; R1 =address( SUM )LDR R0, R11 ; R0 = SUMMOV R1, #1 ; 初始值R1=1CONTADD R0, R0, R1 ; 累加ADD R1, R1, #1CMP R1, #100BLS CONT ; R1小于等于100STR R0,R11 ; R11 Make(或直接快捷键),联编工程; 联编无错后,选择主窗口菜单Project-Debug,启动AXD 进行软件仿真调试。 打开寄存器窗口(Registers),选择Current 项,监视R0、R1 和R11 的值。打开存储器观察窗口(Memory)设置观察SUM 单元值,显示方式Size 为32bit,注意观察CPSR 寄存器中的各标志位的情况。6. 实验参考程序求最大数、最小数的参考程序如程序清单 2-8。程序清单 2-8 求最大数、最小数参考程序INCLUDE LPC2294.INC ; Include the head file 引入头文件N EQU 4 ; 表示字= 4 BytesM EQU N / 2 ; 表示步长,用于求数组中数的个数;声明MAIN 函数;Export MAIN functonEXPORT MAIN ;MAIN Function 主程序AREA main,COD
限制150内