嵌入式系统ARM实验报告

时间:2019-05-14 04:41:53下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《嵌入式系统ARM实验报告》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《嵌入式系统ARM实验报告》。

第一篇:嵌入式系统ARM实验报告

南京邮电大学通信与信息工程学院

实验报告

实验名称:实验一基于ADS开发环境的设计

实验二嵌入式Linux交叉开发环境的建立 实验三嵌入式Linux环境下的程序设计

课程名称嵌入式系统B

班级学号B13010711 姓名马俊民

开课时间 2015/2016学年第1学期

实验一基于ADS开发环境的程序设计

一、实验目的

1、学习ADS开发环境的使用;

2、学习和掌握ADS环境下的汇编语言及C语言程序设计;

3、学习和掌握汇编语言及C语言的混合编程方法。

二、实验内容

1、编写和调试汇编语言程序;

2、编写和调试C语言程序;

3、编写和调试汇编语言及C语言的混合程序;

4、编写程序测试多寄存器传送指令的用法。

三、实验原理

ADS全称为ARM Developer Suite,是ARM公司推出的新一代ARM集成开发工具。现在常用的ADS版本是ADS1.2,它取代了早期的ADS1.1和ADS1.0。

ADS用于无操作系统的ARM系统开发,是对裸机(可理解成一个高级单片机)的开发。ADS具有极佳的测试环境和良好的侦错功能,它可使硬件开发工作者更深入地从底层去理解ARM处理器的工作原理和操作方法,为日后自行设计打基础,为BootLoader的编写和调试打基础。

1.ADS软件的组成

ADS由命令行开发工具、ARM运行时库、GUI开发环境(CodeWarrior和AXD)、实用程序、支持软件等组成。

2.GUI开发环境

ADS GUI开发环境包含CodeWarrior和AXD两种,其中Code Warrior是集成开发工具,而AXD是调试工具。

使用汇编语言进行编程简单、方便,适用于初始化硬件代码、启动代码等。汇编语言具有一些相同的基本特征:

1.一条指令一行。

2.使用标号(label)给内存单元提供名称,从第一列开始书写。3.指令必须从第二列或能区分标号的地方开始书写。4.注释必须跟在指定的注释字符后面,一直书写到行尾。

在ARM汇编程序中,每个段必须以AREA作为段的开始,以碰到下一个AREA作为该段的结束,段名必须唯一。程序的开始和结束需以ENTRY和END来标识。嵌入式C语言设计是利用基本的C语言知识,面向嵌入式工程实际应用进行程序设计。为了使单独编译的C语言程序和汇编程序之间能够相互调用,必须为子程序之间的调用规定一定的规则。ATPCS就是ARM程序和Thumb程序中子程序调用的基本规则。

四、实验过程与关键代码分析

1.创建项目工程

在File菜单中选择New命令,打开一个新建工程对话框。在Project选项卡下,选择ARM Executable Image, 然后在Project name文本框里输入项目名称,点击确定。弹出工程窗口。

选择File菜单中的New命令,选择File标签页,在File name文本框中输入要创建的文件名。汇编程序以.s结尾,c程序以.c结尾。在Location文本框中指定文件的存放位置,选中Add to Project,在Targets中选中DebugRel,单击确定关闭窗口。

2.用汇编语言设计程序实现10的阶乘

AREA EXAMPLE, CODE, READONLY ENTRY start MOV R0, #10 MOV R1, #1 LOOP MUL R0, R0, R1 SUB R0, R0, 1 CMP R0, #1 BHI LOOP END 在这个程序中,我们首先对R0和R1赋值,将R0作为一个变量,而R1作为一个存贮阶乘值的寄存器。在每进行一次乘法之后,将R0减1。同时在做完减法后进行判断,如果此时R0大于1,则返回继续乘法,否则结束程序,输出结果。

3.用调用子程序的方法实现1!+2!+3!+„+10!,代码如下: asmp.s

AREA JC, CODE, READONLY

EXPORT JCP

ENTRY JCP

ADD R3, R0, #1

MOV R2, #1

MOV R1, #1 LOOP MUL R0, R1, R2

MOV R1, R0

ADD R2, R2, #1

CMP R2, R3

BNE LOOP

NOP

NOP

MOV PC, LR

END

PROGC.c #include Extern int JCP(int N)

int main(){ int res=0;int m=10;int i;for(i=1;i<=m;i++)

res=res+JCP(i);printf(“The result =%dn”,res);return 0;} 在这个程序中,主程序由c语言完成作求和,子程序由汇编语言写成作阶乘。

5.实现字符串的逆序复制TEXT1=“HELLO”=>TEXT2=“OLLEH”

AREA invstring, CODE, READONLY start

ADR R1,TEXT1

ADR R2,TEXT2

MOV R3, #0 LOOP

LDRB R0,[R1], #1

ADD R3,R3,#1

CMP R0,#0

BNE LOOP

SUB R1,R1,#2

LOOP1

LDRB R0,[R1], #-1

STRB R0,[R2], #1

SUB R3,R3, #1

CMP R3,#1

BNE LOOP1

MOV R5,#&55

TEXT1

TEXT2 NOP =“HELLO”,0 ALIGN =“OELLH” END

五、实验小结

在这次实验中,学会了如何使用汇编程序进行编程。对汇编程序编程一些基本的要求有了一定的了解,学习了C语言的语法和在其中调用汇编程序的方法。学会了利用CodeWarrior IDE开发C和ARM汇编代码。学会了在AXD中进行代码调试的方法和过程,对AXD的调试有初步的了解。,实验二嵌入式Linux交叉开发环境的建立

一、实验目的

1、掌握嵌入式Linux交叉开发环境的建立方法

2、学习和掌握Linux常用命令

3、学习和掌握vi编辑器的使用

二、实验内容

1、搭建嵌入式Linux交叉开发环境

2、熟悉Linux的常用命令

3、熟悉vi编辑器的常用命令

三、实验原理

Linux系统是UNIX系统的分支,是UNIX的微机版。Linux具有异常丰富的驱动程序资源,支持各种主流的硬件设备与技术。Linux包含了现代的UNIX操作系统的所有功能特性,这些功能包括多任务、虚拟内存、虚拟文件系统、进程间通信、对称所处理器、多用户支持等。

Vi编辑器是所有UNIX和Linux下的标准编辑器。它包含3种工作模式。嵌入式系统是专用的计算机系统,它对系统的功能、可靠性、成本、体积、功耗等有严格的要求。大部分嵌入式系统没有大容量存储设备,一般不能安装大型开发软件,系统的开发需要采用交叉开发模式。

四、实验过程与关键代码分析

实验用的是UP-NetARM2410-S试验箱,里面配有三星的芯片S3c2410X。打开电脑上VMWare软件,在Windows系统下启动虚拟机里的Linux系统。接着需要

