嵌入式系统原理与接口技术实验指导书.docx

上传人:b****6 文档编号:15574552 上传时间:2023-07-05 格式:DOCX 页数:63 大小:2.05MB
下载 相关 举报
嵌入式系统原理与接口技术实验指导书.docx_第1页
第1页 / 共63页
嵌入式系统原理与接口技术实验指导书.docx_第2页
第2页 / 共63页
嵌入式系统原理与接口技术实验指导书.docx_第3页
第3页 / 共63页
嵌入式系统原理与接口技术实验指导书.docx_第4页
第4页 / 共63页
嵌入式系统原理与接口技术实验指导书.docx_第5页
第5页 / 共63页
嵌入式系统原理与接口技术实验指导书.docx_第6页
第6页 / 共63页
嵌入式系统原理与接口技术实验指导书.docx_第7页
第7页 / 共63页
嵌入式系统原理与接口技术实验指导书.docx_第8页
第8页 / 共63页
嵌入式系统原理与接口技术实验指导书.docx_第9页
第9页 / 共63页
嵌入式系统原理与接口技术实验指导书.docx_第10页
第10页 / 共63页
嵌入式系统原理与接口技术实验指导书.docx_第11页
第11页 / 共63页
嵌入式系统原理与接口技术实验指导书.docx_第12页
第12页 / 共63页
嵌入式系统原理与接口技术实验指导书.docx_第13页
第13页 / 共63页
嵌入式系统原理与接口技术实验指导书.docx_第14页
第14页 / 共63页
嵌入式系统原理与接口技术实验指导书.docx_第15页
第15页 / 共63页
嵌入式系统原理与接口技术实验指导书.docx_第16页
第16页 / 共63页
嵌入式系统原理与接口技术实验指导书.docx_第17页
第17页 / 共63页
嵌入式系统原理与接口技术实验指导书.docx_第18页
第18页 / 共63页
嵌入式系统原理与接口技术实验指导书.docx_第19页
第19页 / 共63页
嵌入式系统原理与接口技术实验指导书.docx_第20页
第20页 / 共63页
亲,该文档总共63页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

嵌入式系统原理与接口技术实验指导书.docx

《嵌入式系统原理与接口技术实验指导书.docx》由会员分享,可在线阅读,更多相关《嵌入式系统原理与接口技术实验指导书.docx(63页珍藏版)》请在冰点文库上搜索。

嵌入式系统原理与接口技术实验指导书.docx

嵌入式系统原理与接口技术实验指导书

 

嵌入式系统原理与接口技术实验指导书

 

曲强编

 

辽宁科技大学电信学院

ASKDQQ@

目录

实验一利用跳转表实现程序分支1

实验二块数据传输程序设计6

实验三C语言优化实验8

实验四按键与LED显示原理11

实验五LCD显示实验19

附录一ADS开发环境设置过程33

实验一利用跳转表实现程序分支

一、实验目的:

1、熟悉ADS1.2开发环境,掌握基本的调试方法;

2、熟悉ARM9汇编语言的程序设计方法;

3、熟悉ARM9的基本语法。

二、实验内容

利用跳转表实现具有下述功能的汇编程序:

(1)当r0为1时,调用子程序CASE1,完成r1加r2把结果放入r3的计算;

(2)当r0为2时,调用子程序CASE2,完成r1减r2把结果放入r3的计算;

(3)当r0为3时,调用子程序CASE3,完成r1与r2把结果放入r3的计算;

(4)否则,完成r1或r2把结果放入r3的计算。

三、实验步骤:

安装完ADS1.2后在其安装目录下存在如下两个文件,即CodewarriorforARMDeveloperSuit和AXDDebugger,这两个文件分别是代码编辑文件和调试文件,在实验中我们主要使用这两个文件。

1、运行ARMDeveloperSuitev1.2中的CodewarriorforARMDeveloperSuit文件,如图1所示。

图1Codewarrior界面

2、选择File-New将打开新建文件窗口,如图2所示。

