嵌入式实验报告.docx
《嵌入式实验报告.docx》由会员分享,可在线阅读,更多相关《嵌入式实验报告.docx(18页珍藏版)》请在冰豆网上搜索。
嵌入式实验报告
实验报告
专业名称
班级学号
学生姓名
实验一
1、编写程序循环对R4~R11进行累加8次赋值,R4~R11起始值为1~8,每次加操作后把R4~R11的内容放入SP栈中,SP初始设置为0x800。
最后把R4~R11用LDMFD指令清空赋值为0。
.global_start
.equstack_top,0x800
.text
_start:
MOVsp,#stack_top
MOVr4,#1
MOVr5,#2
MOVr6,#3
MOVr7,#4
MOVr8,#5
MOVr9,#6
MOVr10,#7
MOVr11,#8
STMFDsp!
{r4-r11}
MOVr3,#0/*r3=0*/
addBlock:
baddBlock
.end
实验二存储器实验
实验目的:
1.通过实验熟悉ARM的内部存储空间分配。
2.掌握对存储区配置方法。
3.掌握对存储区进行读写访问的方法。
实验设备:
硬件:
EmbestEduKit-III实验平台,EmbestARM标准/增强型仿真器套件,PC机;
软件:
EmbestIDEforARM集成开发环境,Windows98/2000/NT/XP。
实验内容:
1.熟练使用命令脚本文件对ARM存储控制寄存器进行正确配置;
2.使用C语言编程,实现对RAM的读写访问。
实验原理:
2410init.s整个系统的入口点,建立中断向量表
2410lib.c包括所有程序调用的函数,驱动
Call_int.s中断向量映射时进行现场保护
2410addr.h寄存器的地址
2410addr.inc寄存器的地址
Memcfg.h内存的定义
Option.inc配置参数
实验步骤:
1.准备实验环境
拷贝光盘CD1\Software\EduKit2410文件夹EmbestIDE\Examples\Samsung目录下(如果已经拷贝,跳过该操作);使用EduKit-III目标板附带的串口线连接目标板上UART0和PC机串口COMx;
2.串口接收设置
在PC机上运行windows自带的超级终端串口通信程序(波特率115200、1位停止位、无校验位、无硬件流控制);或者使用其它串口通信程序。
3.打开实验例程
1)运行EmbestIDE开发环境,进入实验例程目录EduKit2410\4.1.1_memory_test子目录下的memory_test.pjf例程,编译链接工程;
2)点击IDE的Debug菜单,选择RemoteConnect项或F8键,远程连接目标板;
3)点击IDE的Debug菜单,选择Download下载调试代码到目标系统的RAM中;
4)打开Memory窗口,点击Memory1在地址输入栏中输入0x30010000;
5)在工程管理窗口中双击memory_test.c就会打开该文件,在约第37行
(*pt=(UINT32T)pt;)设置断点后,点击Debug菜单Go或F5键运行程序;
6)当程序停留到断后,按F10,在Memory1窗口观察地址的内容并与地址相比较,对比是否一致,继续执行F10。
7)去掉断点,按F5并执行程序,观察超级终端串口程序的输出。
8)结合实验内容和实验原理部分,掌握汇编语言和高级语言程序访问RAM指令的使用方法。
4.观察实验结果
在PC机上观察超级终端程序主窗口,可以看到如下界面:
实验程序:
/*****************************************************/
*File:
main.c
*Author:
embest
*Desc:
cmainentry
*History:
*****************************************************/
#include"option.h"
#include"def.h"
/*functiondeclare*/
/*****************************************************/
*name:
main
*func:
ccodeentry
*para:
none
*ret:
none
*modify:
*comment:
******************************************************/
voidMain(intargc,char**argv)
{
sys_init();/*Initials3c2410'sClock,MMU,Interrupt,PortandUART*/
//userinterface
uart_printf("\n\rEmbestEduKit-IIIEvaluationBoard");
memory_test();
}
/****************************************************/
*File:
memory.c
*Author:
embest
*Desc:
memorytestfile
*History:
*****************************************************/
#include"def.h"
#include"option.h"
voidmemory_test(void)
{
inti;
UINT32Tdata;
intmemError=0;
UINT32T*pt;
//memorytest
Uart_printf("\nMemory
Test(%xh-%xh):
WR\n",_RAM_STARTADDRESS+0x10000,(_ISR_STARTADDRESS&0xf0ff0000));
//memorywrite
pt=(UINT32T*)(_RAM_STARTADDRESS+0x10000);
while((UINT32T)pt<(_ISR_STARTADDRESS&0xf0ff0000))
{
*pt=(UINT32T)pt;
pt++;
}
//MEMORYREAD
uart_printf("Memory
Test(%xh-%xh):
RD\n",_RAM_STARTADDRESS+0x10000,(_ISR_STARTADDRESS&0x0f0ff0000));
//uart_printf("\b\bRD");
pt=(UINT32T*)(_RAM_STARTADDRESS+0x10000);
while((UINT32T)pt<(_ISR_STARTADDRESS&0xf0ff0000))
{
data=*pt;
if(data!
=(UINT32T)pt)
{
memError=1;
uart_printf("\b\bFAIL:
0x%x=0x%x\n",i,data);
break;
}
pt++;
}
if(memError==0)
uart_printf("\n\b\bO.K.\n");
}
课后练习
实验三IO口实验
实验目的
1.掌握S3C2410X芯片的I/O控制寄存器的配置;
2.通过实验掌握ARM芯片使用I/O口控制LED显示;
3.了解ARM芯片中复用I/O口的使用方法。
实验设备
硬件:
EmbestEduKit-III实验平台,EmbestARM标准/增强型仿真器套件,PC机。
软件:
EmbestIDEforARM集成开发环境,Windows98/2000/NT/XP。
实验内容
编写程序,控制实验平台的发光二极管LED1,LED2,LED3,LED4,使它们有规律的点亮熄
灭,具体顺序如下:
LED1亮->LED2亮->LED3亮->LED4亮->LED1灭->LED2灭->LED3
灭->LED4灭->全亮->全灭,如此反复
实验操作步骤
1.准备实验环境
拷贝光盘CD1\Software\EduKit2410文件夹到EmbestIDE\Examples\Samsung\目录下(如果已经拷贝,跳过该操作);使用EduKit-III目标板附带的串口线连接目标板上UART0和PC机串口COMx;
2.串口接收设置在PC机上运行windows自带的超级终端串口通信程序(波特率115200、1位停止位、无校验位、无硬件流控制);或者使用其它串口通信程序。
3.打开实验例程
1)运行EmbestIDE开发环境,进入实验例程目录EduKit2410\4.2_led_test子目录下的
led_test.pjf例程,编译链接工程;
2)点击IDE的Debug菜单,选择RemoteConnect项或F8键,远程连接目标板;
3)点击IDE的Debug菜单,选择Download下载调试代码到目标系统的RAM中;
4)在工程管理窗口中双击led_test.c就会打开该文件,分别在约第34行
(for(i=0;i<100000;i++);)和58行(for(i=0;i<100000;i++);)设置断点后,
点击Debug菜单Go或F5键运行程序;
5)程序停到第一个断点处,观察四个灯是否都被点亮(注意观察渐变过程),按stepout(shift
+F11),跳出这个子函数,继续执行;
6)程序运行到led_off(),按stepinto(F11),停到第二个断点处,观察四个灯是否都熄灭(注
意观察渐变过程)。
按stepout(shift+F11),继续执行;
7)去掉断点,重新下载,执行程序
观察实验结果
观察发光二极管的亮灭情况,可以观察到的现象与前面实验内容中的相符,说明实验成功的实现了对I/0的操作。
实验参考成绩
/************************************************/
*File:
led_test.c
*Author:
embest
*Desc:
IOporttestfile
*History:
*************************************************/
#include"2410lib.h"
/************************************************/
*name:
led_xxx
*func:
theledoperations
*para:
none
*ret:
none
*************************************************/
voidled_on(void)
{
inti,nOut;
nOut=0xF0;
rGPFDAT=nOut&0x70;
-165-
for(i=0;i<100000;i++);
rGPFDAT=nOut&0x30;
for(i=0;i<100000;i++);
rGPFDAT=nOut&0x10;
for(i=0;i<100000;i++);
rGPFDAT=nOut&0x00;
for(i=0;i<100000