1.宿主机的环境搭建

下载并运行VMWare,根据向导创建一台新虚拟机并选择Linux作为客户操作系统,再根据向导安装RedHat Linux 9.0。

2.虚拟机中启动Linux操作系统

使用root登陆,用户名为root,密码为123456。之后对共享文件设置进行调整:打开settings界面,打开shared folders功能,同时将路径设置到有课前下载的软件的目录下。

3.开发工具软件的安装(1)安装gcc 打开Linux后,打开终端窗口,在共享的目录下找到install.sh并运行,命令如下: ls./ install.sh 安装程序将自动建立/arm2410s目录,并将所有的开发软件包安装到/arm2410s 目录下,同时自动配置编译环境,建立合适的符号链接。安装完成后在目录/opt/host/armv4l/bin/下应该能看到主编译器。(2)配置PATH路径

vi.bash.profile 将里面PATH变量改为PATH=$PATH:$HOME/bin:/opt/host/armv41/bin/;存盘后执行

source.bash_profile 以后armv4l-unknown-linux-gcc将被自动搜索到

4.宿主机上的开发环境配置(1)配置IP地址

ifconfig eth0 192.168.0.121 命令配置了宿主机的IP地址。然后打开网络配置窗口,重新探测MAC地址。重新激活。(2)关闭防火墙

单击“Red”菜单→“系统设置”→“安全级别”→打开“安全级别配置”窗口,选择“无防火墙选项。”(3)配置NFS。

单击“Red”菜单→“系统设置”→“服务器设置”→“服务”,在“服务配置”窗口中勾选nfs,单击“开始”(4)NFS设置

单击“Red”菜单→“系统设置”→“服务器设置”→“NFS服务器”,打开“NFS服务器配置”窗口,设置NFS共享。

然后在NFS服务器中增加主机IP地址的链接许可和目录。完成配置。

5.目标机的信息输出

Windows系统下,“开始”→“所有程序”→“附件”→“通讯”→“超级终端”,新建一个通信终端。区号、电话号码随意输入。设置每秒位数为“115200”,数据位为“8”,无奇偶校验,停止位为“1”,无数据流控制。单击“确定”。

6.程序的运行

打开超级终端,启动Linux,屏幕显示:

[/mnt/yaffs] 在超级终端上执行挂载命令:

[/mnt] mount –t nfs 192.168.0.121:/arm2410s /mnt/nfs 挂载成功后可执行程序。

五、实验小结

在这次实验中,学会建立Linux交叉开发环境,学会了ls和vi,cd等常用的Linux命令,并掌握了Vi编辑器的使用方法。同时知道了如何在搭建失败时寻找错误进行排错。

实验三嵌入式Linux环境下的程序设计

一、实验目的

1、掌握嵌入式Linux环境下的程序设计方法

2、学会编写Makefile文件

二、实验内容

1、熟悉嵌入式教学实验箱的使用

2、编写C程序和Makefile文件

3、编译程序产生可执行程序

4、完成主机的挂载和程序的执行

三、实验原理

在嵌入式Linux环境下的程序设计方法有一下几个步骤:

1.编写源程序

2.编写Makefile文件 3.编译程序

4.运行和调试程序

5.将生产的可执行文件加入文件系统。

前三个步骤在宿主机上完成,后面的步骤在目标机上完成。

四、实验过程与关键代码分析

1.建立工作目录

mkdir hello cd hello

2.编写源程序

用vi编辑器编辑Hello.c文件

vi Hello.c 在Vi中输入源程序如下:

#include main(){

printf(“hello world n”);}

3.编写Makefile文件

vi Makefile 在vi中编辑Makefile文件如下:

CC= armv4l-unknown-linux-gcc EXEC = hello OBJS = hello.o CFLAGS += LDFLAGS+=-static all: $(EXEC)$(EXEC):(OBJS)$(CC)$(LDFLAGS)–o $@ $(OBJS)clean:

-rm –f $(EXEC)*.elf *.gdb *.o

4.编译程序

在hello目录下运行“make”来编译程序。

make clean

make 编译成功后,生成可执行文件Hello.o。

5.下载调试

在宿主机上启动nfs服务,并将/arms2410s设置为共享目录。接下来启动超级终端,建立通讯,挂载。

[/mnt] mount –t nfs 192.168.0.121:/arm2410s /mnt/nfs 挂载成功后,进入/mnt/nfs,再进入/mnt/nfs/hello,直接运行刚刚编译生成的可执行文件Hello.o,查看运行结果

cd hello./hello 可以看见“Hello world”

只需要挂载一次便可,只要实验箱没有重启,就可以一直保持连接。反复修改、编译、调试,直至程序调试通过。

6.可执行文件加入文件系统

程序调试通过后,可以把可执行文件拖放到usr/bin目录下,然后使用mkcramfs制作工具生成新的文件系统。当系统启动后,就可以在相应目录下执行可执行程序hello.五、实验小结 在这次实验中,学会了在嵌入式Linux环境下设计程序。同时知道了如何对目标机进行挂载。以及如何在发现挂载不成功寻找错误进行修改。另外在编译文件时需要注意的也都有所了解。

实验四多线程程序设计

一、实验目的1、2、二、实验内容1、2、3、4、三、实验原理

四、实验过程与关键代码分析

五、实验小结

3+

第二篇:ARM与嵌入式实验报告

ARM与嵌入式技术

实验报告

专业班级:通信工程

姓名:**** 学号:******

实验日期:2012年6月7日 指导老师:*****

一、实验目的

1.学习使用Embest IDE开发环境及ARM 软件模拟器;

2.掌握简单ARM 汇编指令,进一步加强对嵌入式的熟悉和了解。

二、实验设备

硬件:PC 机

软件:Embest IDE 开发环境

三、实验内容

例3:实现64位加法运算,要求【R1:R0】+【R3:R2】,结果放回【R1:R0】中; 例2:编写程序将R2的高8位传送到R3的低8位(不考虑R3的其它位); 例7:编写一段程序计算10!;

例8:串拷贝(R1指向源数据串的首地址,R0指向目的数据串的首地址)。

四、实验步骤

1)新建工程:

运行Embest IDE 集成开发环境,选择菜单项File → New Workspace,如图一,系统弹出一个对话框,键入文件名“沈”,如图二,点击OK 按钮。将创建一个新工程,并同时创建一个与工程名相同的工作区。此时在工作区窗口将打开该工作区和工程.。

2)建立源文件:

点击菜单项File → New,如图三,系统弹出一个新的文本编辑窗,输入源文件代码。编辑完后,保存文件“沈.s”后缀,如图四。

3)添加源文件:

选择菜单项Project → Add To Project → Files,在工程目录下选择刚才建立的源文件.s后缀文件,如图五,图六。

