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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

嵌入式实验报告.docx

1、嵌入式实验报告 3.1 实验一 ARM汇编指令实验1-简单数据搬移实验1.例题源程序:部分注释:AREA用于声明一个只读或读写的代码或数据段,ENTRY声明程序入口,CODE32用于申明以下代码为32位ARM指令,END程序结束。STR R0,SP ;将R0中的值放到SP中去LDR R1,SP ;将SP中的值赋给R1STR R0,SP,#4 ;先执行SP+4,再将寄存器R0内容复制到SP指向的存储器ADD R0,R0,R1 ;将R0+R1的值赋给R0结果截图:结果分析: x和y的值分别为45,64,程序实现过程是将x放进R1,y放进R0,再将x+y放进R0,因此R0中结果为109,即为6D。R

2、1中结果为45,即为2D。2.练习题设计思路: 利用R0做基地址,将R1,R2分别存入第一个单元的内容,利用R3做循环计数器,利用R4遍历读取第2至最后一个数据,如果R1的数据小于新读入的R4数据则将R4的内容存入R1,如果R2的内容大于R4的内容则将R4的内容存入R2。遍历完成之后,R1将存放最大数据,R2将存放最小数据。源程序: AREA Init,CODE,READONLY ENTRY CODE32 start MOV SP,#0X400 ;给指针赋初值 LDR R0,=DataBuf ;把数据定义表格中的值赋给R0 LDR R1,R0,#4 ;取数 MOV R2,R1 ;R1赋给R2

3、MOV R3,#8 ;R3做循环计数器,赋值为8compare SUB R3,R3,#1 ;实现R3自减 CMP R3,#0 ;比较R3和0,确定循环是否结束 BEQ over ;若R3等于0,结束循环 LDR R4,R0,#4 CMP R4,R1 ;比较R4和R1,找大值 BLT small1 ;小于跳转 MOV R1,R4small1 CMP R4,R2 ;比较R4和R2,找小值 BLT small2 ;小于跳转 BGT compare ;大于跳转small2 MOV R2,R4 B compareover B . AREA Datapool,DATA,READWRITE DataBuf

4、DCD 11,-2,35,47,96,63,128,-23 ;数据的定义采用伪指令DCD实现 END结果截图:结果分析: 遍历完成后,数据的最大值和最小值都已经找出,其中最大值存放在R1中,最小值存放在R2中。由结果可知,R1中为0x00000080,即为128,R2中为0xFFFFFFE9,即为-23。 实验3.2 ARM汇编指令实验2-字符串拷贝实验1、例题源程序:AREA Init,CODE,READONLY ENTRY CODE32 START MOV SP,#0x400 ;堆栈地址 LDR R0,=Src ;将初始字符串地址给R0 LDR R1,=Dst ;将目的字符串地址给R1 M

5、OV R3,#0 ;给R3赋值0 strcopy LDRB R2,R0,#1 ;把R0给R2后加一 CMP R2,#0 ;比较R2和0,检测字符串是否结束 BEQ endcopy ;等于跳转到结束 STRB R2,R1,#1 ;把R2给R1后R1+1 ADD R3,R3,#1 ;R3自加 B strcopy ;循环 endcopy LDR R0,=ByteNum ;把字符数的地址给R0 STR R3,R0 ;把R3的值放到R0中 B . AREA Datapool,DATA,READWRITESrc DCB string0 ;初始字符串存储空间Dst DCB 0,0,0,0,0,0,0,0,0

6、,0,0,0,0,0,0,0,0,0,0,0 ;目的字符串存储空间ByteNum DCD 0 END实验截图:结果分析: 由程序可知,初始状态是R0存放起始字符串,R1存放目的字符串,R3赋初值0,拷贝字符串过程中,R3作为计数变量,每次自增一,拷贝借用R2做中转寄存器,每次复制到R2一个字符都要检查是否为0 ,若为0则字符串已经拷贝完毕,跳转到endcopy,若不为0则继续循环拷贝,直到结束。最后将技术变量的值存放到到R0中。实验结果截图可知,R0中为字符串长度,R1为目的字符串。2、练习题设计思路: R4R11起始值为18,每次加操作后把R4R11的内容放入SP栈中,SP初始设置为0x80

