ARM实验报告例子

ARM实验报告例子
ARM实验报告例子

东北石油大学(硕士)研究生

课程名称:ARM与DSP工程实践

任课教师:刘超

开课学年/开课学期:2016-2017/2

学时/ 学分:32/2

所在教学学院:电气信息工程学院

专业名称:电气工程

学号/ 姓名:168002060308/张琰骏

教师评语:____________________________________________________________________

__________________________________

任课教师签字(章):_________

一、实验目的

1.熟练掌握嵌入式应用系统开发所需要的硬件基础知识。

2.培养学生对嵌入式系统的分析、开发与设计的能力。

3.能够熟练使用EVC(eMbedded Visual C++)集成开发环境。

二、实验内容与结果分析

1. 实验内容

本次使用EVC开发环境,设计编写一个ARM应用实例写字板,主要功能是输入英文字母,以记录资料。本次设计是基于对话框的工程,用一个对话框作为应用程序的主窗口,同时通过各种控件实现数制转换功能。

2.实验步骤。

(1)第一步,启动Visual C++后,选择“File”->“New”命令,弹出“New”对话框,选择“Projects”标签,选择“MFC AppWizard(exe)”,创建一个使用MFC基础类库进行编程的可执行程序;在“Project name”中输入新建项目名:ball:在“Location”中显示存放路径,可进行修改,确认对话框右下角的“Platforms”中的“Win32”被选中,以保证32位的Windows平台上的应用程序,最后点击OK。

(2)第二步,接下来,选择“Dialog based”,“点击Finish”结束创建。“单击Finish”完成创建。

(3)第三步,完成创建,则开始应用程序的自动生成工作。

(4)第四步,完成创建进入编程界面,左侧任务栏有ClassWizard、ResourceView、FileView 三个部分,下面我们对程序运行的主窗口目录进行编辑。

(5)第五步,设计完成记事本的程序对话框,对dialog和documents模块进行设计。

(6)第六步,在FileView视窗中将程序源代码的录入。

(7)第七步,对程序进行编译,查看错误进行调试,使程序正确无误可以正常运行。本次实验未出现错误,系统可以正常运行。

(8)第八步,最后将系统上传至试验箱,首先将试验箱电源与试验台正确接通,再通过试验箱通讯线与电脑连接,最后通过电脑Microsoft ActiveSync软件连接起来。

3.实验结果分析

本次使用EVC开发环境,设计编写了写字板程序,并可进行英文的输入与保存。以下是实验的运行结果。

4,运行程序

// NotepadDoc.cpp : implementation of the CNotepadDoc class //

#include "stdafx.h"

#include "Notepad.h"

#include "MainFrm.h"

#include "NotepadDoc.h"

#include "NotepadView.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

// CNotepadDoc

IMPLEMENT_DYNCREATE(CNotepadDoc, CDocument)

BEGIN_MESSAGE_MAP(CNotepadDoc, CDocument) //{{AFX_MSG_MAP(CNotepadDoc)

ON_COMMAND(ID_FILE_NEW, OnFileNew)

ON_COMMAND(ID_FILE_OPEN, OnFileOpen)

ON_COMMAND(ID_APP_EXIT, OnAppExit)

ON_COMMAND(ID_FILE_SA VE, OnFileSave)

ON_COMMAND(IDR_NEW, OnNew)

ON_COMMAND(IDR_OPEN, OnOpen)

ON_COMMAND(IDR_QUIT, OnQuit)

ON_COMMAND(IDR_SA VE, OnSave)

ON_WM_CLOSE()

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CNotepadDoc construction/destruction

CNotepadDoc::CNotepadDoc()

{

// TODO: add one-time construction code here

}

CNotepadDoc::~CNotepadDoc()

{

}

BOOL CNotepadDoc::OnNewDocument()

{

// if (!CDocument::OnNewDocument())

// return FALSE;

// ((CEditView*)m_viewList.GetHead())->SetWindowText(NULL);

// TODO: add reinitialization code here

// (SDI documents will reuse this document)

return TRUE;

}

/////////////////////////////////////////////////////////////////////////////

// CNotepadDoc serialization

void CNotepadDoc::Serialize(CArchive& ar)

{

// CEditView contains an edit control which handles all serialization ((CEditView*)m_viewList.GetHead())->SerializeRaw(ar);

}

/////////////////////////////////////////////////////////////////////////////

// CNotepadDoc diagnostics

#ifdef _DEBUG

void CNotepadDoc::AssertV alid() const

{

CDocument::AssertValid();

}

void CNotepadDoc::Dump(CDumpContext& dc) const

{

CDocument::Dump(dc);

}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////

// CNotepadDoc commands

void CNotepadDoc::OnFileNew()

{

// TODO: Add your command handler code here

CNotepadView* pView = (CNotepadView*)m_viewList.GetHead();

CEdit& theEdit = pView->GetEditCtrl();

if(theEdit.GetModify())

{

if(pView->MessageBox(L"是否保存修改过的数据?",NULL,MB_YESNO |MB_ICONQUESTION)==IDYES)

{

OnFileSave();

}

}

theEdit.SetWindowText(L"");

pView->m_strFilePath=L"";

theEdit.SetModify(false);

}