选择Project标签新建一个ARM可执行的映像文件(ARMExecutableImage),并填入适当的项目名(Projectname)及选择合适的存放项目的目录(Location),最后点击确定。

也可以通过工具栏中的

按钮实现上述功能。

此时,将打开项目管理窗口如图3所示。

图2New窗口

3、新建一个*.s文件用于存放我们的实验程序,其建立步骤如下。

点File-New将打开新建文件窗口,在新打开的窗口中选择Flie标签,输入文件名。

也可以通过工具栏中的

按钮实现上述功能。

值得注意的是由于在这里我们使用汇编语言编制程序因此文件扩展名一定要存为*.s。

4、输入所设的汇编语言并保存,注意扩展名必须为*.s。

在输入设计文件时需要注意以下几点:

(1)标号必须顶格书写,而指令、伪指令和指示符前必须至少空一格空格,为了使程序格式清晰,通常使用Tab键;

(2)指令、伪指令和指示符大小写均可;

(3)注释为英文状态下的“;”。

图3调试窗口

5、接下来开始调试所设计的文件,调试文件主要在项目窗口中进行,项目窗口如图3所示。

(1)添加文件到项目。

将鼠标指在项目窗口的空白处,点击右键,选择AddFlie…将设计文件添加到项目中。

(2)指定调试环境。

选择DebugRelSettings打开调试环境设置窗口,在这里可以进行相应的设置,我们只需将LanguageSettings中的ARMAssembler中的Target选为ARM920T即可(系统默认为ARM7TDMI,若只为了实现软件仿真,也可以不改变微处理器,因为ARM920T与ARM7TDMI均使用同一套ARM指令集)。

(3)汇编文件。

点击Make按钮(参见图3)汇编我们设计的文件,并修正错误。

当没有错误时就可以进行调试了。

(4)调试文件。

在这里我们使用ADS1.2中的AXDDebugger进行程序调试,可以通过选择Debug按钮(参见图3)调用AXDDebugger,其界面如图4所示(若AXD未能打开所调试的程序,可以选择AXDDebugger中的Options|Target配置处理器)。

图4AXDDebugger窗口

6、用户可以在AXDDebugger中调试你的程序,其主要菜单的含义如下:

(1)用户可以通过ProcessorViews和SystemViews打开各种观察窗口,具体含义如表1所示。

表1视图菜单含义

名称

含义

Registers

观察ARM中的寄存器

Watch

观察一个表达式的值

Variables

观察变量值

Backtrace

观察函数调用情况

Memory

观察存储器的使用情况

LowLevelSymbols

观察标号的地址

CommsChannel

打开通信通路

Console

打开控制台

Disassembly

反汇编

Source

查看源文件

(2)用户可以通过Execute打开各种调试工具,调试工具的具体含义如表2所示。

表2执行菜单含义

名称

含义

Go

连续运行

StepIn

单步运行(跟踪进入函数)

Step

单步运行(不跟踪进入函数)

StepOut

单步运行(从函数中返回)

RunToCursor

运行到光标

ShowExecutionContext

显示可执行的程序

ToggleBreakpoint

触发断点

DeleteAllBreakpoints

删除断点

7、打开观察寄存器窗口,并用单步运行方式观察程序的运行状况。

若想重新装入该程序,可以选择File中的ReloadCurrentImage重新装载。

8、熟悉其它调试功能。

四、报告要求

在实验报告中要求包括实验目的、调试步骤、实验的源程序并加注释,以及实验中遇到的问题和解决情况。

五、参考程序清单

;利用跳转表实现具有下述功能的程序

;ifr0==1thenCALLCASE1(r3=r1+r2)

;elseifr0==2thenCALLCASE2(r3=r1-r2)

;elseifr0==3thenCALLCASE3(r3=r1&r2)

;elseDEFAULT(r3=r1|r2)

;

AREAJumpTest,CODE,READONLY;定义代码段

CODE32;设置为arm指令集

ENTRY;程序入口

start

MOVr0,#1;初始化程序中使用的寄存器

MOVr1,#3

MOVr2,#2

ADRr4,JumpTable;将跳转表地址送给r4

