《嵌入式系统》
实验报告
姓名:
学号:
班级:
20##年4月
实验一 ARM汇编指令实验1
一、实验目的
1.初步学会使用ADS1.2 开发环境及ARM软件模拟器;
2.通过实验掌握简单ARM汇编指令的使用方法。
二.实验设备
1.硬件:PC机;
2.软件:ADS1.2集成开发环境。Windows98/2000/NT/XP。
三.实验内容
1.熟悉开发环境的使用,并使用LDR/STR和MOV等指令访问寄存器或存储单元。
2.使用ADD/SUB/LSL/LSR/AND/ORR等指令,完成基本数学/逻辑运算。
四.实验原理
ARM处理器共有37个寄存器:31个通用寄存器,包括程序计数器(PC),这些寄存器都是32位;6个状态寄存器,这些寄存器也是32位,但只使用了其中的12位。
1.ARM通用寄存器
通用寄存器(R0~R15)可分为3类,即不分组寄存器R0~R7.分组寄存器R8~R14.程序计数器R15。
2. 存储器格式
ARM体系结构将存储器看作是从零地址开始的字节的线性组合。字节0~3存放第一个字,字节4~7存放第2个字,以此类推。
ARM体系结构可以用两种方法存储字数据,分别称为大端格式和小端格式。
五.实验程序
1. 实验A参考程序
X EQU 45 :定义变量x,并赋值为45
Y EQU 64 :定义变量y,并赋值为64
STACK_TOP EQU 0x1000 :定义栈顶0x1000
AREA Example,CODE,READONLY :声明代码段
ENTRY :标识入口
START
MOV SP,#STACK_TOP
MOV R0,#X :x的值放入R0
STR R0,[SP] :R0的值保存到堆栈
MOV R0,#Y :y的值放入R0
LDR R1,[SP] :取堆栈中的数到R1
ADD R0,R0, R1
STR R0,[sp]
STOP B STOP :死循环
END :结束
2. 实验B参考程序
X EQU 45 :定义变量x,并赋值为45
Y EQU 64 :定义变量y,并赋值为64
Z EQU 87 :定义变量z,并赋值为87
STACK_TOP EQU 0X1000 :定义堆栈顶0x1000
AREA HUXIANG,CODE,READONLY : 声明代码段,只读
ENTRY : 标识入口
START
MOV R0,#X :x的值放入R0
MOV R0,R0,LSL#8 :R0的值乘以2的8次方
MOV R1,#Y :y的值放入R1
ADD R2,R0,R1,LSR#1 :R1的值除以2加上r0的值放入R2
MOV SP,#0X1000
STR R2,[SP]
MOV R0,#Z :z的值放入R0
AND R0,R0,#0XFF :取R0的低八位
MOV R1,#Y :y的值放入R1
ADD R2,R0,R1,LSR#1 :R1的值除以2加上r0的值放入R2
LDR R0,[SP] :y的值放入R1
MOV R1,#0X01
ORR R0,R0,R1
MOV R1,R2 :y的值放入R1
ADD R2,R0,R1,LSR#1 :R1的值除以2加上r0的值放入R2
STOP B STOP :死循环
END :结束
六.实验结果及分析
1. 程序A的实验结果截图如下:
实验分析;
本实验使用LDR、STR、MOV等指令访问寄存器和存储单元,使用堆栈和寄存器R0,R1存储变量。
2. 程序B的实验结果截图如下:
实验分析:
本实验使用ADD、SUB、LSL、LSR、AND、ORR等指令,完成基本数学/逻辑运算。
实验二 ARM汇编指令实验2
一、实验目的
通过实验掌握使用LDM/STM、B和BL等指令完成较为复杂的存储区访问和程序分支,学习使用条件码,加强对CPSR的认识。
二、实验设备
1.硬件:PC机;
2.软件:ADS1.2集成开发环境。Windows98/2000/NT/XP。
三、实验内容
1.熟悉开发环境的使用并完成一块存储区的拷贝;
2.完成分支程序设计,要求判断参数,根据不同参数,调用不同的子程序。
四、实验原理
1.ARM程序状态存储器
在所有处理器模式下,都可以访问当前程序状态寄存器CPSR。CPSR包含条件码标志、中断禁止位、当前处理器模式以及其他状态和控制信息。每种异常模式都有一个程序状态保存寄存器SPSR。当异常出现时,SPSR用于保存CPSR的状态。CPSR和SPSR的格式如下:
31 30 29 28 27 26 8 7 6 5 4 3 2 1 0
2.本实验涉及到得as语法及规则
1)标号的使用
标号由一个符号后跟一个冒号组成,它表示程序中当前的指令或者数据地址。如果在程序中出现两个相同的标号,汇编器会产生一个警告,同时,只有第一个标号有效。
2)几个伪指令
(1)LDR
LDR伪指令讲一个32位常数或者一个地址值读取到寄存器中。当需要读取到寄存器中的数据超过了MOV或者MNV指令可以操作的范围时,可以使用LDR伪指令将该数据读取到寄存器中。在汇编编译器处理源程序时,如果该常数没有超过MOV或者MNV可以操作的范围,则LDR指令被这两条指令中的一条所替代;否则,该常数将被放在最近的一个文字池(Literal Pool)内,同时,本指令被一条基于PC的LDR指令代替。
语法格式
LDR<register>, = <expression>
其中,expression 为需要读取的32位常数。Register 为目标寄存器。
示例
LDR r1,=0xff
LDR r0,=0xfff0000
(2) ADR
ADR指令将基于PC的地址值或者给予寄存器的地址值读取到寄存器中。在汇编编译器处理源程序时,ADR伪指令被编译器替换成一条合适的指令。通常,编译器用一条ADD指令或者SUB指令来实现该伪指令的功能。如果标号超出范围或者标号在他那个一文件(和同一段)内没有定义,则会产生一个错误,该指令不使用文字池。
语法格式
ADR <register> <label>
其中,register 为目标寄存器。Label为基于PC或者寄存器的地址表达式。
示例Label1:
MOV r0,#25
ADR r2,label1
(3).ltorg
.ltorg 伪操作用于在当前段(一般是. Text段)的当前地址(字对准地址)产生一个文字池。
语法格式
. Ltorg
五、实验程序
NUM EQU 20
AREA HUXIANG3,CODE,READONLY
ENTRY
START LDR R0,=SRC
LDR R1,=DST
MOV R2,#NUM
MOV SP,#0X400
BLKCOPY MOVS R3,R2,LSR#3
BEQ COPYWORDS
STMFD SP!,{R4-R11}
OCTCOPY LDMIA R0!,{R4-R11}
STMIA R1!,{R4-R11}
SUBS R3,R3,#1
BNE OCTCOPY
LDMFD SP!,{R4-R11}
COPYWORDS ANDS R2,R2,#7
BEQ STOP
WORDCOPY LDR R3,[R0],#4
STR R3,[R1],#4
SUBS R2,R2,#1
BNE WORDCOPY
STOP B STOP
SRC DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4
DST DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
END
六、实验结果及分析
程序的实验结果截图如下
实验分析:
程序将数据从源数据区snum复制到目标数据区dumn,数据的个数num假定为20,复制时以8个字为单位进行,对于最后不足8个字的数据,以字为单位进行复制。
一、实验目的
1.阅读Embest S3CEV40启动代码,观察处理器启动过程。
2.学会使用Embest IDE辅助信息窗口来分析判断调试过程和结果
3.学会在Embest IDE环境中编写、编译与调试汇编和C语言相互调用的程序。
二、实验设备
1.硬件:PC机;
2.软件:Embest IDE 2004集成开发环境。Windows98/2000/NT/XP。
三、实验内容
使用汇编完成一个随机数产生函数,通过C语言调用该函数,产生一系列随机数,存放到数组中。
四、实验原理
1.ARM过程调用ATPCS(ARM)
ATPCS是一系列规定应用程序之间相互调用的基本规则,包括:
l 支持数据栈限制检查;
l 支持只读段位置无关(ROPI);
l 支持可读/写段位置无关(RWPI);
l 支持ARM程序和Thumb程序的混合使用;
l 处理浮点运算。
使用以上规定的ATPCS规则是,应用程序必须遵守如下:
l 程序编写遵守ATPCS;
l 变量传递以中间寄存器和数据栈完成;
l 汇编器使用-apcs开关选项。
关于其他ATPCS规则,用户可以参考ARM处理器相关书籍或登录ARM公司网站。
程序只要遵守ATPCS相应规则,就可以使用不同的源代码来编写程序。程序间的相互调用最主要的是解决参数传递问题。应用程序之间使用中间及数据栈来传递参数,其中,第1~4个参数使用R0~R3,多用4个参数数据栈进行传递。这样,接受参数的应用程序必须知道参数的个数。
但是,在应用程序被调用时,一般无从知道所传递参数的个数。用不同语言编写的应用程序在调用时可以自定义传递的约定。使用具有一定意义的形式来传递,可以很好地解决参数个数的问题。常用方法是把第1个或最后1个参数作为参数个数(包括个数本身)传递给应用程序。ATPCS中寄存器的相应关系如表3.1所列。
表3.1 ATPCS规则中寄存器列表
2.main( )与__gccmain( )函数
当应用程序中包含了main( )函数时,会引起对C运行时库的初始化。该初始化是通过函数__gccmain( )实现的,即在main( )函数入口处,编译器会首先调用__gccmain( )函数,然后才是执行编写的代码。__gccmain( )函数在GCC的标准库里实现。当应用程序中没有包含main( )函数时,不会引起对C运行时库的初始化。这时,C运行时库的很多功能在应用程序中是不能使用的。
如果使用main( )函数作为应用程序的主函数,那么可以在源代码中间加入一个空的__gccmain( )函数(用C语言或汇编语言即可)
五、实验操作步骤
1. 创建新的工程,工程名为explasm。
2. 按照参考程序,重新编写源代码文件,并分别保持为 randtest.c、init. s、random. s和ldscript,并把它们加入工程中。
3. 按照编译→汇编器设置→链接器设置→调试器设置来设置新工程,并编译、链接工程。
4.下载调试文件,打开Memrory/Register/Watch/Variable/Call Stack窗口,单步执行程序。通过以上窗口,跟踪程序运行,观察分析并记录运行结果,通过实验学会使用Embest IDE进行应用程序的开发与调试。
六、实验参考程序
1.randtest.c参考源代码
2.init.s参考源代码
3.random.s参考源代码
运行结果:
实验五 串口通信实验
1 实验目的
(1) 掌握ARM的串行口工作原理;
(2) 编程实现ARM的UART通讯;
(3) 掌握S3C2410寄存器配置方法。
2 实验设备
(1) S3C2410嵌入式开发板,JTAG仿真器。
(2) 软件:PC机操作系统Windows XP,ADS1.2集成开发环境,仿真器驱动程序,超级终端通讯程序。
3 实验内容
实现查询方式串口的收发功能。接收来自串口(通过超级终端)的字符并将接收到的字符发送到超级终端。
4 实验步骤
(1) 参照模板工程,新建一个工程UART,添加相应的文件,并修改UART的工程设置;相关设置如下列图所示:
图5.1 设置R0 Base
图5.2 添加Target
图5.3 配置
(2) 创建xinint.c和init.c并加入到工程UART中;
(3) 编写串口操作函数实现如下功能:循环接收串口送来的数据,并将接收到的数据发送回去;
参考代码如下:
(1)串口初始化程序
MMU_Init(); //初始化内存管理单元
//设置系统时钟
ChangeClockDivider(1,1); // 1:2:4
ChangeMPllValue(0xa1,0x3,0x1); // FCLK=202.8MHz
Port_Init(); //初始化I/O口
Uart_Init(0,115200); //初始化串口
Uart_Select(0); //选择串口0
(2)发送数据
while(!(rUTRSTAT0&0x2)); //等待发送缓冲空
rUTXH0=data; //将数据写到数据端口
(3)接收数据
while(rUTRSTAT0&0x1==0x0); //等待数据
data=rURXH0; //读取数据(4) 编译UART;
(5) 将计算机的串口接到开发板的UART0上;
(6) 运行超级终端,选择正确的串口号,并将串口设置位:波特率(115200)、奇偶校验(None)、数据位数(8)和停止位数(1),无流控,打开串口;
(7) 运行程序,在超级终端中输入的数据将回显到超级终端上,结果如图5.4所示:
图5.4 运行结果
(8) 修改程序代码,使用户输入的数字在超级终端显示;结果如图5.5所示:
图5.5 运行结果
图5.6 运行结果
5 实验总结
通过这次实验我掌握了串口的使用方法,串口初始化、发送数据和接收数据,为以后的实验奠定了基础,通过有关书籍我知道在嵌入式系统中串口是一个重要的资源,常用来做输入输出设备。
在实验过程中遇到了很多的问题,在第一次连接开发板的时候,无论怎样连接都无法在超级终端显示,在修改代码使用户输入数字在超级终端显示时,代码重新修改优化也是花费了很多的时间。
武汉大学计算机学院08级嵌入式系统设计实验报告班级08级计科5班指导老师武小平学期20xx20xx第1学期小组成员目录一设计题目选…
嵌入式系统实验报告姓名:##学号:##班级:计算机科学与技术非师范121班实验一LCD控制一、实验目的1、初步掌握液晶显示屏的使用…
嵌入式实验报告姓名邓庆学号1075490019学院通信工程学院实验一电源复位时钟管理单元一实验目的1了解如何配置不同的时钟2如何使…
嵌入式系统实验报告学院测量与通信工程学院专业信号与信息处理学生姓名姜元学号1320xx0050指导教师董静薇一实验目的了解Boot…
嵌入式系统实验报告小组成员指导老师实验三键盘及LED驱动实验一实验目的1学习键盘及LED驱动原理2掌握ZLG7289芯片的使用方法…
嵌入式系统设计实验报告班级学号姓名成绩指导教师1实验一11实验名称博创UP3000实验台基本结构及使用方法12实验目的1学习嵌入式…
嵌入式系统实验报告姓名:##学号:##班级:计算机科学与技术非师范121班实验一LCD控制一、实验目的1、初步掌握液晶显示屏的使用…
嵌入式实验报告指导老师涂刚班级计算机0704姓名学号姓名学号完成日期75试验一bootloaderads引导一实验任务1熟悉ADS…
这学期才接触嵌入式系统感觉还称不上入门,我通过学习知道了嵌入式的发展前景很大,各个领域都用到了嵌入式,学好嵌入式不愁没饭吃。广义上…