ImageVerifierCode 换一换
格式:DOCX , 页数:62 ,大小:1.06MB ,
资源ID:9812369      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9812369.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(嵌入式系统实验指导指导书完整版.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

嵌入式系统实验指导指导书完整版.docx

1、嵌入式系统实验指导指导书完整版嵌入式系统实验指导王艳春 英一 劲松实验一 嵌入式微处理器系统的开发环境一、 实验环境PC机 一台软件: ADS 1.2集成开发环境 一套二、实验目的1.了解嵌入式系统及其特点;2.熟悉嵌入式系统的开发环境和基本配置并能编写简单的汇编程序三、实验容1.嵌入式系统的开发环境、基本配置2.使用汇编指令完成简单的加法实验四、实验步骤(1)在D:新建一个目录,目录名为experiment。(2)点击 WINDOWS 操作系统的“开始|程序|ARM Developer Suite v1.2 |Code Warrior forARM Developer Suite”启动Met

2、rowerks Code Warrior,或双击“ADS 1.2”快捷方式启动。启动ADS 1.2 如图1-1所示:图1-1启动ADS1.2(3) 在CodeWarrior 中新建一个工程的方法有两种,可以在工具栏中单击“New”按钮,也可以在“File”菜单中选择“New”菜单。这样就会打开一个如图1-2 所示的对话框。选择【File】-【New】,使用ARM Executable Image工程模板建立一个工程,名称为ADS,目录为D:experiment。图1-2 新建文件在这个对话框中为用户提供了7 种可选择的工程类型:1)ARM Executabl Image:用于由ARM 指令的代

3、码生成一个ELF 格式的可执行映像文件;2)ARM Object Library:用于由ARM 指令的代码生成一个armar 格式的目标文件库;3)Empty Project:用于创建一个不包含任何库或源文件的工程;4)Makefile Importer Wizard:用于将Visual C 的nmake 或GNU make 文件转入到CodeWarrior IDE 工程文件;5)Thumb ARM Executable Image:用于由ARM 指令和Thumb 指令的混和代码生成一个可执行的ELF 格式的映像文件;6)Thumb Executable image:用于由Thumb 指令创建

4、一个可执行的ELF 格式的映像文件;7)Thumb Object Library:用于由Thumb 指令的代码生成一个armar 格式的目标文件库。(4)选择【File】-【New】建立一个新的文件TEST1.S,设置直接添加到项目中。输入如程序代码,并保存,此时在工程窗口中可以看到TEST1.S文件。 图1-3 新建test1.s(5) 选择【Edit】-【Perferences】,在Font选项设置字体是Fixedsys,Script是CHINESE。图1-4 设置字体(6) 选择【Edit】-【DebugRel Settings】,在DebugRel Settings对话框的左边选择AR

5、M Linker项,设置地址。点击“DebugRel Settings”图标按钮,即可进行工程的地址设置、输出文件设置、编译选项等,如图1-5所示。在“ARM Linker”对话框设置连接地址,在“Language Settings”中设置各编译器的编译选项。对于简单的软件调试,可以不进行连接地址的设置,直接点击工程窗口的“Make”图标按钮,即可完成编译连接。若编译出错,会有相应的出错提示,双击出错提示行信息,编辑窗即会使用光标指出当前出错的源代码行,编译连接输出窗口如图1-6所示。同样,您可以在【Project】菜单中找到相应的命令。图1-5连接器选项设置 图1-6 output选项卡OU

6、TPUT 选项卡:该选项卡用来控制连接器进行连接操作的类型。其中Linktype 选项组中的单选按钮确定使用的连接方式。这里选择Simple,连接器将根据连接器选项中指定的地址映射方式,生成简单的ELF 格式的映像文件,所生成的映像文件中的地址映射关系比较简单.当选择Simple 连接类型时,需要设置下列的连接器选项,如图1-5所示。RO Base 文本框中填入0x40000000。地址0x40000000 是开发板上SDRAM 的真实地址,是由系统的硬件决定的;RW Base 文本框中填入0x40003000 指的是系统可读写存的地址。也就是说,在0x400000000x40003000 之

7、间是只读区域,存放程序的代码段,从0x40003000 开始是程序的数据段。Layout 选项卡:该选项卡在连接方式位Simple 时有效,它用来安排一些输入段在映像文件中的位置。Place at beginning of image 选项组用于指定将某个输入段放置在它所在的运行时域的开头。包含复位异常中断处理程序的输入段通常放置在运行时域的开头。这里,在Object/Symbol 文本框中指定目标文件的名称init.o,在Section 文本框中指定输入段的名称init,从而确定了init.s 源文件中的init 输入段位指定的输入段。如图1-7所示。图 1-7 Layout 选项卡中连接器

