嵌入式系统概论实验报告.docx

上传人:b****6 文档编号:3754182 上传时间:2022-11-25 格式:DOCX 页数:32 大小:411.15KB
下载 相关 举报
嵌入式系统概论实验报告.docx_第1页
第1页 / 共32页
嵌入式系统概论实验报告.docx_第2页
第2页 / 共32页
嵌入式系统概论实验报告.docx_第3页
第3页 / 共32页
嵌入式系统概论实验报告.docx_第4页
第4页 / 共32页
嵌入式系统概论实验报告.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

嵌入式系统概论实验报告.docx

《嵌入式系统概论实验报告.docx》由会员分享,可在线阅读,更多相关《嵌入式系统概论实验报告.docx(32页珍藏版)》请在冰豆网上搜索。

嵌入式系统概论实验报告.docx

嵌入式系统概论实验报告

 

实验报告

2013至2014学年第1学期

课程名称:

嵌入式系统概论

院别:

数学与计算机学院

班级:

学号:

姓名:

指导教师:

海深

实验一ADS1.2开发环境

一、实验目的

熟悉ADS1.2开发环境,学会ARM仿真器的使用。

使用ADS编译、下载、调试并跟踪一段已有的程序,了解嵌入式开发的基本思想和过程。

二、实验内容

本次实验使用ADS集成开发环境。

新建一个简单的工程文件,并编译这个工程文件。

学习ARM仿真器的使用和开发环境的设置。

下载已经编译好的文件到嵌入式控制器中运行。

学会在程序中设置断点,观察系统内存和变量,为调试应用程序打下基础。

三、预备知识

C语言的基础知识、程序调试的基础知识和方法。

四、实验设备及工具(包括软件调试工具)

硬件:

ARM嵌入式开发平台、PC机Pentium100以上、用于ARM920T的JTAG仿真器、串口线。

软件:

PC机操作系统Win2000或WinXP、ARMADS1.2集成开发环境、仿真器驱动程序、超级终端通讯程序。

五、实验步骤

1、建立工程

(1)运行ADS1.2集成开发环境(CodeWarriorforARMDeveloperSuite)。

选择File|New…菜单,在对话框中选择Project,如图1B-1所示,新建一个工程文件。

图中示例的工程名为Exp6.mcp。

点set…按钮可为该工程选择路径如图2-1所示,选中CreatFolder选项后将以图2-1中的ProjectName或图2-2中的文件名为名创建目录,这样可以将所有与该工程相关的文件放到该工程目录下,便于管理工程。

在图2-1中工程模板列表中的2410ARMExecutableImage是专为本嵌入式开发板设置的工程模板,后文有具体说明。

在此也可选择ARMExecutableImage通用模板。

图2-1新建工程

图2-2保存工程

(2)在新建的工程中,如图2-3所示,选择Debug版本,使用Edit|DebugSettings菜单对Debug版本进行参数设置。

图2-3选择版本

(3)在DebugSettings对话框中选择TargetSettings项,如图2-4所示。

在Post-linker一栏中选择ARMfromELF。

图2-4TargetSettings

(4)在DebugSettings对话框中选择ARMLinker项,如图2-5。

在Output选项卡的Simpleimage框中设置连接的Read-Only(只读)和Read-Write(读写)地址。

地址0x30008000是开发板上SDRAM的真实地址,是由系统的硬件决定的;0x30200000指的是系统可读写的内存地址。

也就是说,在30008000∼0x30200000之间是只读区域,存放程序的代码段,在0x30200000开始是程序的数据段。

图2-5设置连接地址范围

图2-5所示的设置只是一种简单设置,如果程序需要用到标准C库函数的话需要按图2-6进行连接地址的设置。

标准C中如果使用malloc及其相关的函数,需要使用系统的堆(Heap)空间,可以通过scatter文件来描述系统HEAP段的位置。

针对2410-S开发板,把程序的入口定位在0x30008000,并定义scatter文件为scat_ram.scf。

在图2-6中选择LinkType为Scattered,输入scatter文件名scat_ram.scf;然后切换到Options选项卡在ImageEntryPoint框中输入0x30008000。