CMPr0,#1;ifr0==1thenCALLCASE1

MOVEQr3,#0

LDREQpc,[r4,r3,LSL#2]

CMPr0,#2;ifr0==2thenCALLCASE2

MOVEQr3,#1

LDREQpc,[r4,r3,LSL#2]

CMPr0,#3;ifr0==3thenCALLCASE3

MOVEQr3,#2

LDREQpc,[r4,r3,LSL#2]

DEFAULT;otherwiseCALLDEFSULT

ORRr0,r1,r2

SWITCHEND

MOVr0,#0x18;调用软中断返回操作系统

LDRr1,=0x20026

SWI0x123456

JumpTable;定义跳转表

DCDCASE1

DCDCASE2

DCDCASE3

CASE1;子程序1

ADDr3,r1,r2

BSWITCHEND

CASE2;子程序2

SUBr3,r1,r2

BSWITCHEND

CASE3;子程序3

ANDr3,r1,r2

BSWITCHEND

END

实验二块数据传输程序设计

一、实验目的

1、熟悉ADS1.2的操作环境;

2、熟悉汇编语言的编程与调试;

3、熟悉多数据传输指令和单数据传输指令。

二、实验内容:

利用汇编语言编程实现具有如下功能的程序:

将由src单元开始的20个字,转存到由dst开始的单元中。

要求:

当传输的数据大于8时,采用多数据传输指令一次传递8个数据;对于不足8个单元的数据数据采用单字节传送指令进行传输。

三、实验步骤

1、编制实现上述功能的汇编语言程序;

2、运行ADS1.2完成调试工作。

注意在调试过程中可能用到如下的功能:

利用AXDDebugger调试软件的ProcessorViews菜单中的LowLevelSymbols可以查看所有标号的地址;Registers项可以查看ARM内部寄存器的内容;Memory项可以查看存储器中的数据;使用F10可以单步运行程序。

四、实验报告要求

在实验报告中要求包括实验目的、调试步骤、实验的源程序并加中文注释,以及实验中遇到的问题和解决情况,回答思考题。

五、思考题

1、你是如何利用汇编语言求取一个数被8整除后的商和余数的?

2、指令中的软中断的作用是什么?

3、每个数据在存储器中占用几个字节,低位在前还是高位在前。

4、你是如何获得源数据和目标数据地址的?

六、附加题

思考如何改动上面的程序实现将数据按反序存储,即如果源数据为1、2、3、4、…20将其存为20、19、18、…、1。

七、参考程序清单:

AREABlock,CODE,READONLY;namethisblockofcode

numEQU20;Setnumberofwordstobecopied

ENTRY;markthefirstinstructiontocall

start

LDRr0,=src;r0=pointertosourceblock

LDRr1,=dst;r1=pointertodestinationblock

MOVr2,#num;r2=numberofwordstocopy

MOVsp,#0x400;setupstackpointer(r13)

blockcopy

MOVSr3,r2,LSR#3;numberofeightwordmultiples

BEQcopywords;lessthaneightwordstomove?

STMFDsp!

{r4-r11};savesomeworkingregisters

octcopy

LDMIAr0!

{r4-r11};load8wordsfromthesource

STMIAr1!

{r4-r11};andputthematthedestination

SUBSr3,r3,#1;decrementthecounter

BNEoctcopy;...copymore

LDMFDsp!

{r4-r11};don'tneedthesenow-restoreoriginals

copywords

ANDSr2,r2,#7;numberofoddwordstocopy

BEQstop;Nowordslefttocopy?

wordcopy

LDRr3,[r0],#4;awordfromthesource

STRr3,[r1],#4;storeawordtothedestination

SUBSr2,r2,#1;decrementthecounter

BNEwordcopy;...copymore

stop

MOVr0,#0x18;angel_SWIreason_ReportException

LDRr1,=0x20026;ADP_Stopped_ApplicationExit

SWI0x123456;ARMsemihostingSWI

 

AREABlockData,DATA,READWRITE

srcDCD1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20

dstDCD0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

END

 

实验三C语言优化实验

一、实验目的

1、熟悉ADS1.2的调试环境;

2、熟悉C语言的编程、调试方法;

3、熟悉ADS1.2编译C语言的特点,了解一定的C优化编程的知识。

二、实验内容与步骤

(一)了解ADS1.2是如何处理C语言中char类型

Char表示无符号8位整型数据,ADS的C编译器是如何保证汇编后的寄存器具有该特性呢?

现在通过下面的实验来研究该问题。

1、运行ADS1.2并输入以下的C程序,注意保存文件的扩展名必须为*.c。

intmain(void)

{

chari;

intsum=0;

intdata[4];

data[0]=1;

data[1]=2;

data[2]=3;

data[3]=4;

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

{

sum=sum+data[i];

}

returnsum;

}

2、汇编上述C程序,修改错误,并使用AXDDebugger调试。

具体调试过程为:

(1)点连续运行

或按F5使程序完成相应的初始化,进入C的main函数;

(2)打开ProcessorViews菜单中的Variables视图,并按单步运行,可以从Variables视图中了解C中变量的使用情况。

(3)查看上述C语言的反汇编程序,研读该程序并回答以下问题

、在ADS1.2中所使用的堆栈是什么类型的?

、在ADS1.2中如何保证数据类型为无符号8位整型的?

、上述程序中将数组保存在哪里?

、入栈指令stmfdr13!

{r0-r3,r14}的入栈顺序是什么?

3、参考反汇编程序清单

main[0xe92d400f]*stmfdr13!

{r0-r3,r14};按照满递减方式将r14、r3-r0入栈

000080ac[0xe3a00000]movr0,#0;sum=0;

000080b0[0xe3a01001]movr1,#1;数组初始化

000080b4[0xe58d1000]strr1,[r13,#0];r13数组起始地址

000080b8[0xe3a01002]movr1,#2

000080bc[0xe58d1004]strr1,[r13,#4]

000080c0[0xe3a01003]movr1,#3

000080c4[0xe58d1008]strr1,[r13,#8]

000080c8[0xe3a01004]movr1,#4

000080cc[0xe58d100c]strr1,[r13,#0xc]

000080d0[0xe3a01000]movr1,#0;i=0

000080d4[0xe3510004]cmpr1,#4;comparei,4

000080d8[0x2a000004]bcs0x80f0;(main+0x48);ifi>4goto80f0

000080dc[0xe79d2101]ldrr2,[r13,r1,lsl#2]:

r2=data[i]

000080e0[0xe0820000]addr0,r2,r0;sum=sum+data[i]

000080e4[0xe2811001]addr1,r1,#1;i++

000080e8[0xe20110ff]andr1,r1,#0xff;将i转化为char类型

000080ec[0xeafffff8]b0x80d4;(main+0x2c)

000080f0[0xe28dd010]addr13,r13,#0x10

000080f4[0xe49df004]ldrpc,[r13],#4;return

(二)熟悉ADS1.2处理short数据类型的方法

1、运行ADS1.2并输入如下的C程序,注意扩展名一定为*.c。

shortchecksum_v2(short*data)

{

unsignedinti;

shortsum=0;

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

{

sum=(short)(sum+data[i]);

}

returnsum;

}

 

2、汇编上述源程序,修正错误。

在项目窗口中选中所设计的C程序,然后选择Project菜单下的Desassemble查看该程序的汇编代码,阅读程序并回答如下问题。

(1)请为获得的反汇编语言加上注释。

(2)在ADS中如何实现短整型数据类型的?

(3)在ADS中是如何读取短整型数据的?

(4)在ADS中LDRH不支持位移地址偏移,那它是如何实现地址指针移动的?

(5)若子程序中的中间变量无特殊要求,是选择为短整型还是选择为整型好,为什么?

3、参考反汇编程序

0x00000000MOVr2,r0;r2=data

0x00000004MOVr0,#0;sum=0(短整型16bit)

0x00000008MOVr1,#0;i=0

0x0000000cADDr3,r2,r1,LSL#1;r3=&

0x00000010LDRHr3,[r3,#0];r3=data[i]

0x00000014ADDr0,r3,r0;sum=sum+data[i]

0x00000018MOVr0,r0,LSL#16;转换r0为短整型

0x0000001cMOVr0,r0,ASR#16

0x00000020ADDr1,r1,#1;i++

0x00000024CMPr1,#0x40;comparei,64

0x00000028BCC0xc;if(i<64)goto0xc

0x0000002c.MOVpc,r14;returnsum

三、实验报告要求

在实验报告中要求包括实验目的、调试步骤、实验的源程序并加中文注释,以及实验中遇到的问题和解决情况,回答思考题。

四、思考题

如何修改第二个实验程序使其效率更高些?

五、参考修改

shortchecksum_v2(short*data)

{

unsignedinti;

intsum=0;

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

{

sum=sum+*(data++);

}

return(short)sum;

}

实验四按键与LED显示原理

一、实验目的

1、掌握S3C2440通用I/O端口寄存器的配置。

2、熟悉S3C2440程序下载及NANDFLASH启动过程。

3、熟悉2440初始化过程。

二、实验设备

TQ2440开发板、PC机、USB下载线。

三、实验内容

1、编程实现对按键的扫描和LED灯的控制。

要求当有键按下时读取该键值,并点亮相应的LED灯(两课时)。

2、阅读S3C2440初始化2440init.s程序,了解嵌入式系统的初始化过程,明白ARM启动的初始化过程(两课时)。

四、实验原理

图1按键及显示电路原理

 

实验中所使用的电路如图1所示。

共有四个按键分别与CPUI/O口的GPBF0、GPBF1、GPBF2、GPBF4相连。

在GPFCON寄存器中设置相应管脚为输入,管脚经上拉电阻接3.3V电源,当没有键按下时,通过GPFDAT读入的数据为高电平。

当按键按下时,按键对应的管脚被拉低,GPFDAT相应位被置0。

检测GPFDAT即可知道哪个按键被按下。

四个发光二极管LED1、LED2、LED3、LED4经限流电阻R01、R02、R03、R04与CPUI/O口的GPB5、GPB6、GPB7、GPB8相连。

当GPB口输出低电平时,相应的发光二极管就会发光。

当GPB口输出高电平时,相应的发光二极管就会熄灭,通过设置高低电平则可以让LED发光二极管亮灭。

实验中使用到的相应寄存器如表1-表4所示。

表1端口B各寄存器(GPBCON,GPBDAT和GPBUP)地址及功能

寄存器

地址

属性

描述

复位时的值

GPBCON

0x56000010

R/W

ConfigurethepinsofportB

0x0

GPBDAT

0x56000014

R/W

ThedataregisterforportB

Undefined

GPBUP

0x56000018

R/W

Pull-updisableregisterforportB

0x0

Reserved

0x5600001C

Reserved

Undefined

表2端口B控制寄存器各位含义

GPBCON

描述

GPB10

[21:

20]

00=Input10=nXDREQ0

01=Output11=reserved

GPB9

[19:

18]

00=Input10=nXDACK0

01=Output11=reserved

GPB8

[17:

16]

00=Input10=nXDREQ1

01=Output11=Reserved

GPB7

[15:

14]

00=Input10=nXDACK1

01=Output11=Reserved

GPB6

[13:

12]

00=Input10=nXBREQ

01=Output11=reserved

GPB5

[11:

10]

00=Input10=nXBACK

01=Output11=reserved

GPB4

[9:

8]

00=Input10=TCLK0

01=Output11=reserved

GPB3

[7:

6]

00=Input10=TOUT3

01=Output11=reserved

GPB2

[5:

4]

00=Input10=TOUT2

01=Output11=reserved]

GPB1

[3:

2]

00=Input10=TOUT1

01=Output11=reserved

GPB0

[1:

0]

00=Input10=TOUT0

01=Output11=reserved

表3端口F各寄存器(GPFCON,GPFDAT和GPFUP)地址及功能

寄存器

地址

属性

描述

复位时的值

GPFCON

0x56000050

R/W

ConfigurethepinsofportF

0

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

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2