ARM实验指导书Word格式.docx
《ARM实验指导书Word格式.docx》由会员分享,可在线阅读,更多相关《ARM实验指导书Word格式.docx(37页珍藏版)》请在冰豆网上搜索。
5.认真写实验报告,按规定格式对实验结果分析。
字迹要清楚,结论要明确。
爱护实验设备,遵守实验室纪律。
目录
第一章嵌入式系统实验3
实验一ADS1.2开发环境创建3
实验二基于ARM的汇编语言程序设计5
实验三基于ARM的C语言程序设计简介7
实验四ARM的I/O接口实验9
实验五ARM的中断实验11
实验六ARM的UART实验14
实验七LCD的显示实验16
实验八Linux的实验环境的搭建18
实验九linux的移植、内核、文件系统的生成与下载21
实验十基于linux的跑马灯应用程序的编写29
第二章EL-ARM-挂箱型实验系统的资源介绍31
第一节ARM实验箱硬件资源概述31
第二节实验系统的硬件资源总览32
第三节核心板的资源介绍33
第一章嵌入式系统实验
实验一ADS1.2开发环境创建
一.实验目的
熟悉ADS1.2开发环境,正确使用仿真调试电缆进行编译、下载、调试。
二.实验内容
学习ADS1.2开发环境
三.实验设备
1.EL-ARM挂箱教学实验箱,PentiumII以上的PC机,仿真调试电缆。
2.PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真调试电缆驱动程序
四.实验步骤
1.ADS1.2下建立工程
(1)运行ADS1.2集成开发环境(CodeWarriorforARMDeveloperSuite),点击File|New,在New对话框中,选择Project栏,其中共有7项,ARMExecutableImage是ARM的通用模板。
选中它即可生成ARM的执行文件。
还要在,Projectname栏中输入项目的名称,以及在Location中输入其存放的位置。
按确定保存项目。
(2)在新建的工程中,选择Debug版本,使用Edit|DebugSettings菜单对Debug版本进行参数设置。
(3)在,点击DebugSetting按钮,选中TargetSetting项,在Post-linker栏中选中ARMfromELF项。
按OK确定。
这是为生成可执行的代码的初始开关。
(4)点击ARMAssembler,在ArchitectureorProcesser栏中选ARM920T。
(5)点击ARMCCompliler,在ArchitectureorProcesser栏中选ARM920T。
这是要编译的CPU核。
(6)点击ARMlinker,在outpur栏中设定程序的代码段地址,以及数据使用的地址。
图中的ROBase栏中填写程序代码存放的起始地址,RWBase栏中填写程序数据存放的起始地址。
该地址是属于SDRAM的地址。
在options栏中,Imageentrypoint要填写程序代码的入口地址,其他保持不变,如果是在SDRAM中运行,则可在0x30000000—0x33ffffff中选值,这是64MSDRAM的地址,但是这里用的是起始地址,所以必须把你的程序空间给留出来,并且还要留出足够的程序使用的数据空间,而且还必须是4字节对齐的地址(ARM状态)。
通常入口点Imageentrypoint为0x30000000,ro_base也为0x30000000。
在Layout栏中,在Placeatbeginningofimage框内,需要填写项目的入口程序的目标文件名,如,整个工程项目的入口程序是2410init.s,那么应在Object/Symbol处填写其目标文件名2410init.o,在Section处填写程序入口的起始段标号。
它的作用是通知编译器,整个项目的开始运行,是从该段开始的。
(7)在DebugSetting对话框中点击左栏的ARMfromELF项,在Outputfilename栏中设置输出文件名*.bin,前缀名可以自己取,在Outputformat栏中选择Plainbinary,这是设置要下载到flash中的二进制文件,使用的是test.bin.
(8)到此,在ADS1.2中的基本设置已经完成,可以将该新建的空的项目文件作为模板保存起来。
首先,要将该项目工程文件改一个合适的名字,如S3C2410ARM.mcp等,然后,在ADS1.2软件安装的目录下的Stationary目录下新建一个合适的模板目录名,如,S3C2410ARMExecutableImage,再将刚刚设置完的S3c2410ARM.mcp项目文件存放到该目录下即可。
这样,就能看到该模板。
2.ADS1.2下仿真、调试
在ADS1.2下进行仿真调试,
(1)需要一根仿真调试电缆。
在连上调试电缆后,给实验箱上电。
(2)打开超级终端,设置其参数为:
波特率为115200,数据位数8,奇偶校验无,停止位无1,数据流控无。
(3)打开H-JTAG软件。
(4)打开调试软件AXDDebugger。
点击File|loadimage加载文件ADS.axf(\实验程序\HARDWARE\ADS\实验一\ADS\ADS_data目录下)。
(5)点击全速运行,在超级终端观察结果。
3.利用自己创建的模板,重新进行编译调试,验证模板创建的正确性。
利用模板新建项目工程,把ADS目录下的文件添加到新建项目工程中,重新进行编译下
载调试,观察实验结果。
五.思考题及实验报告要求
1.思考题
(1)修改程序,使显示文字变为“上海电机学院ARM嵌入式系统教学中心欢迎你”。
2.实验报告要求
(1)写出程序分析、修改的过程。
(2)总结实验过程中模板创立、程序下载、调试过程中所遇到的问题和解决方法,写出编程调试的经验和体会。
实验二基于ARM的汇编语言程序设计
1.了解ARM汇编语言的基本框架,学会使用ARM的汇编语言编程
1.用汇编语言编写一个简单的应用程序
1.EL-ARM挂箱教学实验箱,PentiumII以上的PC机,仿真调试电缆,串口电缆。
2.PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真调试驱动程序
四.汇编语言简介
1.ARM汇编的一些简要的书写规范
ARM汇编中,所有标号必须在一行的顶格书写,其后面不要添加“:
”,而所有指令均不能顶格书写。
ARM汇编对标识符的大小写敏感,书写标号及指令时字母大小写要一致。
在ARM汇编中,ARM指令、伪指令、寄存器名等可以全部大写或者全部小写,但不要大小写混合使用。
注释使用“;
”号,注释的内容由“;
”号起到此行结束,注释可以在一行的顶格书写。
详细的汇编语句及规范请参照ARM汇编的相关书籍、文档,也可参照我们提供的文档。
2.ARM汇编语言程序的基本结构
在ARM汇编语言程序中,是以程序段为单位来组织代码。
段是相对独立的指令或数据序列,具有特定的名称。
段可以分为代码段的和数据段,代码段的内容为执行代码,数据段存放代码运行时所需的数据。
一个汇编程序至少应该有一个代码段,当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译链接时最终形成一个可执行文件。
可执行映像文件通常由以下几部分构成:
◆一个或多个代码段,代码段为只读属性。
◆零个或多个包含初始化数据的数据段,数据段的属性为可读写。
◆零个或多个不包含初始化数据的数据段,数据段的属性为可读写。
链接器根据系统默认或用户设定的规则,将各个段安排在存储器中的相应位置。
源程序中段之间的相邻关系与执行的映象文件中的段之间的相邻关系不一定相同。
五.实验步骤
1.本实验仅使用实验教学系统的CPU板,串口。
在进行本实验时,LCD电源开关、音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。
2.在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆,以及串口间连接公/母接头串口线。
3.检查连接是否可靠,可靠后,接入电源线,系统上电。
4.打开ADS1.2开发环境,从里面打开\实验程序\HARDWARE\ADS\实验二\asm.mcp项目文件,进行编译。
5.编译通过后,进入ADS1.2调试界面,加载\实验程序\HARDWARE\ADS\实验二\asm_Data\Debug中的映象文件程序映像asm.axf。
6.打开超级终端,配置波特率为115200,校验位无,数据位为8,停止位为1。
之后,在ADS调试环境下全速运行映象文件,观察结果。
六.思考题及实验报告要求
(1)修改程序,使显示字符及其长度改变。
(1)写出程序分析、修改的过程
(2)总结实验过程程序编译、程序下载、调试过程中所遇到的问题和解决方法,写出实验过程的经验和体会。
实验三基于ARM的C语言程序设计简介
一.实验目的
1.了解ARMC语言的基本框架,学会使用ARM的C语言编程
二.实验内容
1.用C语言编写一个简单的应用程序
三.实验设备
1.EL-ARM-830教学实验箱,PentiumII以上的PC机,仿真调试电缆,串口电缆。
2.PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真调试驱动程序
四.ARMC语言简介与使用规则
1.ARMC语言程序的基本规则
在ARM程序的开发中,需要大量读写硬件寄存器,并且尽量缩短程序的执行时间的代码一般使用汇编语言来编写,比如ARM的启动代码,ARM的操作系统的移植代码等,除此之外,绝大多数代码可以使用C语言来完成。
C语言使用的是标准的C语言,ARM的开发环境实际上就是嵌入了一个C语言的集成开发环境,只不过这个开发环境和ARM的硬件紧密相关。
在使用C语言时,要用到和汇编语言的混合编程。
当汇编代码较为简洁,则可使用直接内嵌汇编的方法,否则,使用将汇编文件以文件的形式加入项目当中,通过ATPCS的规定与C程序相互调用与访问。
ATPCS,就是ARM、Thumb的过程调用标准(ARM/ThumbProcedureCallStandard),它规定了一些子程序间调用的基本规则。
如寄存器的使用规则,堆栈的使用规则,参数的传递规则等。
在C程序和ARM的汇编程序之间相互调用必须遵守ATPCS。
而使用ADS的C语言编译器编译的C语言子程序满足用户指定的ATPCS的规则。
但是,对于汇编语言来说,完全要依赖用户保证各个子程序遵循ATPCS的规则。
具体来说,汇编语言的子程序应满足下面3个条件:
●在子程序编写时,必须遵守相应的ATPCS规则;
●堆栈的使用要遵守相应的ATPCS规则;
●在汇编编译器中使用-atpcs选项。
汇编程序调用C程序
汇编程序的设置要遵循ATPCS规则,保证程序调用时参数正确传递。
在汇编程序中使用IMPORT伪指令声明将要调用的C程序函数。
在调用C程序时,要正确设置入口参数,然后使用BL调用。
C程序调用汇编程序
在汇编程序中使用EXPORT伪指令声明本子程序,使其他程序可以调用此子程序。
在C语言中使用extern关键字声明外部函数(声明要调用的汇编子程序)。
在C语言的环境内开发应用程序,一般需要一个汇编的启动程序,从汇编的启动程序,跳到C语言下的主程序,然后,执行C程序,在C环境下读写硬件的寄存器,一般是通过宏调用,在每个项目文件的Startup2410/INC目录下都有一个2410addr.h的头文件,那里面定义了所有关于2410的硬件寄存器的宏,对宏的读写,就能操作2410的硬件。
具体的编程规则同标准C语言。
1.本实验仅使用实验教学系统的CPU板,串口。
4.打开ADS1.2开发环境,从里面打开\实验程序\HARDWARE\ADS\实验三\C.mcp项目文件,进行编译。
5.编译通过后,进入ADS1.2调试界面,加载\实验程序\HARDWARE\ADS\实验三\C_Data\Debug中的映象文件程序映像C.axf。
6.打开/实验软件/tools/目录下的串口调试助手工具,配置为波特率为115200,校验位无,数据位为8,停止位为1。
之后,在ADS调试环境下全速运行映象文件。
(1)修改程序,使连续发送的数据变为56。
实验四ARM的I/O接口实验
1.了解S3C2410的通用I/O接口
2.掌握I/0功能的复用并熟练的配置,进行编程实验
1.在实验箱的CPU板上点亮LED灯LED1、LED2,并轮流闪烁!
1.EL-ARM挂箱教学实验箱,PentiumII以上的PC机,仿真调试电缆。
2.PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真调试驱动程序。
四.实验原理
S3C2410CPU共有117个多功能复用输入输出口,分为8组端口:
◆4个16位的I/O端口(PORTC、PORTD、PORTE、PORTG)
◆2个11位的I/O端口(PORTB和PORTH)
◆1个8位的I/O端口(PORTF)
◆1个23位的I/O端口(PORTA)
这些通用的GPI/O接口,是可配置的,PORTA除功能口外,它们仅用作输出使用,剩下的PORTB、PORTC、PORTD、PORTE、PORTF、PORTG均可作为输入输出口使用。
配置这些端口,是通过一些寄存器来实现的,这些寄存器均有各自的地址,位长32位。
往该地址中写入相应的数据,即可实现功能及数据配置。
1.本实验使用实验教学系统的CPU板,在进行本实验时,LCD电源开关、音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。
2.在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆。
4.打开ADS1.2开发环境,从里面打开\实验程序\HARDWARE\ADS\实验三\IO.mcp项目文件,进行编译。
5.编译通过后,进入ADS1.2调试界面,加载实验程序\HARDWARE\ADS\实验五\IO_Data\Debug中的映象文件程序映像IO.axf。
6.在ADS调试环境下全速运行映象文件。
观察CPU板左下角的LED1、LED2灯轮流的的闪烁。
(1)修改程序,LED1、LED2灯轮流的的闪烁改为:
先同时点亮维持一段时间后,再轮流闪烁,然后再同时熄灭,再同时点亮依次循环。
实验五ARM的中断实验
1.掌握ARM9的中断原理,能够对S3C2410的中断资源及其相关中断寄存器的进行合理配置
2.掌握对S3C2410的中断的编程的方法
1.学习响应外部中断请求的配置方法,并通过响应定时器中断,执行中断服务子程序使CPU板上的LED指示灯LED1、LED2闪烁。
1.EL-ARM-830教学实验箱,PentiumII以上的PC机,仿真调试电缆。
PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真调试驱动程序。
四.ARM的中断原理
在ARM中,有两类中断,一类是IRQ,一类是FIQ,IRQ是普通中断,FIQ是快速中断,在进行大批量的复制、数据转移等工作时,常使用此类中断。
FIQ的优先级高于IRQ。
同时,它们都属于ARM的异常模式,当一旦有中断发生,不管是外部中断,还是内部中断,正在执行的程序都会停下,PC指针进而跳入异常向量的地址处,若是IRQ中断,则PC指针跳到0x18处,若是FIQ中断,则跳到0x1C处。
异常向量地址处,一般存有中断服务子程序的地址,所以,接下来PC指针跳入中断服务子程序中。
当完成中断服务子程序后,PC指针会返回到被打断的程序的下一条地址处,继续执行程序。
这就是ARM中断操作的基本原理。
但是,通常由于生产ARM处理器的各厂家都集成了很多中断请求源,比如,串口中断、AD中断、外部中断、定时器中断、DMA中断等等,所以,很多中断可能同时请求中断,因此,为区分它们,更准确的完成任务,这些中断都有相应的优先级别,以及当发生中断时,它们都有相应的中断标志位,通过在发生中断是判断中断优先级,和访问中断标志位的状态来识别到底哪一个中断发生了。
五.中断编程实例
在ADS1.2的开发环境下,打开HARDWARE/ADS/实验六目录下的Interrupt.mcp项目,在Application/SRC/Main.c中可以看到,主程序中,在进行目标板初始化后,程序进入死循环,等待中断!
在Startup2410/src/target.C文件中包括对要使用的中断控制器的初始化程序,CPU响应了该中断后的中断服务子程序。
该项目的程序流程是,按下程序启动后,初始化定时器1,设定定时器的中断时间,然后,等待定时器中断,当定时器中断到来时,就会进入定时器中断服务子程序,而中断服务子程序会把LED1和LED2灯熄灭或点亮,从现象中看到LED1和LED2灯忽闪一次,则说明定时器发生了一次中断。
最后,关闭中断请求,等待下一次的中断的到来。
为使CPU响应中断,在中断服务子程序执行之前,必须打开ARM920T的CPSR中的I位,以及相应的中断屏蔽寄存器中的位。
打开相应的中断屏蔽寄存器中的位,是在target.C中的voidTimer1INT_Init(void)函数中,在做了这些准备后,就可以等待中断的到来了。
voidTimer1INT_Init(void)
{//定时器接口使能
if((rINTPND&
BIT_TIMER1)){
rSRCPND|=BIT_TIMER1;
}
pISR_TIMER1=(int)Timer1_ISR;
rINTMSK&
=~(BIT_TIMER1);
//开中断;
}
TIMER1INT_Init()函数已在Target_Init()中调用。
详见/实验程序/HARDWARE/ADS/实验六目录下的Interrupt.mcp源代码注释。
六.实验步骤
1.本实验仅使用实验教学系统的核心CPU板。
在进行本实验时,LCD电源开关,音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。
4.打开ADS1.2开发环境,从里面打开\实验程序\HARDWARE\ADS\实验五\Interrupt.mcp项目文件,进行编译。
5.编译通过后,进入ADS1.2调试界面,加载\实验程序\HARDWARE\ADS\实验五\Interrupt_Data\Debug中的映象文件程序映像Interrupt.axf。
观察LED1和LED2的变化。
七.思考题及实验报告要求
(1)修改程序,重新调试,改变LED1、LED2灯闪烁的频率。
实验六ARM的UART实验
1.了解并熟悉UART的概念及其工作原理;
2.掌握ARM相应的寄存器配置;
3.能够用C编写出相应的串口程序;
1.在实验箱的CPU板上运行程序,在超级终端上回显发送的数据!
四.实验的原理
实验原理:
把键盘敲击的字符通过PC机的串口发送给实验箱上的ARM的CPU板的串口0,ARM的CPU板上的串口得到字符后,通过ARM把它送给CPU板上的串口0输出给PC,以及通过底板上的串口1,送给PC机。
这样,就完成了串口间的收发数据。
五.实验步骤
1.本实验使用实验教学系统的CPU板,串口。
使用串口线连接PC机串口1和实验箱CPU板的串口,使用直连线连接底板串口2和PC机上的串口2之间的电缆。
4.打开ADS1.2开发环境,从里面打开\实验程序\HARDWARE\ADS\实验六\uart.mcp项目文件,进行编译。
5.编译通过后,进入ADS1.2调试界面,加载实验程序\HARDWARE\ADS\实验六\UART_Data\Debug中的映象文件程序映像UART.axf。
6.打开超级终端0,超级终端1,进行设置(115200,8位数据,1位停止位,无奇偶校验);
7.在ADS调试环境下,全速运行映象文件。
激活超级终端0,敲键盘,观察超级终端0,超级终端1的内容显示,所敲键盘的字符应该在两个超级