也可以在图2-6的CommandLine框中直接输入-entry0x30008000-scatterscat_ram.scf进行上述设置。

图2-6通过scatter文件设置连接地址

提示:

1)程序移植到ADS后,程序最开始首先执行用汇编写的初始化代码——包括中断向量和堆栈的初始化。

在该段代码中使用IMPORT__main;注意main前面是两个下划线B__main进行系统内部的标准C函数初始化,然后调用用户在C中定义的main()函数(注意:

两个main都是小写),并且在嵌入式应用中用户C的main函数中不能有参数(intmain(void))。

2)不能有系统定义的软中断,在汇编中可以使用IMPORT__use_no_semihosting_swi来检测,在C中使用#pragmaimport(__use_no_semihosting_swi)//ensurenofunctionsthatusesemihosting

3)scatter文件内容如下,创建了一个RAM_LOAD的程序和数据的装载区域,起始地址0x30008000。

RAM_LOAD0x30008000

{RAM_EXEC+0

{

startup.o(init,+First)*(+RO)

}

L0PAGETABLE0x30200000UNINIT;about2MByteoffsetSDRAM

{

pagetable.o(+ZI)

}

STACKS+0x100000UNINIT;64KByteunderL0pagetable

{

stack.o(+ZI)

}

RAM+0

{

*(+RW,+ZI)

}

HEAP+0UNINIT

{

heap.o(+ZI)

}

EXCEPTION_EXEC0OVERLAY;exceptionregion

{

exception.o(+RO)

}

}

4)定义retarget.c函数,重新定位标准C库中stdio的一些相关函数。

主要有:

struct__FILE{inthandle;/*Addwhateveryouneedhere*/};FILE__stdout;//文件的定义

intfputc(intch,FILE*f)//fputc函数

intferror(FILE*f)//ferror函数

void_sys_exit(intreturn_code)//系统退出函数

int__raise(intsignal,intargument)

__value_in_regsstruct__initial_stackheap

__user_initial_stackheap(unsignedR0,unsignedSP,unsignedR2,unsignedSL)//用户的堆空间和栈空间函数

具体定义,可以参考init/retarget.c

(5)在第(4)步中如果不选择简单的连接地址设置,则需按图2-7所示设置C编译器。

在DebugSettings对话框中选择ARMCCompiler项,在ATPCS选项卡中选择ARM/Thumpinterwork,或者在命令行中添加-apcs/interwork。

图2-7设置ARMCCompiler

(6)在第四步中如果选择简单的地址连接设置,在DebugSettings对话框中选择ARMLinker项,如图2-8。

在Layout选项卡的Placeatbeginningofimage框中设置程序的入口模块。

指定在生成的代码中,程序是从startup.s开始运行的。

Object设为startup.o,section设为init。

图2-8设置入口模块

(7)在DebugSettings对话框中选择ARMfromELF项,如图2-9。

在Outputfilename框中设置输出文件名为system.bin,这就是要下载到开发板的嵌入式应用程序文件。

图2-9设置输出文件名

(8)回到如图2-10所示的工程窗口中,选择Release版本,使用Edit|ReleaseSettings菜单对Release版本进行参数设置。

(9)参照第(3)、(4)、(5)、(6)、(7)步在ReleaseSettings对话框中设置Release版本的Post-linker、连接地址范围、入口模块和输出文件。

(10)回到如图2-3所示的工程窗口中,选择Targets选项卡,如图2-10所示。

选中DebugRel版本,按Del键将其删除。

DebugRel子树是一个折衷版本,通常用不到,所以在这里删除。

图2-10删除DebugRel版本

(11)设置完成后,可以将该新建的空工程文件作为模板保存以便以后使用。

将工程文件名改为2410ARMExecutable.mcp。

然后在ADS1.2软件安装目录下的Stationery目录下新建名为2410ARMExecutableImage的模板目录,再将刚设置完的2410ARMExecutable.mcp工程模板文件存放到该目录下即可。

这样以后新建工程的时候如图2-1所示就能看到以2410ARMExecutableImage为名字的模板了。

提示:

1)建议用户直接将光盘Template/ADS下的2410ARMExecutableImage子目录直接拷贝到ADS1.2安装目录下的Stationery目录中,这样也能在图1B-1所示的新建工程对话框中看到这个模板,其中具有已经设置好的针对本开发板的参数。

注意ARMLinkerLinktype设置为Scattered,请参阅第(4)步内容。

2)如果用户原来已安装了ARMSDT软件的话,再安装ADS1.2后可能导致ARMSDT不能正常使用,需要用户更改系统环境变量:

ARMINC设置为%ARMSDTPATH%\INCLUDE,ARMLIB设置%ARMSDTPATH%\LIB,其中%ARMSDTPATH%指ARMSDT的安装目录。

(12)新建工程后,可以执行菜单Project|AddFiles把和工程相关的所有文件即除inti的所有文件加入到工程中。

ADS1.2不能自动按文件类别对这些文件进行分类,需要的话用户可以执行菜单Project|CreateGroup创建文件组,然后分别将不同类的文件加入到不同的组,以方便管理。

如图2-11所示。

更为简单的办法是,在新建工程时ADS创建了和工程同名的目录,在该目录下按类别创建子目录并存放工程文件。

选中所有目录拖动到任务栏上的ADS任务条上,不要松开鼠标当ADS窗口恢复后再拖动到工程文件窗口,松开鼠标。

这样ADS将以子目录名建立同名文件组并以此对文件分类。

图2-11加入工程文件

(13)编译并双击图2-11中的Main.c打开该文件,可以查看Main()函数的内容,这时也可运行程序。

图2-11的例程是ARM的串口实验。

读者可以查看其他源文件的内容以对系统运行有所了解。

可以发现ADS的文本编辑器已经有了很大的改善,文本按语法分颜色显示,读者可以根据喜好在Edit菜单下的Preferences窗口中进行设置。

并可以很好的支持中文注释。

 

指导教师成绩

实验二ARM的串行口实验

一、实验目的

1.掌握ARM的串行口工作原理。

2.学习编程实现ARM的UART通讯。

3.掌握CPU利用串口通讯的方法。

二、实验内容

学习串行通讯原理,了解串行通讯控制器,阅读ARM芯片文档,掌握ARM的UART相关寄存器的功能,熟悉ARM系统硬件的UART相关接口。

编程实现ARM和计算机实现串行通讯:

ARM监视串行口,将接收到的字符再发送给串口(计算机与开发板是通过超级终端通讯的),即按PC键盘通过超级终端发送数据,开发板将接收到的数据再返送给PC,在超级终端上显示。

三、预备知识

1、用ARMADS1.2集成开发环境,编写和调试程序的基本过程。

2、ARM应用程序的框架结构。

3、了解串行总线

四、实验设备及工具

硬件:

ARM嵌入式开发平台、PC机Pentium100以上、用于ARM920T的JTAG仿真器、串口线。

软件:

PC机操作系统Win2000或WinXP、ARMADS1.2集成开发环境、仿真器驱动程序、超级终端通讯程序。

五、实验原理及说明

1.异步串行I/O

异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。

数据的各不同位可以分时使用同一传输通道,因此串行I/O可以减少信号连线,最少用一对线即可进行。

接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。

为了恢复发送的信息,双方必须协调工作。

在微型计算机中大量使用异步串行I/O方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。

但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。

图3-1串行通信字符格式

图3-1给出异步串行通信中一个字符的传送格式。

开始前,线路处于空闲状态,送出连续“1”。

传送开始时首先发一个“0”作为起始位,然后出现在通信线上的是字符的二进制编码数据。

每个字符的数据位长可以约定为5位、6位、7位或8位,一般采用ASCII编码。

后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。

也可以约定不要奇偶校验,这样就取消奇偶校验位。

最后是表示停止位的“1”信号,这个停止位可以约定持续1位、1.5位或2位的时间宽度。

至此一个字符传送完毕,线路又进入空闲,持续为“1”。

经过一段随机的时间后,下一个字符开始传送才又发出起始位。

每一个数据位的宽度等于传送波特率的倒数。

微机异步串行通信中,常用的波特率为50,95,110,150,300,600,1200,2400,4800,9600等。