7、0,最后把R4R11清空赋值为0。多字的加载与存储使用多寄存器寻址,使用的指令为LDM和STM。源程序: AREA Init,CODE,READONLY ENTRY CODE32 start MOV SP,#0X800 LDR R0,=src ;把src的地址赋给R0 LDR R2,=str ;把str的地址赋给R2 MOV R1,#8 LDMIA R2!,R4-R11 ;将以R2起始地址的值存入R4-R11 MOV R4,#1 MOV R5,#2 MOV R6,#3 MOV R7,#4 MOV R8,#5 MOV R9,#6 MOV R10,#7 MOV R11,#8 ;给寄存器赋初值 lo

8、op ADD R4,R4,#1 ADD R5,R5,#1 ADD R6,R6,#1 ADD R7,R7,#1 ADD R8,R8,#1 ADD R9,R9,#1 ADD R10,R10,#1 ADD R11,R11,#1 ;赋值的循环部分,给每一个寄存器赋原值加一 STMIA SP!,R4-R11 ; SUBS R1,R1,#1 ;循环变量R1自减1 BNE loop ;不为0返回循环 LDMIA R0!,R4-R11 ;将以R0起始地址的值存入R4R11HALT B HALT ;停留,循环src DCD 0,0,0,0,0,0,0,0 END实验截图:结果分析: 进行步的运行,观察结果可以发

9、现,每遍历一遍,R4R11所有值增1,循环次数为8,如此实现了8次赋值。实验截图中为R1减到7时,此时赋值进行到R5,R5之前赋值两次,依次为3、4,R5之后赋值一次,依次为4、5、6、7、8、9。3.3 实验三 ARM汇编指令实验3-ARM处理器工作模式实验源程序:usr_stack_legth equ 64svc_stack_legth equ 32fiq_stack_legth equ 16irq_stack_legth equ 64abt_stack_legth equ 16und_stack_legth equ 16 area reset,code,readonly entry co

10、de32 start mov r0, #0 mov r1, #1 mov r2, #2 mov r3, #3 mov r4, #4 mov r5, #5 mov r6, #6 mov r7, #7 mov r8, #8 mov r9, #9 mov r10, #10 mov r11, #11 mov r12, #12 bl initstack ;初始化各模式下的堆栈指针 ;打开irp中断(将cpsr寄存器的i位清零) mrs r0, cpsr ;r0-cpsr bic r0, r0, #0x80;开irq中断 msr cpsr_cxsf,r0;cpsr-r0 ;切换到用户模式 msr cpsr

11、_c, #0xd0 ;cpsr-#0xd0 通用寄存器到状态寄存器 mrs r0, cpsr ;r0-cpsr 状态寄存器到通用寄存器 stmfd sp!, r1-r11 ;? ;切换到管理模式 msr cpsr_c, #0xdf mrs r0, cpsr stmfd sp!, r1-r12halt b haltinitstack mov r0, lr ;r0-1r,因为各种模式下r0是相同的,而各个模式? ;设置管理模式堆栈 msr cpsr_c, #0xd3 ;110 10011 cpsr4:0 ldr sp, stacksvc stmfd sp!, r1-r12 ;设置中断模式堆栈 ms

12、r cpsr_c, #0xd2 ;110 10010 ldr sp, stackirq stmfd sp!, r1-r12 ;设置快速中断模式堆栈 msr cpsr_c, #0xd1 ;110 10001 ldr sp, stackfiq stmfd sp!, r1-r12 ;设置中止模式堆栈 msr cpsr_c, #0xd7 ;110 10111 ldr sp, stackabt stmfd sp!, r1-r12 ;设置未定义模式堆栈 msr cpsr_c, #0xdb ;110 11011 ldr sp, stackund stmfd sp!, r1-r12 ;设置系统模式堆栈 msr

13、 cpsr_c, #0xdf ;110 11111 ldr sp, stackusr stmfd sp!, r1-r12 mov pc, r0 ;返回 stackusr dcd usrstackspace+(usr_stack_legth-1)*4stacksvc dcd svcstackspace+(svc_stack_legth-1)*4stackirq dcd irqstackspace+(irq_stack_legth-1)*4stackfiq dcd fiqstackspace+(fiq_stack_legth-1)*4stackabt dcd abtstackspace+(abt_

