当前位置:文档之家› ARM实验报告

ARM实验报告

ARM实验报告
ARM实验报告

ARM 实验报告

学院:计算机科学与工程学院班级: 070603 学号: 070603115 姓名:张鑫

实验一:工程配置

一、处理器配置

选择菜单项Project > Settings…或快捷键Alt+F7,弹出工程设置对话框。在工程设置对话框中,选择Processor设置对话框,如下图,可进行目标板所用处理器的配置。

图1 处理器配置对话框

用户选择对应的工程文件名进行相应的配置。图中各项设置定义如下:

处理器模块(CPU Module)选择当前所使用的处理器模块,不同的处理器模块将支持不同的处理器系列,目前Embest IDE for ARM 支持ARM7、ARM9核系列处理器。

处理器系列(CPU Family)选择用户使用的处理器所属处理器系列。

处理器成员(CPU Member)设置处理器系列中具体的处理器成员。

字节排列方式(Endian)设置该处理器当前所支持的存储区字节排列方式是大字节结尾(Big Endian)还是小字节结尾方式(Little Endian)。

处理器制造商(Peripheral Maker)选择处理器生产厂家。

处理器型号(Peripheral Chip)选择相应的处理器型号。

编译工具(Build Tools)设置该处理器对应的编译链接器。

Embest IDE for ARM 支持ARM核系列处理器。开发ARM7核系列处理器,按照图5-11中设置;开发ARM9核系列处理器,可依照图5-11设置作相应的改变。

二、仿真器配置

选择菜单项Project>Settings…,弹出工程设置对话框。在工程设置对话框中,选择Remote设置对话框,如下图,可进行仿真器的连接配置。

图2 仿真器的连接配置

在该对话框中,有两项设置:

远程连接设备(Remote device)设置连接的调试设备,例如Embest IDE for ARM支持英蓓特公司的Embest Emulator for ARM和Embest PowerICE for ARM。使用Embest Emulator for ARM调试AR7核系列处理器,该处设置成“jtagarm7”仿真器;调试ARM9核系列的处理器,该处设置成“jtagarm9”仿真器;Embest PowerICE for ARM调试AR7核系列处理器,该处设置成“PowerICEARM7”仿真器;调试ARM9核系列的处理器,该处设置成“PowerICEARM9”仿真器;使用Embest IDE软件仿真器调试AR7核系列处理器则该处设置成“simarm7”。相应地在下面的信息框中将显示相应的仿真器信息,如图5-12所示。

调试下载速度(Speed)设置仿真器的下载调试速度。该设置只有仿真器支持调试下载速度可选时有效。目前Embest Emulator for ARM仿真器不支持,即默认为25Kbyte/s;而Embest PowerICE for ARM 仿真器支持调试下载速度可选,其工作速度可选为全速(Full Speed)、高速(High Speed)、中速(Medium Speed)、低速(Low Speed)如图5-13所示:

图3 Embest PowerICE for ARM仿真器支持下载速度可选

通讯类型(Communication type)设置该仿真器与主机使用的连接方式和连接到的主机通讯口,例如Embest Emulator for ARM使用并口连接,所以此处设置为“PARALLEL”。

通讯口(Parallel Port)按实际连接设置。

三、软件调试

3.1 介绍

Embest IDE调试器综合了图形调试和命令行调试的各种优点,提供丰富的调试手段。最为常用的调试方法,如设置断点或控制程序执行都可以通过方便的鼠标点击来实现,同样程序列表以及数据察看等都可以提供立即可视的界面来显示,对于复杂和不可预料的需求,命令行命令接口可以提供用户对被调试系统的完全访问和检查。

Embest IDE调试器具有以下先进的调试特性:

※支持汇编和源程序级调试;支持多个程序窗口(包括源程序窗口、反汇编模式窗口和混合模式窗口)同时显示

支持多种仿真调试功能:Go、Reset、Stop、Step、Step into、Step over、Step out、Goto Cursor、Goto Source和Goto Address等

※支持断点、条件断点和Watchpoint功能

※支持所有级别的寄存器显示和修改

※提供处理器的外围寄存器显示和修改

※支持按字节、半字或字长度及十六进制和ASCII符号模式显示存储器内容

※支持全局、局部变量显示和修改及表达式计算

※当存储器、变量及寄存器值改变时,对应内容以不同颜色显示

※支持程序运行函数栈信息显示

※在项目基础上保存调试环境

3.2 源程序运行

程序的执行状态主要分为运行状态、停止状态和复位状态。运行状态表示程序正在按照指令一条一条运行;停止状态表示程序正停在某条指令上等待调试器读取需要的信息;复位状态表示目标系统处于系统入口指令处,所有相关信息都在初始状态。

点击Debug菜单,选取Go子菜单,或按F5快捷键,或者点击调试工具条的Go按钮,程序运行将从停止处开始执行,鼠标形状会变成漏斗状,运行界面如图7-11所示:

图1 程序运行界面

点击Debug菜单,选取Stop子菜单,或使用Shift+F5快捷键,或者点击调试工具条的Stop按钮,即可停止目标程序的运行,鼠标形状会变成原有形状,并可取得目标系统状态。停止界面如图7-12所示:

图2 程序停止界面

当程序停止时,若停在某条源代码处时,将高亮显示该代码行,并在该行前面设置当前行标志(为黄色向右箭头),界面如图7-13所示:

图3 程序停止状态界面

点击Debug菜单,选取Reset子菜单,或使用Ctrl+R快捷键,或者点击调试工具条的Reset按钮,即可停止目标程序的运行并将系统设置在初始化状态处,鼠标形状会变成原有形状。复位界面如图7-14所示:

图4 程序复位界面

源程序的执行也可以单步执行,主要有Step into、Step over和Step out三种方式。

1、Step into方式:若当前源程序行有函数调用,系统将执行到第一个调用函数的入口处后停止,如果没有函数调用,系统将执行到当前函数的下一个调用的源代码行。

2、Step over方式:系统将执行到当前函数的下一个调用的源代码行。

3、Step out方式:系统将执行完当前函数,并在函数被调用指令的下一条指令处停止。

单步执行举例如下(假设系统运行到如图7-13所示位置,当前函数是OSTaskCreate)

图5 单步起始位置

若执行Step into,由于该行存在函数调用,系统将停止在OSTaskCreateHook函数的入口处,源程序窗变化为如图7-16所示:

图6 Step into后程序界面

若执行Step over,系统将停在下一个调用的源代码行处,源程序窗变化为如图7-17所示:

图7 Step over后程序界面