接收方按约定的格式接收数据,并进行检查,可以查出以下三种错误:

1)奇偶错:

在约定奇偶检查的情况下,接收到的字符奇偶状态和约定不符。

2)帧格式错:

一个字符从起始位到停止位的总位数不对。

3)溢出错:

若先接收的字符尚未被微机读取,后面的字符又传送过来,则产生溢出错。

每一种错误都会给出相应的出错信息,提示用户处理。

2.串行接口的物理层标准

通用的串行I/O接口有许多种,现仅就最常见的两种标准作简单介绍。

1)EIARS—232C

这是美国电子工业协会推荐的一种标准(ElectronicindustriesAssociationRecoil-mendedStandard)。

它在一种25针接插件(DB—25)上定义了串行通信的有关信号。

这个标准后来被世界各国所接受并使用到计算机的I/O接口中。

⑴信号连线

在实际异步串行通信中,并不要求用全部的RS—232C信号,许多PC/XT兼容机仅用15针接插件(DB—15)来引出其异步串行I/O信号,而PC中更是大量采用9针接插件(DB—9)来担当此任,因此这里也不打算就RS—232C的全部信号作详细解释。

图3-2给出两台微机利用RS—232C接口通信的联线(无MODEM),我们按DB—25的引脚号标注各个信号。

下面对图3-2中几个主要信号作简要说明。

保护地通信线两端所接设备的金属外壳通过此线相联。

当通信电缆使用屏蔽线时,常利用其外皮金属屏蔽网来实现。

由于各设备往往已通过电源线接通保护地,因此,通信线中不必重复接此地线(图中用虚线表示)。

例如使用9针插头(DB—9)的异步串行I/O接口就没有引出保护地信号。

TXD/RXD是一对数据线,TXD称发送数据输出,RXD称接收数据输入。

当两台微机以全双工方式直接通信(无MODEM方式)时,双方的这两根线应交叉联接(扭接)。

信号地所有的信号都要通过信号地线构成耦合回路。

通信线有以上三条(TXD、RXD和信号地)就能工作了。

其余信号主要用于双方设备通信过程中的联络(握手信号),而且有些信号仅用于和MODEM的联络。

若采取微型机对微型机直接通信,且双方可直接对异步串行通信电路芯片编程,若设置成不要任何联络信号,则其它线都可不接。

有时在通信线的同一端将相关信号短接以“自握手”方式满足联络要求。

这就是如图3-2(a)所示的情况。

图3-2实用RS-232C连线

RTS/CTS请求发送值号RTS是发送器输出的准备好信号。

接收方准备好后送回清除发送信号CTS后,发送数据开始进行,在同一端将这两个信号短接就意味着只要发送器准备好即可发送。

DCD载波检测(又称接收线路信号检测)。

本意是MODEM检测到线路中的载波信号后,通知终端准备接收数据的信号,在没有接MODEM的情况下,也可以和RTS、CTS短接。

相对于MODEM而言,微型机和终端机一样被称为数据终端DTE(DataTerminalEquipment)而MODEM被称为数据通信装置DCE(DataCommunicationsEquipment),DTE和DCE之间的连接不能像图3-2中有“扭接”现象,而应该是按接插件芯号,同名端对应相接。

此处介绍的RS—232C的信号名称及信号流向都是对DTE而言的。

DTR/DSR数据终端准备好时发DTR信号,在收到数据通信装置装备好DSR信号后,方可通信。

图3-2(a)中将这一对信号以“自握手”方式短接。

R1原意是在MODEM接收到电话交换机有效的拨号时,使RI有效,通知数据终端准备传送。

在无MODEM时也可和DTR相接。

图3-2(b)给出了无MODEM情况下,DTE对DTE异步串行通信线路的完整连接,它不仅适用于微型机和微型机之间的通信,还适用于微型机和异步串行外部设备(如终端机、绘图仪、数字化仪等)的连接。

⑵信号电平规定

RS—232C规定了双极性的信号逻辑电平:

-3V到-25V之间的电平表示逻辑“1”。

+3V到+25V之间的电平表示逻辑“0”。