4)基本配置:

选择菜单项Project → Settings,弹出工程设置对话框。在工程设置对话框中。① 选择Processor 设置对话框,按照图七所示,进行配置:

图七

② 选择Remote设置对话框,按照下图八所示,进行配置:

图八 ③ 选择最右边一个进行编译,显示如图九,则编译成功。

图九

④ 选择Project → Settings → Debug设置对话框,按照图十所示,进行配置:

图十 ⑤

选择

5)选择菜单项Debug →Remote Connect 进行连接软件仿真器,将存储器地址改为0x1000,如图十一,执行Debug →Download 命令下载程序,并打开寄存器窗口。打开memory 窗口,按F10进行单步跟踪,观察寄存器的数据变化并分析。最右边一个进行编译,显示如图九,则编译成功。

图十一

五、各实验的参考程序及运行结果

实验一:(例3)实现64位加法运算,要求【R1:R0】+【R3:R2】,结果放回【R1:R0】中; 1.程序代码如下:

.global _start

.text _start:

mov R0,#11

/*R0=11*/ mov R1,#22

/*R1=22*/ mov R2,#33

/*R2=33*/ mov R3,#44

/*R3=44*/ ADDS R0,R0,R2

/*R0等于低32位相加,并影响标志位*/

ADC R1,R1,R3

/*R1等于高32位相加,并加上低位进位*/ stop:

b stop.end

2.分析调试:

①download下载:

② 读入数据:

③ r0+r2→r0(低32位):

④ r1+r3→r1(带进位的加法):

实验二:(例2)编写程序将R2高8位传送到R3的低8位(不考虑R3的其它位);

1.程序代码如下:

.global _start _start: ldr r2,=0x23453401 ldr r3,=0xabcd1200 and r2,r2,#0xff000000 /*保留R2的高8位,屏蔽低24位*/ and r3,r3,#0xffffff00 /*保留R3的高24位,屏蔽低8位*/

orr r3,r3,r2,lsr #24

/*将R2的高8位传送到R3的低8位*/ stop:

b stop.end

2.分析调试:

①download下载:

②保留r2的高8位,屏蔽低24位:

③保留r3的高24位,屏蔽低8位:

④将R2的高8位传送到R3的低8位:

实验三:(例7)编写一段程序计算10!

1.程序代码如下:

.global _start.text.equ num,10 _start: mov r0,#num mov r1,r0 s1: subs r1,r1,#1

/*把r1-1放入r1*/ mul r0,r1,r0

/*r0*r1放入r0*/ cmp r1,#1

/*比较R1与1的大小*/ beq stop

bne s1 stop: b stop.end

2.分析调试:

① download下载:

② 第一次执行S1,r1=10-1=9,10*9=90,换成16进制是5a。

③ 第二次执行S1,r1=9-1=8,10*9*8=720,换成16进制是2d0。

④ 依次执行S1,到r1=1,停止,10*9*8„„*1=3628800,换成16进制是375f00。

实验四:(例8)串拷贝(R1指向源数据串首地址,R0指向目的数据串的首地址)。1.程序代码如下:.global _start.text.EQU NUM,8 _start:

LDR R0,=srcstr

/*指向源数据串R0*/

LDR R1,=dststr

/*指向目标数据串R1*/

mov R3,#NUM

/*R3=8*/

mov LR,PC

/*返回*/

B strcopy

/*调用串拷贝子程序*/ stop: b stop

strcopy:

LDRB R2,[R0],#1

/*装载字节同时更新地址*/

STRB R2,[R1],#1

/*存储字节同时更新地址*/

SUBS R3,R3,#1

CMP R3,#0

/*判断是否结束*/

BNE strcopy

/*不是,则继续*/

MOV PC,LR

/*返回*/.data

srcstr:.long 1,2,3,4,5,6,7,0

/*定义源数据串*/

dststr:.long 5,3,2,1,4,6,8,0

/*定义目的字符串*/

2.分析调试:

①单步跟踪后的结果及存储器的结果显示:

②寄存器的结果显示:

六、实验心得

今天在实验室里,学习使用Embest IDE开发环境及ARM 软件模拟器,掌握简单ARM 汇编指令,进一步加强了对嵌入式的熟悉和了解。郑老师在兢兢业业的向我们传授实践知识的同时也向我们提问相关理论问题,让我们在学习的过程加深对实践和理论两者之间的联系,知道每一个步骤的发生的原因及产生相应的结果,即对实验的来龙去脉有了更清楚的认识,为今后的学习打下了一定的基础。相信在接下来的实验中,我们会在郑老师的引导下,做起实验来更能得心应手,轻车熟驾!

第三篇:嵌入式系统实验报告

嵌入式系统实验报告

号:

名:

级:13电子信息工程

指导老师:

苏州大学 电子信息学院

2016年12月

实验一:一个灯的闪烁

1、实验要求

实现PF6-10端口所连接的任意一个LED灯点亮

2、电路原理图

图1 LED灯硬件连接图

3、软件分析

RCC_Configuration();/* 配置系统时钟 */

GPIO_Configuration();

/* 配置GPIO IO口初始化 */

for(;;)

{

GPIOF->ODR = 0xfcff;

/* PF8=0--> 点亮D3 */

Delay(1000000);

GPIOF->ODR = 0xffff;

/* PF8=1--> 熄灭D3 */

Delay(1000000);

4、实验现象

通过对GPIOF8的操作,可以使LED3闪烁

5、实验总结

这是第一次使用STM32开发板,主要内容是对IO端口进行配置,点亮与IO端口相连接的LED灯,闪烁周期为2S。通过本实验对STM32开发板的硬件原理有了初步了解。

实验二:流水灯

1、实验要求

实现PF6-10端口所连接的5个LED灯顺次亮灭

2、电路原理图

图1 流水灯硬件连接图

3、软件分析

int main(void){

RCC_Configuration();/* 配置系统时钟 */

GPIO_Configuration();/* 配置GPIO IO口初始化 */

for(;;)

{

GPIOF->ODR = 0xffbf;

/* PF6=0--> 点亮LED1 */ Delay(5000000);GPIOF->ODR = 0xff7f;

}

/* PF7=0--> 点亮LED2 */ Delay(5000000);

GPIOF->ODR = 0xfeff;

/* PF8=0--> 点亮LED3 */ Delay(5000000);

GPIOF->ODR = 0xfdff;

/* PF9=0--> 点亮LED4 */ Delay(5000000);

GPIOF->ODR = 0xfbff;

/* PF10=0--> 点亮LED5 */ }

4、实验现象

LED1~LED5依次点亮,亮灭的时间间隔都为1S。

5、实验总结

本次实验对STM32开发板的GPIO端口进行进一步学习,通过程序可以实现流水灯的闪烁。

实验三:单级外部中断

1、实验要求

按下某个按键,触发中断,中断服务程序改变LED灯状态

2、电路原理图

图3 SW1硬件原理图

3、软件分析

int main()

{

RCC_Configuration();

GPIO_Configuration();

GPIO_Write(GPIOF,0xffff);Delay(5000);

while(1)

{

}

/* 配置系统时钟 */

/* IO口初始化 */

/* 全灭 */

if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)==0)/* 如果SW1 PA8=0 */ {

GPIO_SetBits(GPIOF, GPIO_Pin_6);

/* LED1点亮 */

Delay(0x1FFFFF);

GPIO_ResetBits(GPIOF, GPIO_Pin_6);

/* LED1 熄灭 */ Delay(0x1FFFFF);} }

