《ARM原理及应用》实验指导书.docx
- 文档编号:13963786
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:40
- 大小:2.43MB
《ARM原理及应用》实验指导书.docx
《《ARM原理及应用》实验指导书.docx》由会员分享,可在线阅读,更多相关《《ARM原理及应用》实验指导书.docx(40页珍藏版)》请在冰点文库上搜索。
《ARM原理及应用》实验指导书
ARM原理及应用
实验指导书
目录
实验一熟悉ADS1.2开发环境及教学实验箱1
实验二ARM汇编语言程序设计11
实验三ARM汇编与C语言混合编程13
实验四ARM中断控制16
实验五ARM串口通信19
实验六ARMLCD控制27
实验一熟悉ADS1.2开发环境及教学实验箱(4学时)
一、实验目的
1.熟悉ADS1.2开发环境,正确进行编译、下载、调试。
2.了解ARM9的结构特点
3.了解VIVI引导程序常用命令的使用方法
4.理解NANDFLASH的用途与分区方法
5.掌握用VIVI下载ARM程序方法
二、实验仪器设备及软件
1.ARM9教学实验箱,PentiumII以上的PC机
2.PC操作系统WINXP,ADS1.2集成开发环境
三、实验原理
1.ARM实验箱基本结构
S3C2410核心板资源介绍
vNANDFLASH64MBK9F5608U,8位总线
v占用地址空间0x00000000–0x01ffffff将OM[1:
0]设置成00b(NandBOOT)
v同步动态存储器HY57V561620,8MB32位总线,占用地址空间0x30000000–0x33ffffff(BANK6,7)
v电源转换5V转成3.3V,5V转成1.8V
v网卡芯片AX88796LF
vUSB(主/从接口)
v串口芯片MAX3232(电源电压3.3V)
vJ-TAG接口
vLED灯(两个,接在GPIOG)
实验箱其它电路
vSD卡接口电路
v键盘鼠标电路
v16键键盘电路
v扩展接口(8位,32位)
v外部温度传感器
vCPLD主板各芯片地址译码电路
v扩展从USB电路
vLED指示灯(8个,低电平亮)
v信号扩展电路(IDE接口)
2.VIVI引导程序
VIVI是韩国mizi公司开发的bootloader,适用于ARM9处理器。
VIVI有两种工作模式:
启动加载模式和下载模式。
启动加载模式可以在一段时间后(这个时间可更改)自行启动linux内核,这时vivi的默认模式。
在下载模式下,vivi为用户提供一个命令行接口,通过接口可以使用vivi提供的一些命令。
(1)help显示vivi引导程序的命令信息
(2)Part操作MTD分区信息。
显示、增加、删除、复位、保存MTD分区
partshow显示分区信息
partaddpartnamepart_start_addrpart_leng0添加分区
partdelpartname删除分区
partsave保存part分区信息
(3)Load把二进制文件载入Flash或RAM
loadflashpartnamex使用xmodom协议通过串口下载文件并且烧写到partname分区
loadrampartnameoraddrx使用xmodom协议通过串口下载文件到内存中
(4)param操作vivi参数命令。
显示、增加、删除、复位、保存参数。
paramshow显示配置信息
paramsetparamnamevalue设置参数值
paramsetlinux_cmd_line“linuxbootparam”设置linux启动参数
paramsave保存参数的设置
(5)bon操作NANDFLASH分区命令
(6)boot引导linux操作系统命令
(7)ucos引导ucOS操作系统或其它应用程序命令
(8)其它命令见附录
3.NANDFLASH的用途与分区
NANDFLASH用来存储引导程序,操作系统,应用程序,数据等。
通过ARM9开发都有一片NANDFLASH存储器。
本实验箱的NANDFLASH存储器容量是32MB。
首先我们来理解一下三种分区:
BON分区,part分区,MTD分区
BON分区:
VIVI程序基本分区,把NANDFLASH在物理上分区多个区域,供引导程序与操作系统使用。
一般来说,每个分区的功能都不同。
part分区:
VIVI引导程序用的逻辑分区,烧写程序的时候用来确定烧写地址的。
MTD分区:
Linux操作系统下的NANDFLASH分区,是逻辑分区。
Linux操作系统启动后,part分区也就没有意义了,操作系统会读取BON分区的信息。
嵌入式系统NANDFLASH的BON分区一般来说明要分为不少于3个,第一个用来存VIVI引导程序,第2个用于存储Linux操作系统内核程序,第3个用来存Linux操作系统的文件系统。
为了更好的进行uCOS实验和Linux实验,应把NANDFLASH分为5个区。
各分区安排如下:
VIVI0---192KB(用于存引导程序VIVI,VIVI用到的参数)
kernel192KB----2M+192K(用于存Linux内核,2.6版内核编译后很容易大于1M)
rootcramfs2M+192K--20M(用于存文件系统,约18M,只读)
rootyaffs20M-31M(用于存储yaffs文件系统,可读写)
ucos231M-32M-16K(用于存储uCOS程序或无操作系统程序)
分区命令如下:
BONPART0192K2240K20M31M
分区后应立即下载VIVI程序,不能断电。
重新引导VIVI后,用part进行逻辑分区。
对应的part分区命令:
首先删除已有的part分区kernel,root,可以用partshow命令查看分区。
删除分区命令:
partdelroot删除root分区
建立分区命令:
partaddrootcramfs0x2300000x11d0000BONFS
这一命令是建立一个名为rootcramfs的分区,分区起始地址是0x230000,分区
大小是0x11d0000,约18MB,分区参数BONFS
partaddrootyaffs0x14000000x0b00000BONFS
partadducos20x1f000000x0fa000BONFS
四、实验内容
1.学习使用ADS1.2开发环境
2.ARM9教学实验箱的基本操作
①VIVI命令基本操作
(1)使用VIVI命令查看CPU的类型,实验箱硬件相关参数。
(2)查看NANDFLASH分区信息,并记录各区在NANDFLASH的起始地址。
(3)查看MTD分区信息,并记录各分区的名称,容量,起始地址等。
(4)通过串口下载程序到SDRAM中,并正确运行程序。
LOADRAM0X300380000X100000X
说明:
从串口中,用Xmodern协议下载程序到SDRAM中,程序的大小小于1MB(0x100000),程序下载到SDRAM的地址是0x30038000。
这个地址应该与编译软件设置的运行地址相同。
运行程序方法:
go0x30038000
②NANDFLASH分区
用VIVI引导程序相关命令可以给NANDFLASH分区,并指定每个分区的用途。
③下载应用程序,并运用
通过串口下载程序到NANDFLASH中,并运行程序。
LOADFLASHucos2x
说明:
从串口中,用Xmodern协议下载程序到NANDFLASH中的ucos2分区,程序的大小不指定,系统自动计算。
运行程序方法:
ucos
五、实验步骤
1.ADS1.2开发环境实验步骤:
(1)ADS1.2下建立工程
①运行ADS1.2集成开发环境(CodeWarriorforARMDeveloperSuite),点击File|New,在New对话框中,选择Project栏,其中共有7项,ARMExecutableImage是ARM的通用模板。
选中它即可生成ARM的执行文件。
同时,如图2-1-1
图2-1-1
还要在,Projectname栏中输入项目的名称,以及在Location中输入其存放的位置。
按确定保存项目。
②在新建的工程中,选择Debug版本,如图2-1-2,使用Edit|DebugSettings菜单对Debug版本进行参数设置。
图2-1-2
③在如图2-1-3中,点击DebugSetting按钮,弹出2-1-4图,选中TargetSetting
图2-1-3
图2-1-4
项,在Post-linker栏中选中ARMfromELF项。
按OK确定。
这是为生成可执行的代码的初始开关。
④在如图2-1-5中,点击ARMAssembler,在ArchitectureorProcesser
图2-1-5
栏中选ARM920T。
这是要编译的CPU核。
⑤在如图2-1-6中,点击ARMCCompliler,在ArchitectureorProcesser栏中选ARM920T。
这是要编译的CPU核。
图2-1-6
⑥在如图2-1-7中,点击ARMlinker,在outpur栏中设定程序的代码段地址,以及数据使用的地址。
图中的ROBase栏中填写程序代码存放的起始地址,RWBase栏中填写程序数据存放的起始地址。
该地址是属于SDRAM的地址。
图2-1-7
图2-1-8
在options栏中,如图2-1-8,Imageentrypoint要填写程序代码的入口地址,其他保持不变,如果是在SDRAM中运行,则可在0x30000000—0x33ffffff中选值,这是64MSDRAM的地址,但是这里用的是起始地址,所以必须把你的程序空间给留出来,并且还要留出足够的程序使用的数据空间,而且还必须是4字节对齐的地址(ARM状态)。
通常入口点Imageentrypoint为0x30000000,ro_base也为0x30000000。
在Layout栏中,如图2-1-9,在Placeatbeginningofimage框内,需要填写项目的入口程序的目标文件名,如,整个工程项目的入口程序是2410init.s,那么应在Object/Symbol处填写其目标文件名2410init.o,在Section处填写程序入口的起始段标号。
它的作用是通知编译器,整个项目的开始运行,是从该段开始的。
图2-1-9
⑦在如图2-1-10中,即在DebugSetting对话框中点击左栏的ARMfromELF项,在Outputfilename栏中设置输出文件名*.bin,前缀名可以自己取,在Outputformat栏中选择Plainbinary,这是设置要下载到flash中的二进制文件。
图2-1-10中使用的是test.bin.
图2-1-10
⑧到此,在ADS1.2中的基本设置已经完成,可以将该新建的空的项目文件作为模板保存起来。
首先,要将该项目工程文件改一个合适的名字,如S3C2410ARM.mcp等,然后,在ADS1.2软件安装的目录下的Stationary目录下新建一个合适的模板目录名,如,S3C2410ARMExecutableImage,再将刚刚设置完的S3c2410ARM.mcp项目文件存放到该目录下即可。
这样,就能在图2-1-10中看到该模板。
⑨新建项目工程后,就可以执行菜单Project|AddFiles把和工程所有相关的文件加入,ADS1.2不能自动进行文件分类,用户必须通过Project|CreateGroup来创建文件夹,然后把加入的文件选中,移入文件夹。
或者鼠标放在文件填加区,右键点击,即出!
如图2-1-11
图2-1-11
先选AddFiles,加入文件,再选CreateGroup,创建文件夹,然后把文件移入文件夹内。
读者可根据自己习惯,更改Edit|Preference窗口内关于文本编辑的颜色、字体大小,形状,变量、函数的颜色等等设置。
如图2-1-12。
图2-1-12
(2)ADS1.2下仿真、调试
在ADS1.2下进行仿真调试,首先需要一根仿真调试电缆。
其驱动程序的安装和使用在光盘中的\实验软件\ARM9_RDI中,里面有相关的文档。
在连上调试电缆后,给实验箱上电,
打开调试软件AXDDebugger。
点击File|loadimage加载文件ADS.axf(\实验程序\HARDWARE\ADS\实验一\ADS\ADS_data目录下)。
打开超级终端,设置其参数为:
波特率为115200,数据位数8,奇偶校验无,停止位无1,数据流控无。
点击全速运行,出现图2-1-13的界面:
图2-1-13
在最后介绍调试按钮,
上图,左起第一个是全速运行,第二个是停止运行,第三个跳入函数内部,第四个单步执行,第五个跳出函数。
2.ARM9教学实验箱的基本操作实验步骤:
1连接实验箱与计算机的串口线,打开计算机超级终端,并设定为com1,115200,8,1,0N
2连接仿真调试电缆(并口JTAG)
3实验箱上电,并在vivi的指示下,按任意键,进入调试程序状态
4打开超级终端软件,并进行相应的设置。
5按内容要求测试VIVI程序各命令功能,并记录调试过程和数据。
6下载编译好的ARM程序例子,并记录实验现象。
7调试完毕,整理实验箱,并放回原位。
六、实验思考题
实验二ARM汇编语言程序设计(2学时)
实验目的
1、了解ARM汇编语言程序的结构特点
2、了解ARM汇编语言程序的编写方法
3、掌握用ARM汇编语言设计简单程序
实验仪器设备及软件
ARM实验箱,计算机,ADS程序开发软件
实验原理
1、存储空间的格式
ARM920将存储空间视为从0开始由字节组成的线性集合,字节0-3中保存了第一个字,字节4-7中保存了第二个字,依此类推。
字节还可以按小端格式或大端格式排列。
ARM实验箱中存储器的配置见附录C。
2、ARM的寄存器
ARM状态下任何时刻都可以看到16个通过寄存器(r0-r15),1或2个状态寄存器(CPSR,SPSR),在特权模式下会切换到具体模下的寄存器组。
每个寄存器都是32位的,并且每个通用寄存器都可以作为数据处理的源数据或目标数据寄存器。
因此可以编写出更精简的程序。
3、ARM指令的条件执行
状态寄存器中的N,Z,C,V是数据处理指令影响的标志。
几乎每条ARM指令可以根据状态位或状态位的逻辑运算有条件执行。
条件执行的指令后缀参考教材。
4、桶形移器
ARM的桶形移位器,使ARM指令的中第二个操作数非常录活。
利用移位器,一条ARM指令可以完成更多功能。
移位操作有:
LSL逻辑左移LSR逻辑右移
ASL算术左移ASR算术右移
ROR循环右移RRX带扩展循环右称
实验内容
1、把内存中ramaddr开始的ramword个字清零
(1)用后变址法
ramaddrequ0x31000000
ramwordequ64
clrram
movr0,#0
movr1,#ramword
ldrr2,=ramaddr
clrram1
strr0,[r2],#4
subsr1,r1,#1
bneclrram1
movpc,lr
LTORG
(2)用前变址法
clrrambak
movr0,#0
movr1,#ramword
ldrr2,=ramaddr-4
clrram2
strr0,[r2,#4]!
subsr1,r1,#1
bneclrram2
movpc,lr
LTORG
2、把寄存器中,r0-r12的32位无符号32位数进行求和,和的低32位保存在r1中,高32位保存在r0中。
add13b
addsr1,r0,r1
movr0,#0
adcr0,r0,#0
addsr1,r1,r2
adcr0,r0,#0
addsr1,r1,r3
adcr0,r0,#0
。
。
。
。
。
。
movpc,lr
以上程序在主程序完成初始化后调后。
打开寄存器,内存窗口等,观察程序执行前后的变化,及执行过程中的一些状态,并记录。
实验步骤
1、连接实验箱与计算机的串口线,打开超级终端,并设定为com1,115200,8,N,1,N
2、连接仿真调试电缆(并口JTAG)
3、实验箱上电,并在vivi的指示下,按任意键,进入调试程序状态
4、打开ARM集成开发环境ADS,按要求编写或打开实验程序。
5、按内容要求编写,调试程序,并记录调试过程和数据。
6、调试完毕,整理实验箱,并切断实验箱电源。
实验思考题
1、在子程序调用时,子程序的下一条语句的地址保存在哪里?
2、编写程序计算r0-r12中16位二进制无符号数的和,每个寄存器中保存两个16位二进制无符号数。
实验三ARM汇编与C语言混合编程(4学时)
一、实验目的
1、了解ARMC语言程序的特点
2、了解ARMC语言外部IO口地址的定义与使用方法
3、掌握用ARMC语言设计简单程序
二、实验仪器设备及软件
ARM实验箱,计算机,ADS程序开发软件
三、实验原理
1、开发ARM系统,使用C语言编程是大势所趋
在应用系统的程序设计中,若所有的编程任务均由汇编语言来完成,其工作量的巨大的,并且不易移植。
由于ARM的程序执行速度较高,存储器的存储速度和存储量也很高,因此,C语言的特点充分发挥,使得应用程序的开发时间大为缩短,代码移植十分方便,程序的重复使用率高,程序架构清晰易懂,管理较为容易等等。
因此,C语言在ARM系统开发中具有重要的地位。
2、ARMC语言的基本规则
在ARM的程序开发中,需要大量读写硬件寄存器,并且尽量缩短程序的执行时间的代码一般是用汇编语言来编写的,比如ARM的启动代码,ARM操作系统的移植代码等,除此之外,绝大多数可以使用C语言来完成。
ARM的开发环境是一个嵌入式集成开发环境,只不过这个开发环境和ARM的硬件紧密相关。
在使用C语言时,要用到和汇编语言的混合编程。
当汇编代码较为简洁,则可使用直接内嵌汇编的方法,否则,使用将汇编程序以文件的形式加入项目中,通过ATPCS的规定与C程序相互调用与访问。
ATPCS规定,请参阅ARM相关文档资料
满足ATPCS规定的汇编程序应满足下面3个条件:
在子程序编写中,必须遵守相应的ATPCS规则(函数的参数引用与返回)
堆栈的使用要遵守相应的ATPCS规则
在汇编编译器中使用–atpcs选项
汇编程序调用C程序
(1)汇编程序的设置要遵守ATPCS规则,保证程序调用时参数正确传递
(2)在汇编程序中使用IMPORT伪指令声明将要调用的C程序函数
(3)在调用C程序时,要正确设置入口参数,然后使用BL调用
C程序调用汇编程序
(1)汇编程序的设置要遵守ATPCS规则,保证程序调用时参数正确传递
(2)在汇编程序中使用EXPORT伪指令声明本子程序,使其他程序可以调用此程序
(3)在C程序中使用extern关键字声明外部函数(声明要调用的汇编子程序)。
在C语言环境内开发应用程序,一般要一个汇编的启运程序,从汇编的启动程序,跳到C语言下的主程序,然后执行C程序,在C环境下读写硬件寄存器,一般是通过宏调用进行,在每个项目文件的Startup2410/INC目录下都有一个2410addr.h的头文件,那里定义了所有关于2410的硬件寄存器的宏,对宏的读写就能操作2410的硬件。
其它请参阅《嵌入式C语言程序设计》
四、实验内容
1、用ARMC语言编写程序,控制GPIO的G口的两个LED灯,使其交替点亮。
实验电路如图所示。
通过控制GPG8,GPG9的高低电平就可以控制LED的亮暗。
rGPGDAT=rGPGDAT&0xcff|0x200;//0ch=1100b,D2亮,D1暗
rGPGDAT=rGPGDAT&0xcff|0x100;//0ch=1100b,D2暗,D1亮
实验程序如下:
voidledflash(void)
{
inti;
rGPGDAT=rGPGDAT&0xcff|0x200;
for(i=0;i<10000000;i++);//延时
rGPGDAT=rGPGDAT&0xcff|0x100;
for(i=0;i<10000000;i++);//延时
rGPGDAT=rGPGDAT&0xcff|0x300;//两个LED都暗
}
该程序每运行一次两个发光二极管各亮一次,重复执行,就可以看到LED闪烁的情况。
主程序(函数)的开始处必须设置GPG口的工作状态。
voidMain(void){
Target_Init();
rGPGCON=rGPGCON&0xfff0ffff|0x00050000;
for(;;){ledflash();}
}
2、用ARMC语言编写程序,编写一个流水灯程序。
实验箱中8个LED灯的内存映射地址是0x20000000。
产生流水灯效果,只要按顺序逐个点亮LED即可。
实验电路如图所示。
从图上可知,往这个地址写0,就可以点亮相应的二极管。
实验程序如下:
#defineoutled(*(volatileunsigned*)0x20000000)
#defineinputkey(*(volatileunsigned*)0x20000016)
voidledstep(void)
{
unsignedshortinti,j;
intk;
j=1;
for(i=8;i>0;i--)
{
j=j*2;//左移一位
outled=~j;//取反输出(只有一位亮)
for(k=0;k<10000000;k++);//延时
}
outled=255;//把所有的发光二极管全部熄灭
}
重复执这个程序,就可以产生流水灯效果。
五、实验步骤
1、连接实验箱与计算机的串口线,打开计算机超级终端,并设定为com1,115200,8,1,0N
2、连接仿真调试电缆(并口JTAG)。
3、实验箱上电,并在vivi的指示下,按任意键,进入调试程序状态。
4、打开ARM集成开发环境ADS,按要求编写或打开实验程序。
5、按内容要求编写,调试程序,并记录调试过程和数据。
6、调试完毕,整理实验箱,并切断实验箱电源。
六、实验思考题
1、设计一个程序,根据输入数字点亮相应个数的LED二极管。
如:
输入2,点亮2个发光二极管。
实验四ARM中断控制(2学时)
一、实验目的
1、了解S3C2410中断控制器的结构特点
2、理解S3C2410中断控制器的工作原理
3、掌握用S3C2410中断控制器的程序设计
二、实验仪器设备及软件
ARM实验箱,计算机,ADS程序开发软件
三、实验原理
1、中断控制器
在ARM中,有两类中断,一类是IRQ,一类是FIQ,IRQ是普通中断,FIQ是快速中断,在进行大批量的复制、数据转移等工作时,常使用此类中断。
FIQ的优先级高于IRQ。
同时,它们都属于ARM的异常模式,当一旦有中断发生,不管是外部中断,还是内
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM原理及应用 ARM 原理 应用 实验 指导书