若执行Step out,系统将停在当前函数被调用的出口处,源程序窗变化为如图7-18所示:

图8 Step out后程序界面

实验二:汇编程序(一)

一、源程序

.equ x, 45 /* 定义变量x,并赋值为45*/ .equ y, 64 /* 定义变量y,并赋值为64*/ .equ z, 87 /* 定义变量z,并赋值为87*/ .equ stack_top, 0x1000 /* 定义栈顶0x1000*/

.global _start

.text

_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] /* sp的值放入R0 */

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

/* x*2^8+y/2 y/2+z&0xff (x*2^8+y/2)||0x01+(y/2+z&0xff)/2 */

二、流程图

x的值放入R0

R0的值乘以2的8次方

y的值放入R1

R1的值除以2加上r0的值放入R2

z的值放入R0

取R0的低八位

y的值放入R1

R1的值除以2加上r0的值放入R2

sp的值放入R0

y的值放入R1

R1的值除以2加上r0的值放入R2

三、实验心得

a)初次使用该软件编写并调试程序还算顺利,在软件使用上基于第一次使用的基础基本不存

在大的问题。

b)在读程序的过程中存在不清楚部分指令功能以及用的的情况,在查阅课本以及有关文档后

很容易就得到了解决。

c)在单步运行程序时,遇到了牵涉到编译器内核处理的问题。首先而且最重要的,是程序初

始地址的显示与逻辑运算不符合的问题。在解决该问题时,查阅了有关实验教程、帮助文档等资料,发现我们的逻辑推算初始值与实际实验过程中的值不同,才造成了上述问题。

实验三

一、源程序

.global _start

.text

.equ num, 20 /* Set number of words to be copied */

_start:

.arm /* Subsequent instructions are ARM header */

MOV sp, #0x400 /* set up user_mode stack pointer (r13) */

ADR r0, Tstart + 1 /* Processor starts in ARM state, */

BX r0 /* so small ARM code header used */

/* to call Thumb main program. */

.thumb /* Subsequent instructions are Thumb. */

Tstart:

LDR r0, =src /* r0 = pointer to source block */

LDR r1, =dst /* r1 = pointer to destination block */

MOV r2, #num /* r2 = number of words to copy */

blockcopy:

LSR r3,r2, #2 /* number of four word multiples */

BEQ copywords /* less than four words to move ? */

PUSH {r4-r7} /* save some working registers */

quadcopy:

LDMIA r0!, {r4-r7} /* load 4 words from the source */

STMIA r1!, {r4-r7} /* and put them at the destination */

SUB r3, #1 /* decrement the counter */

BNE quadcopy /* ... copy more */

POP {r4-r7} /* don't need these now - restore originals */

copywords:

MOV r3, #3 /* bottom two bits represent number... */

AND r2, r3 /* ...of odd words left to copy */

BEQ stop /* No words left to copy ? */

wordcopy:

LDMIA r0!, {r3} /* a word from the source */

STMIA r1!, {r3} /* store a word to the destination */

SUB r2, #1 /* decrement the counter */

BNE wordcopy /* ... copy more */

stop:

B stop

.align

src:

.long 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4

dst:

.long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

.end

二、实验心得

此次实验过程进展比较顺利,有了第一次软件使用的基础和第二次使用软件编写程序的练习,以及上次实验对在软件环境下运用汇编语言编写程序、调试程序的熟悉,故这次实验是对汇编程序的一个加深巩固、深刻印象的过程。

实验四

一、源程序

.global _start

.text

_start:

# --- Setup interrupt / exception vectors

B Reset_Handler

Undefined_Handler:

B Undefined_Handler

B SWI_Handler

Prefetch_Handler:

B Prefetch_Handler

Abort_Handler:

B Abort_Handler

NOP /* Reserved vector */

IRQ_Handler:

B IRQ_Handler

FIQ_Handler:

B FIQ_Handler

SWI_Handler:

mov pc, lr

Reset_Handler:

#into System mode

MRS R0,CPSR

BIC R0,R0,#0x1F

ORR R0,R0,#0x1F

MSR CPSR,R0

MOV R0, #1

MOV R1, #2

MOV R2, #3

MOV R3, #4

MOV R4, #5

MOV R6, #7

MOV R7, #8

MOV R8, #9

MOV R9, #10

MOV R10, #11

MOV R11, #12

MOV R12, #13

MOV R13, #14

MOV R14, #15

#into FIQ mode

MRS R0,CPSR

BIC R0,R0,#0x1F

ORR R0,R0,#0x11

MSR CPSR,R0

MOV R8, #16

MOV R9, #17

MOV R10, #18

MOV R11, #19

MOV R12, #20

MOV R13, #21

MOV R14, #22

#into SVC mode

MRS R0,CPSR

BIC R0,R0,#0x1F

ORR R0,R0,#0x13

MSR CPSR,R0

MOV R13, #23

MOV R14, #24

#into Abort mode

MRS R0,CPSR

BIC R0,R0,#0x1F

ORR R0,R0,#0x17

MSR CPSR,R0

MOV R13, #25

MOV R14, #26

#into IRQ mode

MRS R0,CPSR

BIC R0,R0,#0x1F

ORR R0,R0,#0x12

MSR CPSR,R0

MOV R13, #27

MOV R14, #28

#into UNDEF mode

MRS R0,CPSR

BIC R0,R0,#0x1F

ORR R0,R0,#0x1b

MSR CPSR,R0

MOV R14, #30

B Reset_Handler

.end

实验五

一、源程序

/************************************************************************************* ********

* File:c1_a.c

* Author: embest

* Desc:

* History:

************************************************************************************** *******/

void delay(int times);

//*----------------------------------------------------------------------------

//* Function Name : _start

//* Input Parameters : none

//* Output Parameters : none

//*----------------------------------------------------------------------------

_start()

{

int i=5;

for(;;)

{

delay(i);

}

}

//*----------------------------------------------------------------------------

//* Function Name : delay

//* Input Parameters : times

//* Output Parameters : none

//*----------------------------------------------------------------------------

void delay(times)