4、实验现象

原来5个LED灯都处于熄灭状态,按下SW1,触发中断程序,LED1点亮。

5、实验总结

通过本次实验,可以对某一状态通过外部中断,改变其当前状态。

实验四:多中断嵌套

1、实验要求

按下某个按键,触发中断,中断服务程序改变LED灯状态

2、电路原理图

图4 SW1,SW2,SW3硬件原理图

3、软件分析

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;

//设定中断源为PA0 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//中断占优先级为0 NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQChannel;

//设定中断源为PD3 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//中断占优先级为1 NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;//设定中断源为PA8 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;//中断占优先级为2 void EXTI0_IRQHandler(void){ int i=0;if(EXTI_GetITStatus(EXTI_Line0)!= RESET){ for(i=0;i<10;i++){

GPIO_Write(GPIOF,0xffff);

GPIO_SetBits(GPIOF, GPIO_Pin_6);/* LED1 点亮 */ Delay(0x5fFFFF);GPIO_ResetBits(GPIOF, GPIO_Pin_6);/* LED1 熄灭 */

Delay(0x5fFFFF);EXTI_ClearITPendingBit(EXTI_Line0);} } }

void EXTI3_IRQHandler(void)if(EXTI_GetITStatus(EXTI_Line3)!= RESET){ {

int i=0;for(i=0;i<10;i++){

GPIO_Write(GPIOF,0xffff);

GPIO_SetBits(GPIOF, GPIO_Pin_7);/* LED2 点亮 */ Delay(0x5fFFFF);GPIO_ResetBits(GPIOF, GPIO_Pin_7);/* LED2 熄灭 */ Delay(0x5fFFFF);EXTI_ClearITPendingBit(EXTI_Line3);} } } void EXTI9_5_IRQHandler(void){ int i=0;

if(EXTI_GetITStatus(EXTI_Line8)!= RESET){

for(i=0;i<10;i++){

GPIO_Write(GPIOF,0xffff);

GPIO_SetBits(GPIOF, GPIO_Pin_8);/* LED3 点亮 */

Delay(0x5fFFFF);

GPIO_ResetBits(GPIOF, GPIO_Pin_8);/* LED3 熄灭 */

Delay(0x5fFFFF);

EXTI_ClearITPendingBit(EXTI_Line8);} } }

4、实验现象

中断优先级从高到低依次为:SW3,SW2,SW1 原来5个LED灯都处于熄灭状态,按下SW1,LED3应该闪烁10次,当其闪烁5次后按下SW2,LED2也应该闪烁10次,当其闪烁4次后按下SW3,LED1也应该闪烁10次,则当LED1闪烁完10次后,LED2继续闪烁6次,之后LED1继续闪烁5次。

5、实验总结

通过本次实验,可以对LED状态实行中断嵌套,由以上实验现象,得出以下结论:高中断优先级可以打断低优先级,中断系统正在执行一个中断服务时,有另一个优先级更高的中断提出中断请求,这时会暂时终止当前正在执行的级别较低的中断源的服务程序,去处理级别更高的中断源,待处理完毕,再返回到被中断了的中断服务程序继续执行,反之,低中断优先级不可以打断高优先级。

实验五:TIM2的基本应用

1、实验要求

TIM2定时器将LED灯定时点亮和熄灭一定的时间

2、电路原理图

3、软件分析

TIM_Cmd(TIM2, ENABLE);

/* TIM2 enable counter */ TIM_TimeBaseStructure.TIM_Period = 1999;

TIM_TimeBaseStructure.TIM_Prescaler = 35999;

//定时时间为1s void TIM2_IRQHandler(void){ TIM_ClearITPendingBit(TIM2, TIM_IT_Update);

GPIO_WriteBit(GPIOF, GPIO_Pin_6,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOF, GPIO_Pin_6)));}

4、实验现象

LED1灯按照1S的定时时间不断闪烁

5、实验总结

通过本次实验,可以实现对LED灯进行定时控制其闪烁,而不需要延时函数控制了,定时时间较为精准。实验六:TIM2,TIM3,TIM4多定时器的应用

1、实验要求

利用TIM2,TIM3,TIM4定时器使LED灯以不同的频率闪烁

2、电路原理图

3、软件分析

NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;此处比上一个实验增加了2个定时器,同时又增加了一个优先级

4、实验现象

中断优先级从高到低依次为:TIM2,TIM3,TIM4 首先LED1以1S的定时时间闪烁5次,之后LED2以2S的定时时间闪烁5次,最后LED3以3S的定时时间闪烁5次

5、实验总结

利用定时器可以同时使LED灯按照不同的频率闪烁,但是为了现象明显,可以加一个优 先级,分别观察现象。

实验七:串口USART1读取CPU的ID号

1、实验要求

通过USART1读取 CPU 的 96 bit ID

2、电路原理图

图 开发板USART原理图

3、软件分析

void Get_ChipID(void)/* 获取芯片ID */ { ChipUniqueID[0] = *(u32 *)(0X1FFFF7F0);/* 高字节 */ ChipUniqueID[1] = *(u32 *)(0X1FFFF7EC);

ChipUniqueID[2] = *(u32 *)(0X1FFFF7E8);/* 低字节 */ } void USART_Configuration(void){

USART_InitTypeDef USART_InitStructure;

USART_InitStructure.USART_BaudRate = 115200;

USART_InitStructure.USART_WordLength = USART_WordLength_8b;

USART_InitStructure.USART_StopBits = USART_StopBits_1;

USART_InitStructure.USART_Parity = USART_Parity_No;

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

USART_Init(USART1, &USART_InitStructure);

USART_ITConfig(USART1, USART_IT_TXE, ENABLE);

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

USART_ClearFlag(USART1, USART_FLAG_TC);

USART_Cmd(USART1, ENABLE);

/* Enable USART1 */ }

4、实验现象

PA9连接的是USART1 Tx,PA10连接的是USART1 Rx,再通过串口调试助手就可 以在电脑上面显示出CPU的ID以及flash容量大小。