void CNotepadDoc::OnFileOpen()

{

// TODO: Add your command handler code here

CNotepadView* pView = (CNotepadView*)m_viewList.GetHead();

CEdit& theEdit = pView->GetEditCtrl();

if(theEdit.GetModify())

{

if(pView->MessageBox(L"是否保存修改过的数据?",NULL,MB_YESNO |MB_ICONQUESTION)==IDYES)

{

OnFileSave();

}

}

WCHAR chFilter[]=L"Unicode 文件(*.txt)|*.txt|所有文件(*.*)|*.*||";

CFileDialog

fileDlg(true,NULL,NULL,OFN_HIDEREADONL Y|OFN_OVERWRITEPROMPT,chFilter);

fileDlg.m_ofn.lpstrInitialDir=L"\\hard disk";

CString pathName;

if(fileDlg.DoModal()!=IDOK)

{

return;

}

pathName=fileDlg.GetPathName();

CMainFrame * myframe = (CMainFrame *)AfxGetMainWnd();

myframe->m_StatusBar.SetPaneText(2,pathName);

CFile file;

if(!file.Open(pathName,CFile::modeRead))

{

AfxMessageBox(L"不能打开文件");

return;

}

if(file.GetLength()>128*1024)

{

AfxMessageBox(L"文件过大");

return;

}

WCHAR* buffer = new WCHAR[64*1024+1];

if(buffer ==NULL)

{

AfxMessageBox(L"内存不足");

return;

}

UINT uTemp = file.Read(buffer,file.GetLength());

if(uTemp!= file.GetLength())

{

pView->MessageBox(L"读数据出现错误",NULL,MB_ICONERROR);

return;

}

buffer[uTemp/2] = NULL;

file.Close();

theEdit.SetWindowText(buffer);

theEdit.SetModify(false);

pView->m_strFilePath = pathName;

delete[] buffer;

}

void CNotepadDoc::OnAppExit()

{

// TODO: Add your command handler code here

CNotepadView* pView = (CNotepadView*)m_viewList.GetHead();

CEdit& theEdit = pView->GetEditCtrl();

if(theEdit.GetModify())

{

if(pView->MessageBox(L"是否保当前文本?",NULL,MB_YESNO |MB_ICONQUESTION)==IDYES)

{

OnFileSave();

}

}

AfxGetMainWnd()->SendMessage(WM_CLOSE);

}

void CNotepadDoc::OnFileSave()

{

// TODO: Add your command handler code here

CNotepadView* pView = (CNotepadView*)m_viewList.GetHead();

CEdit& theEdit = pView->GetEditCtrl();

WCHAR* buffer = new WCHAR[64*1024+1];

if(buffer == NULL)

{

AfxMessageBox(L"内存不足");

return;

}

CString strT;

theEdit.GetWindowText(strT);

wcscpy(buffer,strT);

CFile file;

if(pView->m_strFilePath!=L"")

{

if(!file.Open(pView->m_strFilePath,CFile::modeWrite))

{

AfxMessageBox(L"内存不足");

return;

}

file.SetLength(0);

file.Write(buffer,strT.GetLength()*2);

file.Close();

}

else

{

WCHAR chFilter[] = L"Unicode文件(*.txt)|*.txt|所有文件(*.*)|所有文件(*.*)|*.*||";

CFileDialog

fileDlg(false,L"txt",NULL,OFN_HIDEREADONL Y|OFN_OVERWRITEPROMPT,chFilter);

fileDlg.m_ofn.lpstrInitialDir = L"\\hard disk";

CString pathName;

if(fileDlg.DoModal()!=IDOK)

{

return;

}

else

{

pathName = fileDlg.GetPathName();

CFile file2;

if(!file2.Open(pathName,CFile::modeCreate|CFile::modeWrite))

{

AfxMessageBox(L"不能创建文件");

return ;

}

file2.Write(buffer,strT.GetLength()*2);

file2.Close();

pView->m_strFileName = pathName;

CMainFrame * myframe = (CMainFrame *)AfxGetMainWnd();

myframe->m_StatusBar.SetPaneText(2,pathName);

}

}

theEdit.SetModify(false);

delete[] buffer;

}

void CNotepadDoc::OnNew()

{

// TODO: Add your command handler code here

CNotepadDoc::OnFileNew();

}

void CNotepadDoc::OnOpen()

{

// TODO: Add your command handler code here

CNotepadDoc::OnFileOpen();

}

void CNotepadDoc::OnQuit()

{

// TODO: Add your command handler code here

CNotepadDoc::OnAppExit();

}

void CNotepadDoc::OnSave()

{

// TODO: Add your command handler code here

CNotepadDoc::OnFileSave();

}

void CNotepadDoc::OnClose()

{

}

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;

相关主题
相关文档
最新文档