因此这是一套负逻辑定义。

以上标准称为EIA电平。

PC/XT系列使用的信号电平是-12V和+12V,符合EIA标准,但在计算机内部流动的信号都是TTL电平,因此这中间需要用电平转换电路。

常用芯片MCl488或SN75150将TTL电平转换为EIA电平,MCl489或SN75154将EIA电平转换为TTL电平。

PC/XT系列以这种方式进行串行通信时,在波特率不高于9600的情况下,理论上通信线的长度限制纽为15米。

2)20mA电流环

20mA电流环并没有形成一套完整的标准,主要是将数字信号的表示方法不使用电子的高低,而改用20mA电流的有无:

“1”信号在环路中产生20mA电流;“0”信号无电流产生。

当然也需要有电路来实现TTL电平和20mA电流之间的转换。

图3-3是PC/XT微机中使用的一种20mA电流环接口。

当发送方SOUT=1时,便有20mA电流灌入接收方的光耦合器,于是光耦合器导通,使SIN=1。

反之当发送方SOUT=0时环路电流为零,接收方光耦合器截止,SIN=0。

显然,当要求双工方式通信时,双方都应各有收发电路,通信联线至少要4根。

由于通信双方利用光耦合器实现电气上隔离,而且信号又是双端回路方式,故有很强的抗干扰性,可以传送远至1千米的距离。

图3-320mA电流环接口

“0”、“1”信号的表示方法不同外,其他方面(如字符的传输格式)常借用RS—232C标准。

因此PC/XT微机中的异步串行信道接口往往将这两种标准做在一起,实际通过跨接线从二者中择一使用。

ARM自带三个UART端口,每个UART通道都有16字节的FIFO(先入先出寄存器)用于接受和发送。

用系统时钟最大波特率可达230.4K,如果用外部时钟(UCLK)UART可以以更高的波特率运行。

S3C2410XUART包括可编程波特率,红外发送/接收,插入一个或两个停止位,5字节,6字节,7字节,或8字节数据宽度和奇偶校验。

其特点是:

-----基于DMA或者中断操作的RxD0,TxD0,RxD1,TxD1,RxD2,TxD2。

-----包括IrDA1.0和16字节FIFO的UART通道0,1,2。

-----包括nRTS0,nCTS0,nRTS1和nCTS1的UART通道。

-----支持握手方式的接收/发送

与UART有关的寄存器主要有以下几个:

(1)UART线控制寄存器包括ULCON0,ULCON1和ULCON2,主要用来选择每帧数据位数、停止位数,奇偶校验模式及是否使用红外模式,如表3-1,3-2所示。

表3-1UART寄存器设置

Register

Address

R/W

Description

Reset

Value

ULCON0

0x50000000

R/W

UARTchannel0linecontrolregister

0x00

ULCON1

0x50004000

R/W

UARTchannel1linecontrolregister

0x00

ULCON2

0x50008000

R/W

UARTchannel2linecontrolregister

0x00

表3-2UART寄存器位描述

ULCONn

Bit

Description

Initial

State

Reserved

[7]

0

Infra-Red

Mode

[6]

DeterminewhetherornottousetheInfra-Redmode.0=

Normalmodeoperation1=Infra-RedTx/Rxmode

0

ParityMode

[5:

3]

Specifythetypeofparitygenerationandcheckingduring

UARTtransmitandreceiveoperation.0xx=Noparity100

=Oddparity101=Evenparity110=Parityforced/checked

as1111=Parityforced/checkedas0

000

Numberof

StopBit

[2]

Specifyhowmanystopbitsaretobeusedforend-of-frame

signal.0=Onestopbitperframe1=Twostopbitperframe

0

WordLength

[1:

0]

Indicatethenumberofdatabitstobetransmittedor

receivedperframe.00=5-bits01=6-bits10=7-bits11

=8-bits

00

(2)UART控制寄存器包括UCON0,UCON1andUCON2,主要用来选择时钟,接收和发送中断类型(即电平还是脉冲触发类型),接收超时使能,接收错误状态中断使能,回环模式,发送接收模式等。

如表3-3,3-4所示

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1