5、实验总结

本次实验实现了串口和PC机的传输,可以通过USART1将CPU的ID在电脑上显示出来。

实验八:异步通信USART2的重映射

1、实验要求

实现异步通信USART2的重映射,将数据传送到PC机上

2、电路原理图

图 开发板USART原理图

3、软件分析

void GPIO_Configuration()

/* IO口初始化 */ {

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

/* USART2 Tx--> PD05 */

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;/* PD05--> JP7 WR */

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOD, &GPIO_InitStructure);

GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

/* USART2 Rx--> PD06 */

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOD, &GPIO_InitStructure);GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);} 该程序将USART2重映射到PD05,PD06引脚

4、实验现象

PD05连接的是USART2 Tx,PD06连接的是USART2 Rx,通过串口调试助手就可以在电脑上面显示Program Running!

5、实验总结

通过本次实验,可以实现对异步通信USART2的重映射,再通过串口调试助手在电脑上显示出来。

第四篇:嵌入式系统实验报告

嵌入式系统设计实验报告

班 级: 学 号: 姓 名: 成 绩: 指导教师:

1.实验一

1.1 实验名称

博创UP-3000实验台基本结构及使用方法

1.2 实验目的

1.学习嵌入式系统开发流程。

2.熟悉UP-net3000实验平台的核心硬件电路和外设。

3.增加对各个外设的了解,为今后各个接口实验打下基础。

1.3 实验环境

博创UP-NETARM3000 嵌入式开发平台

1.4 实验内容及要求

(1)嵌入式系统开发流程概述

(2)熟悉UP-net3000实验平台的核心硬件电路和外设(3)ARM JTAG的安装与使用

(4)通过操作系统自带的通讯软件超级终端,检验各个外设的工作状态(5)通过本次课程对各个外设的了解,为今后各个接口实验打下基础

1.5 实验设计与实验步骤

1.硬件安装 2.软件安装

(1)超级终端:

运行Windows 系统下的超级终端(HyperTerminal)应用程序,新建一个通信终端;在接下来的对话框中选择 ARM开发平台实际连接的PC机串口;完成新建超级终端的设置以后,可以选择超级终端文件菜单中的保存,将当前设置保存为一个特定超级终端到桌面上,以备后用。

(2)JTAG 驱动程序的安装:

执行armJtag目录下armJtagSetup.exe程序,选择安装目录,安装 JTAG 软件。

1.6 实验过程与分析

(1)了解嵌入式系统开发流程(2)对硬件的安装(3)对软件的安装

1.7 实验结果总结

通过本次实验对嵌入式系统开发流程进行了了解,并且对硬件环境和软件环境进行了安装配置,通过本次实验对以后的接口实验打了基础。

1.8 心得体会

通过本次实验对嵌入式实验有了初步的了解,对基本开发流程也有了初步的了解。

2.实验二

2.1 实验名称

ADS1.2软件开发环境使用方法

2.2 实验目的

熟悉ADS1.2开发环境,学会 ARM仿真器的使用。使用 ADS 编译、下载、调试并跟踪一段已有的程序,了解嵌入式开发的基本思想和过程。

2.3 实验环境

(1)ADS1.2开发环境

(2)博创UP-NETARM3000 嵌入式开发平台(3)PC(4)串口线

2.4 实验内容及要求

本次实验使用ADS 集成开发环境,新建一个简单的工程文件,并编译这个工程文件。学习ARM仿真器的使用和开发环境的设置。下载已经编译好的文件到嵌入式控制器中运行。学会在程序中设置断点,观察系统内存和变量,为调试应用程序打下基础。

2.5 实验设计与实验步骤

(1)运行ADS1.2开发环境(2)新建工程文件(3)编译工程文件

(4)下载编译好的文件到嵌入式控制器中运行

2.6 实验过程与分析

(1)实现Hello World!

最终在输出了Hello World(2)编程实现ARM 和计算机之间的串行通讯

实现了串口通信,用ARM监视串口,接收到的字符串由ARM通过串口发送给超级终端,最终在超级终端上显示了按下的键。学习了串行通讯原理,了解串行通讯控制器,阅读ARM 芯片文档,掌握ARM 的UART相关寄存器的功能,熟悉ARM 系统硬件的UART 相关接口。

2.7 实验结果总结

对ADS 1.2开发环境使用和AXD Debugger使用方法有了初步的了解,基本成功运行了编译好的工程文件。

2.8 心得体会

学习了ADS1.2开发环境的使用方法和调试方法。使用 ADS 编译、下载、调试并跟踪一段已有的程序,了解了嵌入式开发的基本思想和过程。

3.实验三

3.1 实验名称

键盘控制方法及LED驱动设计

3.2 实验目的

熟悉ZLG7289芯片的内部结构,掌握用ZLG7289驱动键盘和LED的方法,掌握ARM汇编语言和C语言的编程方法编写出一段程序,要求能在LED上显示出小键盘上按下的4位数字。

3.3 实验环境

(1)ADS1.2开发环境

(2)博创UP-NETARM3000 嵌入式开发平台(3)PC(4)串口线

3.4 实验内容及要求

通过ZLG7289芯片驱动17键的键盘和8个共阴极LED,将按键值在LED 上显示出来。

3.5 实验设计与实验步骤

(1)新建工程,将“Exp3键盘及LED 驱动实验”中的文件添加到工程。(2)定义ZLG7289 寄存器(3)编写ZLG7289 驱动函数(4)定义键盘映射表(5)定义键值读取函数

(6)编写主函数

3.6 实验过程与分析

(1)定义ZLG7289寄存器 #define ZLG7289_CS #define ZLG7289_KEY #define ZLG7289_ENABLE()do{ZLG7289SIOBand=rSBRDR;ZLG7289SIOCtrl=rSIOCON;rSIOCON=0x31;rSBRDR=0xff;rPDATB&=(~ZLG7289_CS);}while(0)#define ZLG7289_DISABLE()do{rPDATB|=ZLG7289_CS;rSBRDR=ZLG7289SIOBand;rSIOCON=ZLG7289SIOCtrl;}while(0)(2)主函数中需要在开始初始化zlg7289。编写驱动和键值映射之后,在一个循环里面从键盘中读取按键的号码,根据键值映射读出按键的值。然后在主函数中,将读出的按键值在数码管上显示出来。

(3)Main函数的主要功能部分,GetKey()函数得到按键值是调用zlg7289获取键盘事件和核心。

3.7 实验结果总结

通过实验最终LED灯上能显示数字,即实现了通过键值控制LED灯

3.8 心得体会

通过本次实验对ZLG7289芯片的内部结构有了更进一步的了解,对ZLG7289驱动键盘和LED的方法也更进一步的进行了学习。