14、stack_legth-1)*4stackund dcd undstackspace+(und_stack_legth-1)*4 area reset,data,noinit,align=2usrstackspace space usr_stack_legth*4svcstackspace space svc_stack_legth*4irqstackspace space irq_stack_legth*4fiqstackspace space fiq_stack_legth*4abtstackspace space abt_stack_legth*4undstackspace space

15、und_stack_legth*4 end实验结果截图:以上截图为模式设置的寄存器值变化情况。由cpsr可看出各个模式的设置过程。以上截图为运行界面截图。以上截图为复位后,寄存器值变化。由此可以看出,复位后cpsr的值是0x000000D3,处于管理模式。实验结果分析: 1.快速中断FIQ模式与其他模式存入的R1R12不同,FIQ模式下R8R12均变为0,分组寄存器的内容受保护。 2.切换到用户模式之后之后不可以从用户模式切换到其他模式,比如系统模式。只有特权模式下可以切换到别的模式。 3.用户模式之下可以执行堆栈压栈操作。 4.模式切换过程中spsr无变化,用户模式下spsr不可用,特权模式

16、下才可用。上文截图中spsr发生变化是因为那时处于特权模式下设置过程。3.4 ARM汇编与C混合编程实验-ARM启动过程控制实验源程序: IMPORT main area Init,code,readonly entry code32 ;*异常矢量入口表*start b Reset_HandlerUndefined_Handler b Undefined_HandlerSWI_Handler b SWI_HandlerPrefetch_Handler b Prefetch_HandlerAbort_Handler b Abort_Handler nop ;ReservedvectoIRQ_Ha

17、ndler b IRQ_HandlerFIQ_Handler b FIQ_HandlerReset_Handler bl initstack ;初始化各模式下的堆栈指针 ;切换到用户模式堆 msr cpsr_c,#0xd0 ;110 10000 bl main halt b haltinitstack mov r0,lr ;r0-lr,因为各模式下r0是相同的而各个模式? ;设置管理模式堆栈 msr cpsr_c,#0xd3 ;110 10011 ldr sp,stacksvc ;设置中断模式堆栈 msr cpsr_c,#0xd2 ;110 10010 ldr sp,stackirq ;设置快

18、速中断模式堆栈 msr cpsr_c,#0xd1 ;110 10001 ldr sp,stackfiq ;设置中止模式堆栈 msr cpsr_c,#0xd7 ;110 10111 ldr sp,stackabt ;设置未定义模式堆栈 msr cpsr_c,#0xdb ;110 11011 ldr sp,stackund ;设置系统模式堆栈 msr cpsr_c,#0xdf ;110 11111 ldr sp,stackusr mov pc, r0 ;返回 LTORG stackusr dcd usrstackspace+128stacksvc dcd svcstackspace+128stac

19、kirq dcd irqstackspace+128stackfiq dcd fiqstackspace+128stackabt dcd abtstackspace+128stackund dcd undstackspace+128 area Interrupt,data,READWRITEusrstackspace space 128svcstackspace space 128irqstackspace space 128fiqstackspace space 128abtstackspace space 128undstackspace space 128 end#include int

20、 main() extern void delayxms(int xms); int i=100; while(1) delayxms(1000); i-; if(i=0) i=100; return 0;* EXPORT delayxms area delay,code,readonly code32 ;下面是延时若干秒子程序delayxms stmfd sp!,r11; sub r0,r0,#1 ;r0=r0-1 ldr r11, =1000loop2 sub r11,r11,#1 cmp r11,#0x0 bne loop2 cmp r0,#0x0 ;将r0与0比较 bne delayx

21、ms ;比较结果不为0,继续调用delayxms ldmfd sp!,r11; mov pc,lr ;返回 end 源程序分为三部分加入工程中,如下图所示:设置三个程序的链接顺序,如下图所示:实验结果截图:4.2 实验五 ARM硬件接口实验1-基本IO实验按照实验课本上的步骤敲入程序,将程序烧到开发板上,实验结果拍照如下直接运行时跑马灯顺时针轮换变亮,按下按键后,变为逆时针轮换变亮。4.3 实验六 ARM硬件接口实验2-外部中断实验本实验将按钮开关所连接的GPF5引脚设定为外部中断EINT5,中断模式位IRQ,在中断服务程序中完成LED灯的切换,即正常状态时LED5灯亮,按下按钮开关时LED6灯亮。硬件实现如上图所示。

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

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