嵌入式系统原理与接口技术实验指导书.docx
- 文档编号:27851206
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:63
- 大小:2.05MB
嵌入式系统原理与接口技术实验指导书.docx
《嵌入式系统原理与接口技术实验指导书.docx》由会员分享,可在线阅读,更多相关《嵌入式系统原理与接口技术实验指导书.docx(63页珍藏版)》请在冰豆网上搜索。
嵌入式系统原理与接口技术实验指导书
嵌入式系统原理与接口技术实验指导书
曲强编
辽宁科技大学电信学院
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 原理 接口 技术 实验 指导书