4.实验四

4.1 实验名称

电机转动控制及中断实验

4.2 实验目的

(1)熟悉ARM本身自带的六路即三对PWM,掌握相应寄存器的配置

(2)编程实现 ARM系统的PWM 输出和I/O 输出,前者用于控制直流电机,后者用于控制步进电机。

(3)了解直流电机和步进电机的工作原理,学会用软件的方法实现步进电机的脉冲分配,即用软件的方法代替硬件的脉冲分配器。

(4)掌握带有PWM 和I/O 的CPU 编程实现其相应功能的主要方法。

4.3 实验环境

(1)ADS1.2开发环境

(2)博创UP-NETARM3000 嵌入式开发平台(3)PC(4)串口线

4.4 实验内容及要求

学习步进电机和直流电机的工作原理,了解实现两个电机转动对于系统的软件和硬件要求。学习ARM知识,掌握PWM 的生成方法,同时也要掌握I/O 的控制方法。

(1)编程实现ARM芯片的一对PWM 输出用于控制直流电机的转动,通过A/D 旋钮控制其正反转及转速

(2)编程实现ARM的四路I/O 通道实现环形脉冲分配用于控制步进电机的转动,通过A/D 旋钮转角控制步进电机的转角。

(3)通过超级终端来控制直流电机与步进电机的切换。4.5 实验设计与实验步骤

(1)新建工程,将“电机转动控制实验”中的文件添加到工程(2)编写直流电机初始化数(MotorCtrl.c)(3)控制直流电机与步进电机

4.6 实验过程与分析

(1)通过把从串口中得到控制信息的代码修改成从zlg7289芯片中读取小键盘信息,从而利用试验台的小键盘来控制步进电机和直流电机的切换

(2)A/D转换可以把电信号转换成数字信号来控制电机的转速。for(;;)