{

int i, j=0;

for(i=0; i

{

for(j=0; j<10; j++)

{

}

}

}

二、实验流程图

i=5

调用delay(i)

i=0&&i

j=0&&j<10

实验六

一、源程序

void _nop_(){

__asm("mov r0,r0");

}

//------------------------------------------------------------------------------------------------

//辅助函数

//------------------------------------------------------------------------------------------------

void delay(void) //delay

{

int i;

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

{

_nop_();

}

}

void delay10(void)

{

int i;

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

{

delay();

}

}

//*----------------------------------------------------------------------------

//* Function Name : _start

//* Input Parameters : none

//* Output Parameters : none

//*----------------------------------------------------------------------------

__main()

{

int i=5;

for(;;)

{

delay10();

}

}

二、试验流程图

i=5

调用delay10()

i=0&&i<=10

调用delay()

三、实验心得

通过几个这几个实验,我对ARM技术构架有了一定的了解。知道了在ARM下的汇编与以往单片机下的会变有什么不同。同时,通过实验课上阅读程序这个过程的锻炼,使我对汇编语言也更加的熟练,对它的理解也更加深了。更重要的是,通过这一系列的实验,我对ARM下的开发环境的使用方法有了基本了解。知道了应该用什么工具来写程序,知道了开发环境怎么样使用。这些都使我受益匪浅。

arm实验报告最终版

ARM与嵌入式技术 实验报告 专业班级:10通信工程1班 姓名:万洁 学号:100103011125 实验日期:2013年5月28日 指导老师:郑汉麟

1、 通过实验掌握ARM 指令的特点和寻址方式; 2、 掌握简单的ARM 汇编语言的程序设计; 3、 了解集成开发环境 Embest IDE 及其开发软件的应用; 、实验环境 Embest IDE 应用于嵌入式软件开发的新一代图形化的集成开发环境,它包括一套完备 的面向嵌入 式系统的开发和调试工具。其开发软件 Embest IDE for ARM 是集编辑器、编译 器、调试器、工程管理器( projectma nager )于一体的高度集成的窗口环境,用户可以在 Embest IDE 集成开发环境中创建工程、编辑文件、编译、链接、运行,以及调试嵌入式应 用程序。 三、实验步骤 1)新建工程: 运行Embest IDE 集成开发环境,选择菜单项 File 宀New Workspace ,如图一,系统弹 出一个对话框,键入文件名“ wj ”,如图二,点击 0K 按钮。将创建一个新工程,并同时创 建一个与工程名相同的工作区。此时在工作区窗口将打开该工作区和工程 .。 (老师提醒:不要放入Bin 文件夹中) ■ Emb?t QE Pre 亠 Educat 「販]£dii_Vww Buid frtbug D if** Qri+W 诊 Open-" Qrl*O 2)建立源文件: 点击菜单项 File T New ,如图三,系统弹出一个新的文本编辑窗,输入源文件代码。 编辑完后,保存文件“ wj.s ”后缀,如图三,四。 Hr* Open Workspace.? 图一 ■■ rflJO IUU rl jil rd f rfl,rl Clop : h Ho. .end 图 tut vUrl:

arm嵌入式实验报告完整版

arm嵌入式实验报告完整版 篇一:ARM嵌入式系统实验报告1 郑州航空工业管理学院 嵌入式系统实验报告 第 赵成,张克新 院姓专学 系:名:业:号:电子通信工程系周振宇物联网工程 121309140 电子通信工程系 XX年3月制 实验一 ARM体系结构与编程方法 一、实验目的 了解ARM9 S3C2410A嵌入式微处理器芯片的体系结构,熟悉ARM微处理器的工作模式、指令状态、寄存器组及异常中断的概念,掌握ARM指令系统,能在ADS1.2 IDE中进行ARM汇编语言程序设计。 二、实验内容

1.ADS1.2 IDE的安装、环境配置及工程项目的建立;2.ARM汇编语言程序设计(参考附录A): (1)两个寄存器值相加;(2)LDR、STR指令操作; (3)使用多寄存器传送指令进行数据复制;(4)使用查表法实现程序跳转;(5)使用BX指令切换处理器状态;(6)微处理器工作模式切换; 三、预备知识 了解ARM嵌入式微处理器芯片的体系结构及指令体系;熟悉汇编语言及可编程微处理器的程序设计方法。 四、实验设备 1. 硬件环境配置 计算机:Intel(R) Pentium(R) 及以上;内存:1GB及以上; 实验设备:UP-NETARM2410-S嵌入式开发平台,J-Link V8仿真器; 2. 软件环境配置 操作系统:Microsoft Windows XP Professional Service Pack 2;集成开发环境:ARM Developer Suite (ADS) 1.2。 五、实验分析 1.安装的ADS1.2 IDE中包括两个软件组件。在ADS1.2

中建立 ARM Executable Image(ARM可执行映像)类型的工程,工程目标配置为 Debug;接着,还需要对工程进行目标设置、语言设置及链接器设置;最后,配置仿真环境为ARMUL仿真方式。 2.写出ARM汇编语言的最简程序结构,然后在代码段中实现两个寄存器值的加法运算,给出运算部分相应指令的注释。 ; 文件名: AREA XTF,CODE,READONLY 声明32位ARM指令 R0arm嵌入式实验报告完整版) ADD R0,R1,R2 3.列写出使用LDR、STR指令的汇编程序,并在关键语句后面给出相应的注释。 AREA XTF,CODE,READONLY ;声明代码段XTFENTRY ;标示程序入口CODE32 ;声明32位ARM 指令START LDR R0,=1 ;加载数据LDR R1,=2LDR R3,=ADDR_1;载符号地址 ADD R2,R0,R1;R2[R3] ;数据空间定义 AREA Data_1,DATA,ALIGN=2 ADDR_1 DCD 0 END ;结束 4.“使用多寄存器传送指令进行数据复制”汇编程序分析。 LDR R0,=SrcData ;

《嵌入式系统与开发》ARM汇编及接口设计-实验报告 - 答案

《ARM汇编与接口设计》 实验报告 学生姓名: 学号: 专业班级: 指导教师: 完成时间:

实验1 ARM汇编与S3C6410接口设计 一.实验目的 熟悉裸板开发环境构建,掌握利用ADS开发工具或arm-linux-gcc开发工具编写裸板系统下程序的基本步骤和方法,掌握裸板程序的基本架构,熟悉汇编设计的基本指令和伪指令的使用方法,掌握S3C6410接口开发基本方法和步骤,并编程设计LED流水灯和看门狗程序设计。深刻体会软件控制硬件工作的基本思路和方法。 二.实验内容 实验1.1 熟悉ADS开发工具或交叉编译器arm-linux-gcc的安装和基本使用 实验1.2 LED流水灯实验 实验1.3 看门狗实验 三.预备知识 C 语言、微机接口等 四.实验设备及工具(包括软件调试工具) 硬件:ARM 嵌入式开发平台、PC 机Pentium100 以上、串口线。 软件:WinXP或UBUNTU开发环境。 五.实验步骤 5.1 ADS开发工具安装和使用 步骤: 第一步,ADS工具安装在 平台 B.linux平台)下,按照类似于VC++ 第二步,利用ADS打开demo项目模板,查看ADS中配置中几个重要选项, 第三步,参照demo项目代码结构,编写裸板程序完成两整数加和两整数减函数,分别用C代码实现,写出完成汇编启动代码和C代码。 第四步 用ADS自带的ARM的汇编代码,b被编译器优化到寄存器中,函数返回汇编语句 。 5.2 arm-linux-gcc编译工具安装和使用