8、选项(6) 选择【Project】-【Make】,或者按下快捷键F7,将编译整个工程。如图 1-8所示为工程窗口中的图标按钮,通过这些图标按钮,可以快速的进行工程设置,编译连接,启动调试等等.它们从左到右分别为图1-8 工程窗口中的图标按钮A)DebugRel Settings 工程设置;B)Synchronize Modification Dates 同步修改日期;C)Make 编译连接;D)Debug 启动ADX 进行调试;E)Run 启动ADX 调试,并直接运行;F)Project Inspector 工程检查,查看和配置工程中源文件的信息;对于简单的软件调试,直接点击工程窗口的”Mak

9、e”图标按钮,即可完成编译.编译连接输出窗口如图1-9所示。图1-9编译连接输出窗口(7) 选择【Project】-【Debug】,或者按下快捷键F5。IDE环境就会启动AXD调试软件,接着可以执行单步、全速运行调试。图1-10 AXD调试窗口注意:本实验使用软件仿真,所以要在AXD中选择【Options】-【Configure Target】菜单,然后在 Choose Target窗口中选用ARMUL软件仿真。 图1-11 目标环境选择五 思考题1.工程模板有何作用? 2.如何强行重新编译工程的所有文件?(提示:选择【Project】-【Remove Object Code】删除工程中的*.

10、obj文件) 六 参考程序AREA Example1,CODE,READONLY ; 声明代码段Example1 ENTRY ; 标识程序入口 CODE32 ; 声明32位ARM指令START MOV R0,#15 ; 设置参数 MOV R1,#8 ADDS R0,R0,R1 ; R0 = R0 + R1 B START END 实验预作关键过程及结果图:实验二 汇编指令实验一、实验环境 PC机 一台 ADS 1.2集成开发环境 一套二、实验目的1.了解ADS 1.2集成开发环境及ARMulator软件仿真方法;2. 掌握ARM7TDMI汇编指令的用法,并能编写简单的汇编程序;3.掌握指令的条

11、件执行和使用LDR/STR指令完成存储器的访问。三、实验容1.使用LDR/STR指令完成存储器的访问。2.使用数据处理指令实现数据传送和算术和逻辑运算。3.使用ADS 1.2软件仿真,单步、全速运行程序,设置断点,打开寄存器窗口(Processor Registers)监视寄存器的值,打开存储器观察窗口(Memory) 监视存储器的值。根据以上要求完成该操作:使用LDR指令读取0x40003100上的数据,将数据加1,若结果小于10则使用STR指令把结果写回原地址,若结果大于等于10,则把0写回原地址周而复此循环;使用ADS 1.2软件仿真,单步、全速运行程序,设置断点,打开寄存器窗口(Pro

12、cessor Registers)监视R0、R1的值,打开存储器观察窗口(Memory) 监视0x40003100上的值。 四、实验步骤(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) 打开寄存器窗

13、口(Processor Registers),选择Current 项监视R0,R1 的值。打开存储器观察窗口(Memory),设置观察地址为0x40003100,显示方式Size 为32Bit,监视0x40003100 地址上的值。图2-1 Memory 窗口显示格式设置寄存器显示格式与之类似。使用鼠标左键选择某一个寄存器,然后点击鼠标右键,Format 项中选择显示格式Hex,Decimal 等等。如图2-2 所示。图2-2设置寄存器显示格式(6)单步运行程序,可以设置/取消断点,或者全速运行程序,停止程序运行,调试时观察寄存器和0x40003100地址上的值。 图2-3 调试程序窗口六、思

14、考题1.LDR伪指令与LDR加载指令的功能和应用有何区别,举例说明? 2.LDR/STR指令的前索引偏移指令如何编写?指令是怎样操作的? 3.在AXD调试时如何复位程序? (提示:选择【File】-【Reload Current Image】重新加载映象文件) 七、参考程序COUNT EQU 0x40003100 ; 定义一个变量,地址为0x40003100 AREA Example2,CODE,READONLY ; 声明代码段Example2 ENTRY ; 标识程序入口 CODE32 ; 声明32位ARM指令START LDR R1,=COUNT ; R1 = COUNT MOV R0,#

15、0 ; R0 = 0 STR R0,R1 ; R1 = R0,即设置COUNT为0 LOOP LDR R1,=COUNT LDR R0,R1 ; R0 = R1 ADD R0,R0,#1 ; R0 = R0 + 1 CMP R0,#10 ; R0与10比较,影响条件码标志 MOVHS R0,#0 ; 若R0大于等于10,则此指令执行,R0 = 0 STR R0,R1 ; R1 0)。四、实验预习要求 (1)仔细阅读ARM嵌入式系统基础教程中第4章ARM指令系统的容。 (2)仔细阅读产品配套光盘附带文档ADS集成开发环境及仿真器应用或其他相关资料,了解ADS工程编辑和AXD调试的容。(本实验使用

16、软件仿真)五、实验步骤(1)启动ADS 1.2,使用ARM Executable Image工程模板建立一个工程ProgramC。(2)建立源文件Startup.S和Test.c,编写实验程序,然后添加到工程中。(3)设置工程地址RO Base为0x40000000,RW Base为0x40003000。设置调试入口地址Image entry point为Ox40000000。 (4)设置位于开始位置的起始代码段,如图3-1,3-2所示。图3-1设置位于开始位置的起始代码段(1)图3-2 设置位于开始位置的起始代码段(2)(5)编译工程,选择ProjectDebug,启动AXD进行软件仿真调试