{ loop:

//if((rUTRSTAT0 & 0x1))//有输入,则返回

if(rPDATG&ZLG7289_KEY)//17键小键盘控制电机

{

*Revdata=RdURXH0();

goto begin;

}

Delay(10);ADData=GetADresult(0);

if(abs(lastADData-ADData)<20)

goto loop;Delay(10);count=-(ADData-lastADData)*3;

//(ADData-lastADData)*270/1024为ad旋钮转过的角度,360/512为步距角,//由于接了1/8减速器,两者之商再乘以8为步进电机相应转过的角度

if(count>=0)

{//转角大于零

for(j=0;j

{

for(i=0;i<=7;i++)

{

SETEXIOBITMASK(stepdata[i], 0xf0);

Delay(200);

}

}

}

else

{//转角小于零

count=-count;

for(j=0;j

{

for(i=7;i>=0;i--)

{

SETEXIOBITMASK(stepdata[i], 0xf0);

Delay(200);

}

}

} lastADData=ADData;

} }

(3)S3C44B0X 具有6 个16bit定时器,每个定时器可以基于中断模式或 DMA模式运行。在定时中断服务程序中写需要定时处理的程序,每隔一段时间就会运行一次。

4.7 实验结果总结

利用A/D转换器实现了对直流电机和步进电机的控制,利用实验设备上自带的小键盘实现了A/D转换器对两个电机控制的切换。

4.8 心得体会

通过本次实验,熟悉了ARM自带的六路(三对)PWM,并对直流电机和步进电机的工作原理有了进一步的了解。

5.实验五

5.1 实验名称

LCD驱动及触摸屏实验

5.2 实验目的

掌握LCD显示原理及显示驱动的嵌入式系统编程实现方法;学习基于ARM的LCD 显示驱动控制方法,通过对ARM 内置的LCD 控制器进行编程实现驱动LCD显示屏;学习触摸屏基本原理,理解触摸屏的输出标定以及与LCD 显示器配合的过程,编程对触摸屏进行控制。

5.3 实验环境

(1)ADS1.2开发环境(2)博创UP-NETARM3000 嵌入式开发平台(3)PC(4)串口线

5.4 实验内容及要求

(1)学习LCD显示器的基本原理,理解其驱动控制方法(2)编程对触摸屏进行控制,实现:

1.点击触摸屏上两点后,两点之间画出一条直线。2.点击触摸屏并在其上移动,显示移动轨迹

(3)编程实现总线方式驱动模块的LCD和ARM内置的LCD控制器来驱动LCD

5.5 实验设计与实验步骤

(1)新建工程

(2)定义有关常量与宏

#define LCDWIDTH 320 #define LCDHEIGHT 240 U32* pLCDBuffer16=(U32*)0xc000000;// 一级缓存指针 U32 LCDBuffer[LCDHEIGHT][LCDWIDTH];//二级缓存(3)编写LCD 初始化函数(4)编写LCD 刷新函数(5)编写主函数

5.6 实验过程与分析

(1)通过不断刷新的方式获得LCD液晶屏幕的动画。即刷新函数将二级缓存LCDBuffer 的数据由32 位彩色图形信息转换成8 位256 色的图形信息,然后放到pLCDBuffer16指向的一级缓存。

(2)触摸屏的先得到触屏输出的电信号的值,然后转换为实际的屏幕坐标,再根据动作来决定如何处理缓存信息,刷新LCD。

LCD二级缓存矩阵: for(i=0;i<9;i++){ switch(i){ case 0: jcolor=0x00000000;// 黑色 break;case 1: jcolor=0x000000e0;// 红色 break;case 2: jcolor=0x0000d0e0;// 橙色 break;case 3: jcolor=0x0000e0e0;// 黄 break;case 4: jcolor=0x0000e000;// 绿色 break;case 5: jcolor=0x00e0e000;// 青色 break;case 6: jcolor=0x00e00000;// 蓝色 break;case 7: jcolor=0x00e000e0;// 紫色 break;case 8: jcolor=0x00e0e0e0;// 白色 break;} for(k=0;k<240;k++)for(j=i*32;j

5.7 实验结果总结

本次实验由于坐标设定的问题并没有成功实现触摸痕迹的显示,但在测试过程中,在触摸屏上点击或移动时会在超级终端上有显示。

5.8 心得体会

虽然本次实验不太成功实现,但对LCD屏幕和触摸屏的工作原理有了进一步的了解,更好的掌握了LCD显示原理及显示驱动的嵌入式系统编程实现方法。

6.实验六

6.1 实验名称

ucos-II裁剪实验

6.2 实验目的 掌握μcos-II裁剪的基本原理与嵌入式编程实现方法;学习如何根据具体情况对μcos-II操作系统进行裁剪,从而得到即满足需要,又非常紧凑的应用软件系统。

6.3 实验环境

(1)ADS1.2开发环境

(2)博创UP-NETARM3000 嵌入式开发平台(3)PC(4)串口线

6.4 实验内容及要求

(1)通过对μcos-II配置文件(OS_CFG.H)中相关的配置常量进行设置,实现对μcos-II的裁剪

(2)给出裁剪的详细过程与裁剪结果说明,并生成裁剪后的操作系统文件。

6.5 实验设计与实验步骤

(1)新建工程,将ucosII移植的文件添加到工程中。

(2)编辑os_cfg.h头文件。

(3)将裁减后的系统所需用到的功能宏定义配置常量置为1,实现系统的裁减。(4)编译生成新的ucosII系统。

6.6 实验过程与分析

(1)配置功能常量,将裁剪后的系统需要用到的功能配置常量设为1(2)裁减信号量数据(3)配置数据结构

OS_MAX_TASKS,若程序中用到了三个任务,则该值的最小值为3 OS_LOWEST_PRIO设置程序中最低任务的优先级

OS_TASK_IDLE_STK_SIZE设置UC/OS操作系统中空闲任务堆栈的容量 OS_TASK_STAT_STK_SIZE设定统计任务的任务堆栈容量

6.7 实验结果总结

通过本次实验,裁减了系统,修改了某些数据结构相关的常量,节省了内存空间

6.8 心得体会

通过本次实验主要学习到了如何根据具体情况对μcos-II操作系统进行裁剪,从而得到即满足需要,又非常紧凑的应用软件系统。

7.实验七

7.1 实验名称

ucos-II移植实验

7.2 实验目的

了解µC/OS-II 内核的主要结构,掌握ARM的C语言和汇编语言的编程方法;了解ARM7处理器结构;掌握将µC/OS-II 内核移植到ARM 7 处理器上的基本原理与嵌入式编程实现方法

7.3 实验环境

(1)ADS1.2开发环境

(2)博创UP-NETARM3000 嵌入式开发平台(3)PC(4)串口线

7.4 实验内容及要求

(1)将µC/OS-II 内核移植到ARM7 微处理器S3C44B0上。(2)编写两个简单任务,在超级终端上观察两个任务的切换。

7.5 实验设计与实验步骤

(1)新建工程

(2)该实验的文件分为两类,其一是 STARTUP目录下的系统初始化、配置等文件,其二是uCOS-II 的全部源码,arch 目录下的3 个文件是和处理器架构相关的3.定义驱动函数(tchscr.c)(3)设置os_cpu.h 中与处理器和编译器相关的代码(4)用C 语言编写6 个操作系统相关的函数(5)用汇编语言编写4 个与处理器相关的函数

(6)编写一个简单的多任务程序来测试一下移植是否成功(7)编译并下载移植后的uCOS-II

7.6 实验过程与分析

(1)首先需要对相关寄存器做详细的设定(2)用汇编语言编写与处理器相关的函数(3)用分时的方法同时运行两个任务

OS_STK TaskName_Stack[STACKSIZE]={0, };//任务堆栈 void TaskName(void *Id);//任务函数

#define TaskName_Prio N //任务优先级

在main()函数中调用OSStart()函数之前用下列语句创建任务: OSTaskCreate(TaskName,(void*)0,(OS_STK*)&TaskName_Stack[STACKSIZE-1], TaskName_Prio);OSTaskCreate()函数的原型是:

INT8U OSTaskCreate(void(*task)(void *pd), void *p_arg, OS_STK *ptos, INT8U prio);(4)编写任务函数

7.7 实验结果总结

通过实验达到了ucosII系统移植的目的,并编写了一个简单的多任务程序,分时运行。

7.8 心得体会

通过本次实验了解了µC/OS-II 内核的主要结构,掌握了ARM的C语言和汇编语言的编程方法。

8.实验八

8.1 实验名称

各接口模块相互衔接综合实验

8.2 实验目的

(1)回顾串口、键盘、LED接口、A/D、电机转动、定时器中断、LCD接口及触摸屏驱动控制等接口模块驱动设计及开发方法

(2)综合应用以上全部或者部分模块,实现一个嵌入式综合应用系统,要求至少用到8个模块中的5个

8.3 实验环境

(1)ADS1.2开发环境

(2)博创UP-NETARM3000 嵌入式开发平台(3)PC(4)串口线

8.4 实验内容及要求

(1)综合应用串口、键盘、LED接口、A/D、电机转动、定时器中断、LCD接口及触摸屏驱动控制等全部或者部分模块(2)实现一个嵌入式综合应用系统,要求至少用到8个模块中的5个,尽量使综合应用系统具备合理的功能。

8.5 实验设计与实验步骤

(1)运行ADS1.2开发环境(2)新建工程文件

(3)将综合实验中用到的文件放到这个工程文件中(4)下载编译好的文件到嵌入式控制器中运行

8.6 实验过程与分析

(1)本次实验设计主要是通过中断来实现,设定了flag=1,2,3,4,5,6六个标志位,对应不同的键值来实现功能的切换

(2)通过num/lock键来控制直流电机(3)通过“/”键来控制步进电机

(4)通过“*”键来控制屏输出“hello world”(5)通过“+”键来实现LED灯的计时

(6)通过“DEL”键来实现清屏和LED灯的清除

(7)通过“enter”键来进入到键值控制LED显示的功能

8.7 实验结果总结

实验最终能实现5个功能的切换,但不足的是未涉及到触摸屏的设计,并且最后的键值控制LED灯不能实现正常的中断跳转。

8.8 心得体会

通过本次综合性的实验来综合之前做的串口、键盘、LED接口、A/D、电机转动、定时器中断、LCD接口及触摸屏驱动控制实验,回顾了之前的知识,对整体的运用有了进一步的了解,但是实验结果仍有很多的不足,需要改进。

9.实验总结与心得体会

通过之前的串口、键盘、LED接口、A/D、电机转动、定时器中断、LCD接口及触摸屏驱动控制实验这7个小模块的实验,对嵌入式系统的开发流程有了基本的了解,熟悉了博创UP-NETARM3000实验台和ADS1.2软件的实验环境,同时也掌握了各模块功能实现功能的基本原理。在最后的综合性实验中,通过对以上知识的掌握和理解,进一步的对以上知识进行了加深和巩固,虽然有几次实验实现的实验结果并不是很成功,但还是达到了学习和理解的效果。

第五篇:嵌入式系统实验报告

广西工学院鹿山学院

实 验 报 告

课程名称: 嵌入式系统

指导教师: 刘瑞琪 班 级: 自动化101 姓 名: 杨杰 学 号: 20102787 成绩评定: 指导教师签字:

2013年5月25日

实验一

简单的程序

一 实验目的:、动手实践一个简单的字符型设备驱动程序。、学习Linux 驱动程序构架。、学习在应用程序中调用驱动。

二 实验内容:

编写简单的字符型设备驱动程序。编写相应的应用程序。

三 实验设备:、一套S3C2410RP 嵌入式实验箱。、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。

四 实验步骤

实验二 CPU GPIO 驱动程序及测试程序

一、实验目的:

编写第一个针对实际硬件的驱动程序,进一步了解驱动程序构架。

二、实验内容:、编写S3C2410 GPIO驱动程序。、编写S3C2410 GPIO应用程序。、在 LINUX系统中插入自己的驱动程序,调用它。实现用 CPU GPIO 控制外部LED,利用S3C2410 核心板上的 LED 验证我们的工作。

三、实验设备、一套S3C2410RP 嵌入式实验箱。、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。

四、实验步骤

1、复制Experiment_KeyHello_driverapl_test文件下的simple_test_driver.c文件到Experiment_KeyGPIO文件夹下,将文件名更改为test.c。

2、打开test.c,在else语句后更改函数语句如下:

3、复制Experiment_KeyADapl_test文件夹下的Makefile到Experiment_KeyGPIO文件夹下,打开并将中的ADC删除。

4、打开Experiment_KeyGPIOdriver文件下的gpio_led.c文件。

5、在ssize_t SIMPLE_GPIO_LED_ioctl函数下添加如下语句:

if(cmd==0)GPBDAT &= ~(0xf<<5);

if(cmd==1)GPBDAT |=(0xf<<5);如下图所示:

6、在int __init HW_GPIO_LED_CTL_init函数下屏蔽for循环,如下图所示:

保存并关闭。

7、打开终端,并编译test.c文件和gpio_led.c文件。

8、重新打开一个终端,并按步骤输入如下语句:

9、依次输入如下语句:

1、cd..2、ls

3、mknod /dev/hello_ctl c 97 1

4、./test

实验三 中断实验及LED显示

一、实验目的:

学习Linux 系统是如何处理中断。

二、实验内容:

编写获取和处理外中断的驱动程序。

三、实验设备:、一套S3C2410RP 嵌入式实验箱。、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。

四、实验步骤

1、打开Experiment_KeyGPIOdriver文件下的gpio_led.c文件。

2、在ssize_t SIMPLE_GPIO_LED_ioctl函数下添加如下语句:

if(cmd==0)GPBDAT &= ~(0xf<<5);

if(cmd==1)GPBDAT |=(0xf<<5);如下图所示:

3、在int __init HW_GPIO_LED_CTL_init函数下屏蔽for循环,如下图所示:

保存并关闭。

4、打开Experiment_KeyInterruptdriver下的Interrupt.c文件,并在其interrupt函数下添加for语句,如下图所示:

5、打开终端,并编译Interrupt.c文件和gpio_led.c文件。

6、重新打开一个终端,并按步骤输入如下语句:

7、依次输入如下语句:

1、cd /mnt/2410RP_linux/Experiment_Key/Interrupt/driver

2、ls

3、insmod Interrupt.o

实验四 数码管显示实验

一、实验目的:

学习串并转换的相关知识,并编写驱动程序。

二、实验内容:

编写针对zlg7289A 的驱动程序。

三、实验设备:、一套S3C2410RP 嵌入式实验箱。、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。

四、实验步骤

1、打开Experiment_KeySpi_leddriver文件夹下的spi_led.c

2、并在spi_ledInit函数下添加如下语句:

保存并关闭。

3、打开终端,并编译spi_led文件。

4、重新打开一个终端,并输入如下语句:

实验五

AD 驱动实验

一 实验目的:、了解模数转换的基本原理;、掌握模数转换的编程方法。

二 实验内容:、编程对模拟量输入进行采集和转换,并将结果显示在超级终端上。、通过改变模拟量输入,观察显示结果。

三 实验设备:、一套S3C2410RP 嵌入式实验箱。、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。

四 实验步骤

1、在spi_led..c中的simpled ioctl中加入以下程序

2、在testADC中复制以下程序并修改如下

3、挂载程序

cd /mnt/2410RP_linux/Experiment_Key/spi_led/driver

ls insmod spi_led.o

cd /mnt/2410RP_linux/Experiment_Key/ad/driver

insmod adc.o cd /mnt/2410RP_linux/Experiment_Key/ad/apl_test

ls

mknod /dev/spi c 104 1

ls

./testADC

下载嵌入式系统ARM实验报告word格式文档
下载嵌入式系统ARM实验报告.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    嵌入式系统实验报告

    嵌入式系统设计实验报告 班 级:学 号:姓 名:成 绩:指导教师: 20110612 2011061208 李晓虹 武俊鹏、刘书勇 1. 实验一 1.1 实验名称 博创UP-3000实验台基本结构使用方法 1.2......

    嵌入式ARM键盘控制LED灯实验报告

    实验六 键盘控制LED灯实验 1 实验目的 (1) 通过实验掌握中断式键盘控制与设计方法; (2) 熟练编写S3C2410中断服务程序。 2 实验设备 (1) S3C2410嵌入式开发板,JTAG仿真器......

    嵌入式系统实验报告(5篇)

    嵌入式系统实验报告内容第一章:ARM2410CL嵌入式系统基础实验 实验一ARM2410CL嵌入式教学实验系统 实验报告要求: (1) 简述嵌入式LINUX开发的流程。 实验二 嵌入式LINUX开发环境......

    ARM嵌入式系统的问题总结分析.

    ARM嵌入式系统的问题总结分析 摘要:本文是作者关于嵌入式系统一些基本问题的思考和总结。主要是从嵌入式处理器与硬件、ARM处理器的优势、嵌入式软件、嵌入式系统教学等方面......

    基于ARM嵌入式的远程监控系统设计

    基于ARM嵌入式的远程监控系统设计 摘要:基于ARM 内核的嵌入式系统在远程监控报警系统中的设计实现与应用。核心部分主要包 括 ARM 嵌入式平台设计及 μC-OS 嵌入式实时操作系......

    嵌入式系统GPIO 输入输出实验报告

    实验四 GPIO 输入实验 一、实验目的 1、能够使用GPIO的输入模式读取开关信号。 2、掌握GPIO相关寄存器的用法和设置。 3、掌握用C语言编写程序控制GPIO。 二、实验环境 P......

    中北大学嵌入式系统实验报告(推荐五篇)

    中北大学计算机与控制工程学院实验报告 《嵌入式系统实验报告》 专 业 电气工程与智能控制 班 级 14070541 学 号 1407054103 姓 名 贾晨凌 实验一 ARM 处理器指令系统实验......

    南京理工大学嵌入式系统实验报告[范文大全]

    嵌入式系统实验报告 指导老师:孙瑜 时间:2014年11月 实验一 虚拟机下Linux程序编写和交叉编译 一、实验目的 熟悉Linux开发环境,学会基于S3C2410的Linux开发环境的配置和使用......