第一步:arm-linux-gcc(A. WINDOWS平台 B.linux平台)下,按照类似于gcc 第二步:参看相关实验样例,一般基于arm-linux-gcc编译的裸板程序通常包含汇编启动代码文件,C功能代码文件和make工具文件Makefile。 5.3 LED流水灯设计实验 本实验要求使用arm-linux-gcc编译。备注,控制LED1的GPIO口为GPM0 步骤1:编写代码 参看相关实验样例,编写LED1报警灯代码,实现LED1以1秒左右的时间进行闪烁,要求LED 驱动代码编写在leddrv.c中,功能代码编写在main.c文件中,启动代码文件和Makefile文件参照实验样例代码来设计。 则启动代码文件内容: 功能层main.c文件内容: 步骤2:编译 编译步骤为: 步骤3:加载到内存中运行

ARM实验报告

湖南科技学院ARM嵌入式设计实验报告题目:基于ARM嵌入式系统跑马灯的设计 专业:电子信息工程 班级:电信1102班 姓名:段相辉 学号:201106002232 指导教师:陈光辉 2014年11 月

目录 摘要............................................. 错误!未定义书签。ABSTRACT .......................................... Ⅰ错误!未定义书签。 1 题目要求 (1) 2 设计软件的安装 (2) 3 开发平台的搭建 (22) 4 项目设计 (23) 4.1 设计思路概述 (2) 4.1.1 设计层次介绍 (2) 4.1.2 设计模块介绍 (3) 5总结 (6) 致谢 (25) 参考文献 (26) 附录 (27)

引言 随着生活水平的提高和IT技术的进步,8位处理器的处理能力已经不能满足嵌入式系统的需要了;而16位处理器在性能和成本上都没有很大的突破。并且在8位机的开发中,大多使用汇编语言来编写用户程序。这使得程序的可维护性、易移植性等都受到了极大的挑战。正是基于此,ARM公司适时的推出了一系列的32位嵌入式微控制器。目前广泛使用的是ARM7和ARM9系列,ARM7TDMI内核的ARM7处理器广泛应用于工业控制、仪器仪表、汽车电子、通讯、消费电子等嵌入式设备。

1、题目要求 构建嵌入式Linux开发环境,熟悉linux的命令操作,并在嵌入式Linux 开发环境中设计跑马灯。 2、设计软件的安装 2.1 VMware Player简介 (a) VMware Workstation是一个“虚拟机”软件.它使用户可以在一台机 器上同时运行多个操作系统. (b) VMware Player是VMware Workstation的精简版,最初只是虚拟机的“播放机”, 但最新版本的已经具有创建虚拟机的功能.具有体积小,使用灵活,免费等特点. (c) 多个操作系统在主系统的平台上,可像Windows应用程序那样切换.而且每个操作系统都可以进行虚拟的分区、配置而不影响真实硬盘的数据. (d) 利VMware Player创建虚拟机

ARM实验报告--Thumb