17、。(6)在Startups的“B Main”处设置断点,然后全速动行程序。(7)程序在断点处停止。单步运行程序,判断程序是否跳转到C程序中运行。(8)诜择Processor vlewsvariables打开变量观察窗口,观察全局变量的值,然后单步全速运行程序,判断程序的运算结果是否正确。如图3-3所示。图3-3 ARM实验3的运行观察结果六、思考题(1)在实验参考程序中,Startup.s文件的作用是什么?如果没有Startup.s文件,C程序运行会出错吗?(2)实验程序中的Main()函数名是否可以更改为其他名字?(提示:Main只是一个标号。)七、参考程序 ;startup file IM

18、PORT |Image$RO$Limit| IMPORT |Image$RW$Base| IMPORT |Image$ZI$Base| IMPORT |Image$ZI$Limit| IMPORT MAIN ;declare the main() in the C Prog AREA start,CODE,READONLY ENTRY CODE32 Reset LDR SP,=0x40003f00 ;initial the C case LDR R0,=|Image$RO$Limit| LDR R1,=|Image$RW$Base| LDR R3,=|Image$ZI$Base| CMP R0

19、,R1 BEQ LOOP1 LOOP0 CMP R1,R3 LDRCC R2,R0,#4 STRCC R2,R1,#4 BCC LOOP0 LOOP1 LDR R1,=|Image$ZI$Limit| MOV R2,#0 LOOP2 CMP R3,R1 STRCC R2,R3,#4 BCC LOOP2 B MAIN END / main file#define uint8 unsigned char #define uint32 unsigned int#define N 100 uint32 sum;void MAIN(void) uint32 i; sum = 0; for(i = 0;i

20、 【Debug】,启动AXD进行软件仿真调试。(5) 打开寄存器窗口(Processor Registers),选择Current项监视各寄存器的值。(6) 单步运行程序,注意观察CPSR、SPSR、R13(SP)、R14(LR)、R15(PC)寄存器。 五、思考题1.在用户模式或系统模式下读取SPSR寄存器会有何结果? 2.在非特权模式下能否对CPSR寄存器设置?能否读取CPSR寄存器的值? 3.在非特权模式下如何使能/禁止IRQ或FIO中断?(提示:可以先使用SWI指令切换到管理模式) 4.程序中能不能通过MSR指令直接修改CPSR中的T位来实现ARM状态/Thumb状态的切换? 六、参考

21、程序;定义堆栈的大小USR_STACK_LEGTH EQU 64SVC_STACK_LEGTH EQU 0FIQ_STACK_LEGTH EQU 16IRQ_STACK_LEGTH EQU 64ABT_STACK_LEGTH EQU 0UND_STACK_LEGTH EQU 0 AREA Example5,CODE,READONLY ; 声明代码段Example5 ENTRY ; 标识程序入口 CODE32 ; 声明32位ARM指令START MOV R0,#0 MOV R1,#1 MOV R2,#2 MOV R3,#3 MOV R4,#4 MOV R5,#5 MOV R6,#6 MOV R7

22、,#7 MOV R8,#8 MOV R9,#9 MOV R10,#10 MOV R11,#11 MOV R12,#12 BL InitStack ; 初始化各模式下的堆栈指针 ; 打开IRQ中断 (将CPSR寄存器的I位清零) MRS R0,CPSR ; R0 = CPSR BIC R0,R0,#0x80 MSR CPSR_cxsf,R0 ; CPSR = R0 ; 切换到用户模式 MSR CPSR_c, #0xd0 MRS R0,CPSR ; 切换到管理模式 MSR CPSR_c, #0xdf MRS R0,CPSR HALT B HALT ; 名称:InitStack; 功能:堆栈初始化,

23、即初始化各模式下的堆栈指针。; 入口参数:无; 出口参数:无; 说明:在特权模式下调用此子程序,比如复位后的管理模式InitStack MOV R0, LR ; R0 = LR,因为各种模式下R0是相同的;设置管理模式堆栈 MSR CPSR_c, #0xd3 LDR SP, StackSvc;设置中断模式堆栈 MSR CPSR_c, #0xd2 LDR SP, StackIrq;设置快速中断模式堆栈 MSR CPSR_c, #0xd1 LDR SP, StackFiq;设置中止模式堆栈 MSR CPSR_c, #0xd7 LDR SP, StackAbt;设置未定义模式堆栈 MSR CPSR_c, #0xdb LDR SP, StackUnd;设置系统模式堆栈 MSR CPSR_c, #0xdf LDR SP, StackUsr MOV PC, R0StackUsr DCD UsrStackSpace + (USR_STACK_LEGTH - 1)*4StackSvc DCD SvcStackSpace + (SVC_STACK_LEGTH - 1)*4StackIrq DCD IrqStackSpace + (IRQ_STACK_LE

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

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