山东大学嵌入式试验报告汇编
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学习-----好资料
嵌入式实验报告
班级:电信工X班姓名:XXX 学号:20120012XXXX
实验一、ARM汇编指令实验-简单数据搬移实验
实验目的:
熟悉实验开发环境,掌握简单ARM汇编的使用方法
实验内容
熟悉开发环境并使用LDR/STR,MOV等指令访问寄存器或存储单元;
使用ADS/SUB/LSL/LSR/AND/ORR等指令完成基本数学/逻辑运算。
实验要求
(1)按照前面叙述介绍的方法,在ADS下创建一个工程asmlabl,定义两个变量x,y和堆栈地址0x1000,将变量x的内容存到堆栈顶,然后计算x+y,并将和存到堆栈的下一个单元。
通过AXD查看寄存器和memory和寄存器中数据的变化。
(2)在指令后面加上适当注释,说明指令功能。
(3)指出程序执行后各相关寄存器及存储器单元的具体内容。
程序代码截图如下:
程序运行结果截图:
更多精品文档.
学习-----好资料
6D
x+y的值由实验结果可知堆栈的第二个单元中存放了练习题变量之中,最小值存编写程序实现对一段数据的最大值和最小值搜索,最大值存在于max DCD来实现。
在于min变量之中。
提示:数据的定义采用伪指令:做循环计数,R3,R2分别放入第一单元的内容,利用基本思路:利用R0做基地址,将R1的内数据则将R4R1至最后一个数据,如果的数据小于新读入的R4遍历读取第利用R42将。
遍历完成之后,R2,R1的内容则将,如果R1R2的内容大于R4R4的内容存入容存入将存放最小数据。
R2存放最大数据,
程序代码截图如下:
程序运行结果截图:更多精品文档.
学习-----好资料
2-字符串拷贝实验实验二ARM汇编指令实验实验目的等指令完成较为复杂的存储区访问和程序分支,学会使用LDB/STB,b通过实验掌握使用条件码。
实验内容更多精品文档.
学习-----好资料
熟悉开发环境的使用并完成一块存储区的拷贝。
完成分支程序设计,要求判断参数,根据不同参数,调用不同的子程序。
实验要求
(1)按照2.3节介绍的方法,在ADS下创建一个工程asmab2,定义两个数据存储区Src和Dst,Src用于存放原字符串,Dst用于存放目的字符串。
堆栈地址0x400,将变量原字符串的内容拷贝到目的字符串中,要能判断原字符串的结束符(0),并统计字符串的个数。
通过AXD查看寄存器和memory和寄存器中数据的变化。
(2)在指令后面加上适当注释,说明指令功能。
(3)指出程序执行完后各相关寄存器及存储器单元的具体内容。
程序代码截图如下:
程序运行结果
源字符串
更多精品文档.
学习-----好资料
中的数据情Dst:0x8047Src:0x8040和字符串复制后两个数据存储区况
3-ARM处理器工作模式实验实验三ARM汇编指令实验实验目的观察不同模处理器工作模式的切换,msr/mrs通过实验掌握学会使用指令实现ARM(1)
结构的理解;式下的寄存器,加深对CPU 中如何使用命令指定代码段起始地址。
通过实验掌握ld(2)
实验内容ARM在各种处理器模式下切换并观察各种模式下寄存器的区别;掌握通过ARM汇编指令,不同模式的进入与退出。
实验要求完成各个模式下的堆asmmodelab,节介绍的方法,在2.3ADS下创建一个工程按照)(1运用单步执行AXDR1-R12栈初始化工作,并将的内容存入当前模式下堆栈。
通过更多精品文档.
学习-----好资料
方式调用程序,验证工作的模式,使用寄存器观察切换到不同的工作模式下观察SP(R13)的变
化情况。
(2)实验过程中请记录并思考以下内容:
1)程序复位之后系统处于什么模式?
2)记录每种模式下的厨师堆栈指针,以及执行R1-R12内容压栈后本模式堆栈相关内存单元的数值。
并分析快速中断FIQ模式与其他模式存入的R1-R12有什么不同。
3)切换成用户模式之后还能否从用户模式切换到其他模式?
4)用户模式下能否执行堆栈压栈操作?如果能的话,观察用户模式下压栈之前和之后其堆栈区域的变化情况。
5)观察本程序模式切换过程中SPSR有无变化,并解释其原因。
程序运行结果截图:
更多精品文档.
学习-----好资料
6)程序复位之后系统处于什么模式?答:程序复位之后系统处于管理模式。
内容压栈后本模式堆栈相关内存单记录每种模式下的初始堆栈指针,以及执行7)R1-R12 R1-R12FIQ元的数值。
并分析快速中断模式与其他模式存入的有什么不同。
更多精品文档.学习-----好资料
答:(管理模式)
即管理模式的栈顶指针为0x8240
满递减模式,r1-r12压栈后,管理模式栈顶指针为0x8210相距0x30,压入12个字
(中断模式)
观察r13,中断模式的堆栈地址为0x8340
满递减模式,r1-r12压栈后,中断模式栈顶指针为0x8310,相距0x30,压入12个字
更多精品文档.
学习-----好资料
(快速中断模式)
观察r13,快速中断模式的堆栈地址为0x8380
满递减模式,观察运行结果发现,快速中断模式中只有R1-R7压栈了,这是因为在快速中断模式中,可访问的寄存器只有R1-R7,不能访问R8-R12,快速中断模式下有自己的R8-R12。
(中止模式)
观察r13,中止模式的堆栈地址为0x83C0
满递减模式,r1-r12压栈后,中止模式栈顶指针为0x8310,相距0x30,压入12个字更多精品文档.
学习-----好资料
(未定义模式)
观察r13,未定义模式的堆栈地址为0x8400
满递减模式,r1-r12压栈后,未定义模式栈顶指针为0x83d0,相距0x30,压入12个字
(系统模式)
观察r13,系统模式的堆栈地址为0x81C0
满递减模式,r1-r12压栈后,系统模式栈顶指针为0x8190,相距0x30,压入12个字
更多精品文档.
学习-----好资料
分析快速中断FIQ模式与其他模式存入的R1-R12有什么不同:
快速中断FIQ模式中:R8~R13都是0。
这是因为在快速中断模式中,可访问的寄存器只有R1-R7,不能访问R8-R12,快速中断模式下有自己的R8-R12。
8)切换成用户模式之后还能否从用户模式切换到其他模式(如系统模式)?
答:在该例程中,由用户模式不可以切换到系统模式。
当处理器工作在用户模式时,正在执行的程序不能访问某些被保护的系统资源,也不能改变模式,除非异常发生。
9)用户模式下能否执行堆栈压栈操作?如果能的话,观察用户模式下压栈之前和之后其堆栈区域的变化情况。
答:用户模式下能执行堆栈压栈操作。
未压栈时:用户模式堆栈指针初始值为0X8190
压栈之后,堆栈指针减小0x30,这是因为堆栈设置为满递减模式,所以堆栈指针减小0x30,存放12个字。
更多精品文档.
学习-----好资料
SPSR有无变化,并解释其原因。
)观察本程序模式切换过程中10无变无变化,因为在整个切换过程中没有异常发生,所以SPSR答:模式切换过程中SPSR 化。
启动过程控制实验C混合编程实验----ARM实验四ARM汇编与实
验目的;
语言程序等包含启动代码,C掌握建立基本完整的ARM 工程,(1); C 语言程序和汇编程序启动代码并进行调试学会编写简单的了解ARM 启动过程,(2)
;
掌握如何指定代码入口地址与入口点(3) memory/register/watch/variable 窗口分析判断错误。
(4)掌握通过实验内容函数,用汇编语言编写延时函数实现main使用汇编语言编写初始化程序,并引导至C语言钟定时。
C语言中调用延时函数,实现1s毫秒级的延时,在实验要求AXD3个
文件,通过ADS下创建一个工程armasmc,编写2.3(1)按照节介绍的方法,在运用单步执行方式进行调试程序,观察程序执行过程中的寄存器及存储器的变化情况。
)实验过程中请记录并思考以下内容:(2 )如何建立异常矢量入口表?1 函数?C)如何在汇编语言中切换至语言的main2 语言中调用汇编语言函数,并完成参数传递?)如何在3C 更多精品文档.
学习-----好资料
4)汇编语言函数中用到的寄存器如何保护与恢复,为什么要保护参考程序中的R11?
5将delay.s中的R11改成R4,并将两条R11的保护与恢复语句stmfd sp!,{r12}和ldmfd
sp!{r11}删掉,在C语言程序中的语句i----处设置端点,观察运行过程中变量i的变化情况,并解释其中的原因。
程序原代码截图:
Init完成异常矢量表的建立,模式堆栈初始化,并将程序引导至C语言的main函数
更多精品文档.
学习-----好资料
delay.s 语言程序,调用汇编语言文件C
延时程序汇编delay.s更多精品文档.
学习-----好资料
思考题:思考题如何建立异常矢量入口表?1)要设置中断类型号,设置中断服务子程序段地址
函数?语言的main)如何在汇编语言中切换至2C程序中不需要任。
在ATPCSC为了保证程序调用时参数的正确传递,汇编程序设计要遵守伪程序,但需要在汇编语言程序之前使用IMPORT 何关键字来声明将被汇编语言调用的C 指令来调用子程序。
C程序。
在汇编程序中通过BL操作来声明该C语言中调用汇编语言函数,并完成参数传递?3)如何在。
为了保证程序调用时参数的正确传递,汇编程序设计要遵守ATPCS程序中调用该汇编程序之前需CEXPORT在汇编程序中需要使用伪操作来声明,同时,在更多精品文档.
学习-----好资料
要在C语言程序中使用extern关键词来声明该汇编程序。
4)汇编语言函数中用到的寄存器如何保护与恢复,为什么要保护参考程序中的R11?
根据ATPCS标准,R11对应ARM 状态局部变量寄存器8。
因为R11中可能含有其他重要的数据,所以要保护程序中R11。
汇编语言函数中用到的寄存器的保护与恢复需要用到压栈与出栈。
5)将delay.s中的R11改成R4,并将两条R11的保护与恢复语句stmfd sp!,{r12}和ldmfd
sp!{r11}删掉,在C语言程序中的语句i----处设置端点,观察运行过程中变量i的变化情况,并解释其中的原因。
修改后程序如图
由于根据ATPCS标准,R4对应局部变量寄存器1,即i,所以在delay.s中,R4的值减为1,若不进行保护,则返回C程序后经i--,i值变为-1,永远不为0,无法执行if语句。
导致i值一直递减下去
更多精品文档.
学习-----好资料
实验IO硬件接口实验1----基本实验五ARM实验目的的功能配置方法;)GPIO(1 通过寄存器访问引脚的方法;2)(输入输出功能的基本编程方法。
实现GPIO(3)
实验内容,,GPC6GPC5编写S3C2440X处理器的端口控制程序,实现利用按键控制的跑马灯程序。
GPC7GPC6,上电后,GPC5,引脚。
GPC7三个引脚连接发光二极管,按钮开关连接在GPF5 三个引脚连接发光二极管,轮流显示,当按钮开关按下去,方向反向。
. )PS:实验过程中要注意按键去抖动和每个发光二极管显示一定的时间(至少100ms 实验要求文件,运行程序,观察程序执行的效率。
并观察按键按imageAXD加载生成的(1)运行下和松开跑马灯轮换方向。
2)实验过程中请记录并思考以下内容:(1位或者多位数据?1)如何访问寄存器并修改其中的端口?的PIOS3C24402)如何配置C语言中如何实现按键处理程序?3)在DRAM如何初始化,从而实现程序下载并在线调试?4)?
尝试实现利用按键切换控制跑马灯的顺序轮换5) 更多精品文档.
学习-----好资料
程序代码截图如下:
更多精品文档.学习-----好资料
更多精品文档.
学习-----好资料
思考题:文件,运行程序,观察程序执行的效率。
并观察按键按imageAXD1()运行加载生成的更多精品文档.
学习-----好资料
下和松开跑马灯轮换方向。
答:执行效率高。
下载程序到实验箱上,跑马灯从左到右依次点亮,当按下开关并松开,跑马灯反向依次点亮。
(2)实验过程中请记录并思考以下内容:
1)如何访问寄存器并修改其中的1位或者多位数据?
答:通过与、或、非等关系来访问寄存器并修改其中的1位或者多位数据的。
2)如何配置S3C2440的PIO端口?
答:配置相应的寄存器。
3)在C语言中如何实现按键处理程序?
答:在C语言中一定要通过延时按键延时去抖动。
4)如何初始化DRAM,从而实现程序下载并在线调试?
答:为了向SDRAM中下载程序,并运行和调试程序,则需要在上电之初在AXD的Command Line Interface中输入一系列的命令,这些命令可以直接操纵CPU内部的寄存器,进而完成对DRAM 和看门狗的一些初始化工作。
具体命令略(指导书91页)。
5)尝试实现利用按键切换控制跑马灯的顺序轮换(不是控制其轮换方向,而是在有按键按下并松开后实现一次跑马灯切换)。
答:可改变轮换方向更多精品文档.
学习-----好资料
实验六ARM硬件接口实验2-外部中断实验
实验目的
(1)通过实验掌握ARM处理器的中断方式和中断处理
(2)熟悉S3C2440X的中断控制寄存器的使用;
(3)理解S3C2440X的中断处理机制
(4)熟悉掌握如何进行ARM处理器中断处理软件编程方法
(5)掌握生成离线运行程序的开发环境设置方法
(6)掌握通过J-link向Norflash烧写程序的方法。
实验内容
硬件电路和前面的实验五完全相同。
这里讲按钮开关所连接的GPF5引脚定位外部中断EINT5,中断模式为IRQ,在中断服务程序中完成LED灯的切换,即正常状态时LED5灯亮,按下按钮开关时LED6灯亮。
实验要求
(1)环境设置完了之后进行程序写入。
关掉试验箱,将其核心板上的拨动开关拨到右边的NOR位置,观察程序运行结果。
按下INKEY 按钮,再次观察程序运行结果。
(2)实验过程中请记录并思考以下内容:
1)打开s2440addr.h头文件。
观察并分析其内容。
2)分析中断控制程序的结构。
3)仔细分析中断初始化程序和中断处理程序中寄存器的设置方法,并理解其含义。
4)总结中断程序的设计方法。
程序代码截图如下:
程序和注释截图如下
初始化汇编程序
更多精品文档.
学习-----好资料
更多精品文档.
学习-----好资料
更多精品文档.学习-----好资料
语言处理程序C 更多精品文档.学习-----好资料
更多精品文档.
学习-----好资料
思考题头文件。
观察并分析其内容。
打开s2440addr.h1)%%%%%%%%%%%%%%%% s3c2440.h //%%%%%%%%%%%%%%
/* WOTCH DOG register */
(*(volatile unsigned long *)0x53000000) WTCON #define
/* SDRAM regisers */
0x48000000 #define MEM_CTL_BASE
0x30000000 #define SDRAM_BASE
/* NAND Flash registers */
*)0x4e000000) #define NFCONF (*(volatile unsigned int
更多精品文档.
学习-----好资料
#define NFCMD (*(volatile unsigned char *)0x4e000004)
#define NFADDR (*(volatile unsigned char *)0x4e000008)
#define NFDATA (*(volatile unsigned char *)0x4e00000c)
#define NFSTAT (*(volatile unsigned char *)0x4e000010) /*GPIO registers*/
#define GPBCON (*(volatile unsigned long *)0x56000010) #define GPBDAT (*(volatile unsigned long *)0x56000014) (*(volatile unsigned long *)0x56000050) #define GPFCON (*(volatile unsigned long *)0x56000054) #define GPFDA T (*(volatile unsigned long *)0x56000058) #define GPFUP
#define GPGCON (*(volatile unsigned long *)0x56000060) (*(volatile unsigned long *)0x56000064) #define GPGDA T (*(volatile unsigned long *)0x56000068) #define GPGUP
#define GPHCON (*(volatile unsigned long *)0x56000070) (*(volatile unsigned long *)0x56000074) #define GPHDAT
(*(volatile unsigned long *)0x56000078) #define GPHUP
/*UART registers*/
(*(volatile unsigned long *)0x50000000) #define ULCON0
#define UCON0 (*(volatile unsigned long *)0x50000004) (*(volatile unsigned long *)0x50000008) #define UFCON0
#define UMCON0 (*(volatile unsigned long *)0x5000000c)
(*(volatile unsigned long *)0x50000010) #define UTRSTAT0
#define UTXH0 (*(volatile unsigned char *)0x50000020) (*(volatile unsigned char *)0x50000024) #define URXH0
#define UBRDIV0 (*(volatile unsigned long *)0x50000028) /*interrupt registes*/
更多精品文档.
学习-----好资料
#define SRCPND (*(volatile unsigned long *)0x4A000000) #define INTMOD (*(volatile unsigned long *)0x4A000004)
#define INTMSK (*(volatile unsigned long *)0x4A000008) #define PRIORITY (*(volatile unsigned long *)0x4A00000c) #define INTPND (*(volatile unsigned long *)0x4A000010)
#define INTOFFSET (*(volatile unsigned long *)0x4A000014) #define SUBSRCPND (*(volatile unsigned long *)0x4A000018) #define INTSUBMSK (*(volatile unsigned long *)0x4A00001c) /*external interrupt registers*/
#define EINTMASK (*(volatile unsigned long *)0x560000a4) #define EINTPEND (*(volatile unsigned long *)0x560000a8)
经分析知,s2440addr.h文件中的主要内容是定义了一些看门狗,SDRAM,GPIO等的寄存器地址,并定义了串口通讯和中段的寄存器地址。
2)分析中断控制程序的结构。
首先要对中段进行初始化,并对端口功能设定。
继而进行相应中段使能,打开有关中段屏蔽位,并进入主函数等待中断,直到中段产生,由中段向量表进入中段执行中段程序。
最后退出中断,清除当前中段标志位,等待下次中段。
3)仔细分析中断初始化程序和中断处理程序中寄存器的设置方法,并理解其含义。
对寄存器的设置是通过位运算,先将想要改变的数值移至相应位时,再通过与,或,非来达到相应改变寄存器某一位值的目的。
4)总结中断程序的设计方法。
首先,在初始化汇编程序中切换至用户模式,并进入中断模式设置相应指针等;并在汇更多精品文档.
学习-----好资料
编中调用main函数和中断函数。
建立中断入口矢量表,同时关闭卡门狗定时器;编写中断处理函数,和main函数,在main函数中等待中断的产生。
更多精品文档.。