XI`AN TECHNOLOGICAL UNIVERSITY 实验报告

西安工业大学实验报告 一丶实验目的 通过实验掌握ARM处理器16位Thumb汇编指令使用方法 二、实验内容 使用Thumb汇编语言,完成基本reg/men访问,以及简单的算术/逻辑运算。 使用Thumb汇编语言,完成较为复杂的程序分支,领会立即数大小的限制,并体会ARM与Thunb的区别。 三、实验原理 ARM 处理器共有两种工作状态: ARM:32 位,这种状态下执行字对准的ARM 指令; Thumb:16 位,这种状态下执行半字对准的Thumb 指令 在Thumb 状态下,程序计数器PC 使用位1 选择另一个半字。 注意: ARM 和Thumb 之间状态的切换不影响处理器的模式或寄存器的内容。ARM 处理器在两种工作状态之间可以切换。 1)进入Thumb 状态。当操作数寄存器的状态位0 为1 时,执行BX 指令进入Thumb 状态。如果处理器在Thumb 状态进入异常,则当异常处理(IRQ,FIQ,Undef,Abort 和SWI)返回时,自动切换到Thumb 状态。 2) 进入ARM 状态。当操作数寄存器的状态位0 为0 时,执行BX 指令进入ARM 状

态。处理器进行异常处理(IRQ,FIQ,Undef,Abort 和SWI)。在此情况下,把PC 方入异常模式链接寄存器中。从异常向量地址开始执行也可以进入ARM 状态。 四、实验过程 1)打开Embest IDE Pro软件,选择菜单项File-->New Workspace,系统弹出对话框,创建名为TEXT的新工程,并同时创建一个与工程名相同的工作区。此时在工作窗口将打开该工作区和工程。 2)建立源文件: 点击菜单项File-->New,系统弹出一个新的、没有标题的文本编辑窗,输入光标位玉窗口中第一行,将程序所需的源文件代码输入,编辑完后,进行保存,保存文件格式为_a.s文件。 3)添加源文件: 选择Project-->Add To Project-->File命令,弹出文件选择对话框,在工程目录下选择刚才建立的_a.s格式的源文件 4)基本配置: 选择菜单项Project-->Settings,弹出工程设置对话框,在工程设置对话框中,选择Processor设置对话框,选择ARM7对目标板所用处理器进行配置。

ARM实验报告

ARM嵌入式 实验报告 姓名:冯贤成 学号:120101021106 专业:电子信息工程 指导老师:郑汉麟

ARM嵌入式系统 一、实验目的 1、通过实验掌握ARM指令的特点和寻址方式; 2、掌握简单的ARM汇编语言的程序设计; 3、了解集成开发环境Embest IDE及其开发软件的应用; 二、实验平台 Windows 7系统下的Embest IDE嵌入式软件开发平台 三、实验内容 1.编写程序将R2的高8位传送到R3的低8位(不考虑R3的其它位) 程序如下: .global _start .text _start: MOV R2,#0x80000003 /*把第一个立即数送进R2*/ MOV R3,#0x40000013 /*把第二个立即数送进R3*/ AND R0,R2,#0xff000000 /*取R2高8位到R0*/ AND R3,R3,#0xffffff00 /*R3低8位清零*/ ORR R3,R3,R0,lsr #24 /*R0逻辑右移24位后与R3相或,结果送进R3*/ stop: b stop .end 调试结果: ①Download下载: ②把第一个立即数送进R2:

③把第二个立即数送进R3: ④取R2高8位到R0: ⑤R3低8位清零: ⑥R0逻辑右移24位后与R3相或,结果送进R3:

单步跟踪后的结果,存储器及寄存器的结果显示: 2.编程实现64位的加法运算,要求【R1:R0】+【R3:R2】结果放回【R1:R0】。

程序如下: .global _start .text _start: MOV R0,#12 /R0=12 MOV R1,#6 /R1=6 MOV R2,#8 /R2=8 MOV R3,#9 /R3=9 ADDS R0,R0,R2 /R0等于低32位相加,并影响标志位 ADC R1,R1,R3 /R1等于高32位相加,并加上低位进位stop: b stop .end 调试结果: ①Download下载: ②将12赋给R0 ③将6赋给R1

STM32-ARM-综合实验报告(南京航空航天大学)

南京航空航天大学研究生实验报告 项目名称:ARM嵌入式系统设计与应用技术 设计专题:综合实验二类:数据采集和显示系统 班级: 小组成员 (1)姓名:学号:学科:电话:Email:导师: (2)姓名:学号:学科:电话:Email:导师: (3)姓名:学号:学科:电话:Email:导师: 20XX年XX月XX日

一、本实验主要内容及要求 本次综合实验的主要内容是,利用ARM内部的A/D转换器进行数据采集和显示系统设计。实验要求如下: 1、采用STM32开发板上的12位A/D转换器(参考电压3.3V)采集电位器测 试点的电压值。电位器与A/D的输入通道14相连接。 2、当按下Key键之后任意旋转电位器,利用A/D转化器采样20组电压值(每 1ms采样一次,使用定时器TIM2计时),并在液晶屏幕上显示当前电压值,当再次按下Key键之后将20组电压值存入到FLASH中。 3、复位后按下Temper键将保存的20组电压值在液晶屏幕中央绘制出波形(要 求各点连接,每个点为5个像素,要有坐标系)。 1)横坐标为“1~20”,每个横坐标之间的间隔为8个像素点; 2)纵坐标为电压值“0V,1V,2V,3V,4V”,相邻坐标之间的为10个像素 点。 4、在液晶屏合适的位置显示组名、姓名、学号、开发日期等信息。可利用STM32 开发板的资源扩展其他自定义功能(如增加温度采集通道、当前采样频率显示和设置、采样率调节等)。 二、硬件框图 本次实验的硬件部分主要是计算机和STM32两个部分,对于计算机部分不做过多的介绍,下面着重介绍STM32中的与本实验相关模块。 1.1 ADC模块 12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。 STM32教学平台的电位器是信号是连接到STM32的PC4口的,PC4正好是A/D转换的通道14,STM32实验教学平台上也标注了ADC12_14(14通道),电位器硬件框图如图1所示,ADC硬件框图如图1所示。

北航ARM9实验报告:实验3uCOS-II实验

实验三UC-OS移植实验 一、实验目的 在内核移植了uCOS-II 的处理器上创建任务。 二、实验内容 1.运行实验十,在超级终端上观察四个任务的切换。 2. 任务1~3,每个控制“红”、“绿”、“蓝”一种颜色的显示,适当增加OSTimeDly()的时间,且优先级高的任务延时时间加长,以便看清三种颜色。 3.引入一个全局变量BOOLEAN ac_key,解决完整刷屏问题。 #define RdURXH0() 当键盘有输入时在超级终端上显示相应的字符。 三、实验设备 硬件:ARM嵌入式开发平台、用于ARM920T的JTAG仿真器、PC机Pentium100以上。 软件:PC机操作系统Win2000或WinXP、ARM ADS1.2集成开发环境、仿真器驱动程序、超级终端通讯程序。 四、实验原理 所谓移植,指的是一个操作系统可以在某个微处理器或者微控制器上运行。虽然uCOS-II的大部分源代码是用C语言写成的,仍需要用C语言和汇编语言完成一些与处理器相关的代码。比如:uCOS-II在读写处理器、寄存器时只能通过汇编语言来实现。因为uCOS-II在设计的时候就己经充分考虑了可移植性,所以,uCOS-II的移植还是比较容易的。 要使uCOS一工工可以正常工作,处理器必须满足以下要求: 1)处理器的C编译器能产生可重入代码。 2)在程序中可以打开或者关闭中断。 3)处理器支持中断,并A能产生定时中断(通常在10Hz}1000Hz之间)。 4)处理器支持能够容纳一定量数据的硬件堆栈。 5)处理器有将堆栈指针和其它CPU寄存器存储和读出到堆栈(或者内存)的指令。

uCOS-II进行任务调度的时候,会把当前任务的CPU寄存器存放到此任务的堆栈中,然后,再从另一个任务的堆栈中恢复原来的工作寄存器,继续运行另一个任务。所以,寄存器的入栈和出栈是uCOS一工工多任务调度的基础。 五、实验步骤 1 以实验十为模板,将实验六inc目录下的LCD320.H 和src目录下的LCD640.C 拷到模板下的相应目录,将LCD640.C加入工程中。 2包含以下头文件#include “inc/lcd320.h”。 3改LCD640.C 文件中包含头文件的路径。 #include "../inc/drv/reg2410.h" 4 声明引用的变量extern U32 LCDBufferII2[LCDHEIGHT][LCDWIDTH]; 六、源程序 #include"../ucos-ii/includes.h" /* uC/OS interface */ #include "../ucos-ii/add/osaddition.h" #include "../inc/drivers.h" #include "../inc/sys/lib.h" #include "../src/gui/gui.h" #include "../inc/lcd320.h" #include #include //#include "..inc/lcd320.h" //#pragma import(__use_no_semihosting_swi) // ensure no functions that use semihosting OS_EVENT *MboxSem; ///******************任务定义***************/// /*OS_STK SYS_Task_Stack[STACKSIZE]= {0, }; //system task刷新任务堆栈 #define SYS_Task_Prio 1 void SYS_Task(void *Id);*/ OS_STK task1_Stack[STACKSIZE]={0, }; //Main_Test_Task堆栈 void Task1(void *Id); //Main_Test_Task #define Task1_Prio 12 OS_STK task2_Stack[STACKSIZE]={0, }; //test_Test_Task堆栈 void Task2(void *Id); //test_Test_Task #define Task2_Prio 15 OS_STK task3_Stack[STACKSIZE]={0, }; //test_Test_Task堆栈 void Task3(void *Id); //test_Test_Task #define Task3_Prio 17 OS_STK task4_Stack[STACKSIZE]={0, }; //test_Test_Task堆栈 void Task4(void *Id); //test_Test_Task #define Task4_Prio 10

ARM嵌入式实验报告

实验一ARM汇编指令使用实验——基本数学/逻辑运算 一、实验目的 1. 初步学会使用ARM ADS / Embest IDE for ARM 开发环境及ARM软件模拟器。 2. 通过实验掌握数据传送和基本数学/逻辑运算的ARM汇编指令的使用方法。 二、实验设备 1. 硬件:PC机。 2. 软件:ADS 1.2 / Embest IDE 200X集成开发环境。 三、实验内容 1.熟悉ADS 1.2 / Embest IDE 200X开发环境的使用,使用LDR/STR和MOV等指令访问寄存器或存储单元,实现数据的加法运算。具体实验程序如下: /* armasm1a.s */ .EQU X, 45 /*定义变量X,并赋值为45*/ .EQU Y, 64 /*定义变量Y,并赋值为64*/ .EQU STACK_TOP, 0X1000 /*定义栈顶0X1000*/ .GLOBAL _START .TEXT _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.使用ADD/SUB/LSL/LSR/AND/ORR等指令,完成基本数学/逻辑运算。具体实验程序如下:/* armasm1b.s */ .EQU X, 45 /*定义变量X,并赋值为45*/ .EQU Y, 64 /*定义变量Y,并赋值为64*/ .EQU Z, 87 /*定义变量Z,并赋值为87*/ .EQU STACK_TOP, 0X1000 /*定义栈顶0X1000*/ .GLOBAL _START .TEXT _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*/

arm实验报告

电子科技大学成都学院 实验报告册 课程名称:嵌入式系统开发实践 姓名:段定杰 学号:1140710726 院系:微电子技术系 专业:集成电路设计与集成系统(嵌入式)教师:李伟 2014 年6 月14 日

实验一:基于S3C2440 IIC控制 一、实验目的: 本次实验的目的是通过S3C2440的IIC接口,向EEPROM芯片AT24C02A写入8个数据,然后再将所写的数据读出,并显示在串口调试工具上。 二、实验原理和内容: IIC外接EEPROM的硬件原理图: 为了控制多主控 IIC 总线操作,必须写入值到以下寄存器中: –多主控IIC总线控制寄存器,IICCON –多主控IIC总线控制/状态寄存器,IICSTAT –多主控IIC总线 Tx/Rx 数据移位寄存器,IICDS –多主控IIC总线地址寄存器,IICADD 当释放了IIC总线时,SDA和SCL线应该都保持为高电平。一个高到低SDA 的变化可以启动一个起始条件。SCL稳定保持在高电平时的一个低到高SDA的变化可以启动一个停止条件。 起始和停止条件通常由主设备产生。第一个数据字节为7位地址值,其在启动起始条件后放到总线上,可以确定出主设备要选择的从设备。第8位是决定传输方向(读或写)。每个放到 SDA线上的字节都应该总共为8位。字节可以在总线传输操作期间无限制的发送或接收。数据通常从最高有效位(MSB)开始始发送,并且每个字节应该立即通过应答(ACK)位跟上。 实验内容:触摸屏的校准设计中通过IIC总线来存储校准参数到EEPROM,以便

以后校准时可以随时读出。 三:实验步骤: 1、首先在ADS上建立一个工程,工程名为IIC,然后选择一个合适的路径存放。 2、将光盘中TQ2440测试程序里面inc和src文件夹下的2440addr.h、2440lib.h、2440slib.h、def.h、Nand.h、Option.h、2440addr.inc、Memcfg.inc、Option.inc、2440init.s、2440slib.s、2440lib.c、nand.c这13个文件依次拷贝到刚才所建工程的文件夹下。 3、新建一个源文件,命名为IIC.c,存放到工程名为IIC的文件夹下。 4、在IIC.mcp下创建一个分组,取名为startcode,然后将前面拷贝的3个文件2440init.s、2440slib.s、nand.c依次添加到以startcode命名的文件夹下。 5、将IIC.c添加到工程里面去。 6、配置DebugRel Settings(参考实验一)。 7、在IIC.c里面进行程序的书写。 8、编译所写程序。 9、打开串口调试工具,将波特率设为115200。 10、将开发板、仿真器、串口线和电脑正确连接,打开Hjtag软件,调试程序。 四、实验数据和结果: 1.定义一个延迟函数: 2.IIC的写函数: void wr24c02(unsigned char worAddr,unsigned char *buffer,int date) { int i; flag=1; rIICDS=devaddr; rIICCON=~0x10; rIICSTAT=0xf0; while(flag==1) { delay(100); flag=1; rIICDS=worAddr;

湖南工业大学ARM实验报告

ARM嵌入式系统原理及应用开发 实验报告 学院:电气与信息工程学院 班级:电子信息1204 指导老师:谭会生 姓名: 学号: 实验一:ARM汇编指令使用实验——基本数学/逻辑运算一、实验目的 1.初步学会使用ARM ADS / Embest IDE for ARM 开发环境及ARM软件模拟器。 2.通过实验掌握数据传送和基本数学/逻辑运算的ARM汇编指令的使用方法。 二、实验设备 1.硬件:PC机。 2.软件:ADS 1.2 / Embest IDE 200X集成开发环境。 三、实验内容 熟悉ADS 1.2 / Embest IDE 200X开发环境的使用,使用LDR/STR和MOV等指令访问寄存器或存储单元,实现数据的加法运算。具体实验参考程序如下: 四.实验操作步骤 1.新建工程。先建立一个实验文件夹,如E\ARMSY\armasm1;然后运行Embest IDE集成开发环境,选择File→New Workspace菜单项,弹出一个对话框,输入工程名armasm1a/armasmlb等相关内容;最后单击OK按钮,将创建一个新工程,并同时创建一个与工程名相同的工作区。此时在工作区窗口将能打开该工作区和工程。 2.建立源文件。选择File→New菜单项,弹出一个新的、没有标题的文本编辑窗口,输入光标位于窗口中第一行,按照实验参考程序编辑输入源文件代码。编辑完后,保存文件armasmla. s。 1)armasmla. s源程序: /* armasm1a.s */ .EQU X, 45 /*定义变量X,并赋值为45*/ .EQU Y, 64 /*定义变量Y,并赋值为64*/ .EQU STACK_TOP, 0X1000 /*定义栈顶0X1000*/ .GLOBAL _START .TEXT

ARM实验报告.

ARM实验报告 一,程序功能。 该程序可以实现简单的音乐播放,通过蜂鸣器发出不同的音乐,播放的音乐为music[] 数组中的乐谱。每秒播放一个频率的音乐。播放完毕后重头开始播放。 二,播放的原理 在音乐中每个乐谱的频率值不一样,因此,我们可以改变驱动给蜂鸣器的频率值来使 蜂鸣器发出不同的声音,下面是频率对应表: 在本程序中,我们采用的是方波驱动,故只需要在IO口产生高低电平就可以了,对于不同的乐器,其频率值都是一样的,只是驱动蜂鸣器的波形不一样,这里由于是简单的音乐播放程序,故我们直接使用占空比为50%的方波作为蜂鸣器的驱动波形,改变占空比可以模拟不同的乐器发音。 三,程序流程图

四:主函数代码和相关注释. /**************************************************************************** * 文件名:main.c * 功能:使用定时器0实现1秒定时,控制蜂鸣器蜂鸣。(中断方式) * 说明:短接蜂鸣器跳线JP7。断开CF卡跳线JP13、GPIO接口J17。 ****************************************************************************/ #include "config.h" #define BEEPCON 1<<7 // P0.7引脚控制B1,低电平蜂鸣 int n,j; //全局变量见后面的详细解释。 int freq[]={0,523,578,659,698,784,880,988,1046,1174,1318,1397,1568,1760,1976};//1234567频率值int music[]={5,5,6,5,1,7,5,5,6,5,2,1,5,5,3,2,1,7,6,4,4,3,1,2,1};//播放的音乐数组 void frequecy_time(int f) { T0MR0 =(int)(110592/f) ; //产生特定频率时给T0MR0的初值 } /**************************************************************************** * 名称:IRQ_Time0() * 功能:定时器0中断服务程序,取反BEEPCON控制口。产生50%的占空比 * 入口参数:无 * 出口参数:无 ****************************************************************************/ void __irq IRQ_Time0(void) { if( (IO0SET&BEEPCON) == 0 ) { IO0SET = BEEPCON; //输出高电平 } else { IO0CLR = BEEPCON; //输出低电平 } if(n==freq[music[j]]) //到达1秒后 {T0PR = 99; // 设置定时器0分频为100分频,得110592Hz T0MCR = 0x03; // 匹配通道0匹配中断并复位T0TC frequecy_time(freq[music[j]*2]); //播放下一个频率值 T0TCR = 0x03; // 启动并复位T0TC T0TCR = 0x01; n=0; j++; if(j==25) j=0; //播放完毕后从新播放 /* 设置定时器0中断IRQ */ VICIntSelect = 0x00; // 所有中断通道设置为IRQ中断

ARM实验报告

南京邮电大学通达学院 嵌入式系统B 实验报告 班级100023 专业通信工程(嵌入式系统开发) 学号10002304 姓名陆海霞 实验项目: 1、ADS下简单ARM汇编程序 2、熟悉LINUX开发环境 3、多线程应用程序设计 指导教师范山岗

实验一ADS下简单ARM汇编程序 实验目的: 1、熟悉ADS1.2下进行汇编语言程序设计的基本流程; 2、熟悉在ADS中创建工程及编写、编译和运行汇编语言程序的方法; 3、熟悉AXD中各种调试功能。 实验环境: 1、硬件:PC机。 2、软件ADS1.2。 实验内容: 1、在ADS中新建工程,并设置开发环境。 2、在Code Warrior 环境中编辑、编译和链接汇编语言程序,并生成可执行文件。 3、在AXD中调试汇编程序; 4、使用命令行界面编辑、编译和链接汇编程序。 实验步骤: 本实验要求在ADS环境下,编写一个汇编程序,计算S=1+2+3……+n的累加值。 把累加结果S存入到存储器的指定位置;在AXD中调试该程序,使用ARMulator模拟目标机。 1、新建工程。 打开Code Warrior,选择File->New(project)选项,使用ARM Executable Image模版新建一个工程。 2、设置编译和链接选项。 由于我们使用的是模拟机,设置汇编语言编译器的模拟处理器架构为Xscale;在ARM Linker 中,选择output选项卡并选择Linktype为Simple类型,确认RO Base为0x8000,修改RW Base为0x9000, 3、为当前工程添加源程序文件。 ARM汇编程序源文件后缀名为S大小写均可。 确保添加入当前工程复选框选上。 4、编辑源程序代码。 参考程序add.s : ;armadd源程序 N EQU 7 ;累加次数 ;定义名为Adding的代码段 AREA Adding,CODE,READONL Y ENTRY MOV R0,#0 MOV R1,#1 REPEAT ADD R0,R0,R1

中北大学嵌入式系统实验报告

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

实验一 ARM 处理器指令系统实验 一、实验目的 熟悉ARM指令系统,熟悉ARM SDT编辑编译连接,ARM Project Manager和ARM Debugger 的设置和使用 二、实验条件 Windows平台的ARM SDT 2.51软件:ARM Project Manager和ARM Debugger。 三、实验内容 学习使用ARM Project Manager建立项目文件,编辑汇编文件,并加入项目。学习ARM编译器和汇编器的设置。通过编程熟悉ARM指令,包括跳转指令,数据处理指令,状态寄存器传送指令,load/store指令,中断异常产生指令。学习ARM调试起的使用方法,包括程序的导入,单步执行,断点设置等。 四、实验要点 工程文件的建立,在ARM Project Manager中点击File->New,选择Project,点击确定。 链接器的设定,需要设置代码和数据段的起始地址。 点击图标,选择不进行远程调试,即可打开调试器。 五、实验结果 熟悉ARM指令系统 实验二p1口实验 一、实验目的 熟悉 ARM SDT 软件开发方法和技能;

学习和巩固 ARM 指令集; 学习和巩固汇编语言程序设计 二、实验条件 Windows 平台的 ARM SDT 2.51 软件:ARM Project Manager 和 ARM Debugger; DebugServer.exe ; EFLAG-ARM-S3C44B0 实验箱 三、实验内容 目录 ARM251\EXAMPLES\ASM 下的汇编程序, 学习和调试代码,分析所得结果。 在调试器上仿真软件的执行。 在实验箱上,调试软件,并观察软件的执行结果 四、实验要点 在调试软件目录中启动 DebugServer.exe 调试器服务程序。 启动 SDT 调试软件 ARM Debugger。 五、实验结果

2014完整ARM嵌入式系统实验报告

郑州航空工业管理学院 嵌入式系统实验报告 (修订版) 20 – 20第学期 赵成,张克新编著 院系: 姓名: 专业: 学号: 电子通信工程系 2014年3月制

实验一ARM体系结构与编程方法 一、实验目的 了解ARM9 S3C2410A嵌入式微处理器芯片的体系结构,熟悉ARM微处理器的工作模式、指令状态、寄存器组及异常中断的概念,掌握ARM指令系统,能在ADS1.2 IDE中进行ARM汇编语言程序设计。 二、实验内容 1.ADS1.2 IDE的安装、环境配置及工程项目的建立; 2.ARM汇编语言程序设计(参考附录A): (1)两个寄存器值相加; (2)LDR、STR指令操作; (3)使用多寄存器传送指令进行数据复制; (4)使用查表法实现程序跳转; (5)使用BX指令切换处理器状态; (6)微处理器工作模式切换; 三、预备知识 了解ARM嵌入式微处理器芯片的体系结构及指令体系;熟悉汇编语言及可编程微处理器的程序设计方法。 四、实验设备 1. 硬件环境配置 计算机:Intel(R) Pentium(R) 及以上; 内存:1GB及以上; 实验设备:UP-NETARM2410-S嵌入式开发平台,J-Link V8仿真器; 2. 软件环境配置 操作系统:Microsoft Windows XP Professional Service Pack 2; 集成开发环境:ARM Developer Suite (ADS) 1.2。 五、实验分析 1.安装的ADS1.2 IDE中包括和两个软件组件。在ADS1.2中建立类型的工程,工程目标配置为;接着,还需要对工程进行、及链接器设置;最后,配置仿真环境为仿真方式。 2.写出ARM汇编语言的最简程序结构,然后在代码段中实现两个寄存器值的加法运算,给出运算部分相应指令的注释。 ; 文件名:

第一次ARM实验报告

微机原理实验报告 实验名称:按键控制蜂鸣器实验院系:物理与机电工程学院专业班级:09电子信息工程2班学号:20090416 学生姓名: 指导教师:涂二生李建华 完成时间:2012年4月25日报告成绩:

实验一用按键控制蜂鸣器实验 一、实验目的 1、掌握ARM7——LPC2131的GPIO口的基本工作原理及相应功能; 2、掌握GPIO的特性和编程方法。 二、实验仪器 微型电子计算机(含软件H-JIAO V0.3.1 和ADSv1_2)、Easy ARM2131开发板、USB接口电源线和JTAG接口线以及部分跳线。 三、实验原理 (1)蜂鸣器控制电路 在Easy ARM2131开发板上,接有一个蜂鸣器,由P0.7控制,通过跳线JP11选择连接。蜂鸣器控制电路如图一所示。 电路说明: 如果跳线JP11选择蜂鸣器,当P0.7输出低电平时,蜂鸣器鸣叫,当P0.7输出高电平时,则蜂鸣器停止鸣叫。实验利用P0.7的输出功

能,控制蜂鸣器鸣叫。程序设置PINSEL0使P0.7连接GPIO,并通过IO0DIR将其设置为输出状态,然后通过IO0CLR和IO0SET清零和置位P0.7口,控制蜂鸣器。LPC2131中,具有I2C总线功能的I/O 口(P0.2-SCL0、P3.0-SDA0、P0.11-SCL1、P0.14-SDA1)为开漏输出,在用作I2C总线以及其他功能时,需要加1K~10K欧姆的上拉电阻。则此电路图在JP11前,加R22=10K的上拉电阻。(2)按键控制电路 如图4.2所示,当P0口连接GPIO且用于输入时,如用于检测按键的时候,由于P0口作GPIO输入时,内部无上拉内阻,所以需要加10K左右的上拉电阻,把I/O口拉到高电平。 当P0口用于GPIO输入时(如按键输入),内部无上拉电阻,需要加上拉电阻,电路如图4.14

ARM实验报告

ARM实验报告 朱银忠 1、实验目的 (1)熟悉LPC2378的结构功能和代码体系。 (2)熟悉LPC2378实验板的各个模块功能。 (3)掌握基本的硬件电路的连接和调试方法。 (4)利用按键模块,显示模块和主控CPU实现简单的功能。 2、实验步骤 (1)学习并熟悉电路图,理解掌握LPC2378及其各个模块的电路连接结构和工作方法。 (2)将LPC2378和其他外围原件焊接在实验板上。 (3)学习keil C的使用方法,建立一个工程。并利用keil C将所有的主程序和外围程序烧写到LPC2378中。 (4)上电测试各个模块是否正常工作,如果不正常工作则找到原因并解决故障。(5)通过keil C 编写一个小程序,在LPC 2378实验板上实现一定的功能。3、硬件调试结果 (1)上电后经万用表测试,电压转换电路工作正常,芯片供电电压为3.3V,部分外围元件为5V。 (2)在keil C 中建立工程后,通过进行合适的配置成功的将程序下载进了LPC2378。 (3)将串口模块通过串口线和计算机连接后。利用串口调试助手软件测试串口模块工作正常。 (4)通过对SD卡的读写操作测试证明SD卡模块工作正常。 (5)通过对键值的读取证明按键模块工作正常。 (6)液晶模块在插上排线后没有反应,经检查,发现接口和封装并不匹配。将接口调换位置后重新插上排线,再通过调节电位器到合适的位置,液晶可以正常工作。

4、程序功能和实现思路 该程序通过LPC2378对液晶模块和按键模块的联合控制,实现了一个“推箱子”游戏的功能。 该程序基本实现思路为,通过按键函数读取键值得到上、下、左、右四个方向的命令。根据命令控制“人”的位置和“箱子”的位置。在屏幕上显示“人”的位置和“箱子”的位置,最终当“人”将“箱子”推到预定地点后,游戏结束。 5、程序清单 #include "LPC23XX.h" #include "CONFIG.h" #include "GPIO.h" #include "LCD.h" #include "IRQ.h" #include "RTC.h" #include "TIMER.h" #include "KEY.h" #include "I2C.h" #include "UART.h" #include "MOTOR.h" #include "RS485.h" #include "stdio.h" #include "stdlib.h" #define UP 0x34 #define DOWN 0x63 #define LEFT 0x32 #define RIGHT 0x36 unsigned int i,j; unsigned char deslocatex[]={13,14}; unsigned char deslocatey[]={13,14}; unsigned char flag0=0,flag1=0; unsigned char temp; unsigned char ss[]; unsigned int sc=0; unsigned long time=100000; static int step=0; unsigned int cant=0 ; struct BOX { unsigned int x; unsigned int y; }Box1,Box2,Box3,Box0;

相关主题
文本预览
相关文档 最新文档