《嵌入式裸机实验报告》由会员分享,可在线阅读,更多相关《嵌入式裸机实验报告(10页珍藏版)》请在金锄头文库上搜索。
1、综合实验嵌入裸机实报告班级:通信10-2姓名:杨冬丽学号:1006030224指导教师:林森杨春玲成 绩:电子与信息工程学院信息与通信工程系一、实验目的1. 了解ARM汇编语言的基本框架,学会使用ARM的汇编语言编程。2. 了解ARM C语言的基本框架,学会使用ARM的C语言编程。3. 掌握ARM9的中断原理,能够对S3C2410的中断资源及其相关中断寄存器的进行合 理配置。4. 掌握对S3C2410的中断的编程的方法。二、实验原理实验二 基于ARM的汇编语言程序设计ARM汇编语言程序的基本结构:在ARM汇编语言程序中,是以程序段为单位来组织代码。段是相对独立的指令或数 据序列,具有特定的名称
2、。段可以分为代码段的和数据段,代码段的内容为执行代码,数 据段存放代码运行时所需的数据。一个汇编程序至少应该有一个代码段,当程序较长时, 可以分割为多个代码段和数据段,多个段在程序编译链接时最终形成一个可执行文件。可 执行映像文件通常由以下几部分构成: 一个或多个代码段,代码段为只读属性。零个或多个包含初始化数据的数据段,数据段的属性为可读写。零个或多个不包含初始化数据的数据段,数据段的属性为可读写。链接器根据系统默认或用户设定的规则,将各个段安排在存储器中的相应位置。源程 序中段之间相邻关系与执行的映象文件中的段之间的相邻关系不一定相同。实验三 基于ARM的C语言程序设计ARM C语言程序的
3、基本规则:在ARM程序的开发中,需要大量读写硬件寄存器,并且尽量缩短程序的执行时间的代 码一般使用汇编语言来编写,比如ARM的启动代码,ARM的操作系统的移植代码等,除 此之外,绝大多数代码可以使用C语言来完成。C语言使用的是标准的C语言,ARM的开发环境实际上就是嵌入了一个C语言的集 成开发环境,只不过这个开发环境和ARM的硬件紧密相关。在使用C语言时,要用到和 汇编语言的混合编程。当汇编代码较为简洁,则可使用直接内嵌汇编的方法,否则,使用 将汇编文件以文件的形式加入项目当中,通过ATPCS的规定与C程序相互调用与访问。ATPCS,就是 ARM、Thumb 的过程调用标准(ARM/Thumb
4、 Procedure Call Standard), 它规定了一些子程序间调用的基本规则。如寄存器的使用规则,堆栈的使用规则,参数的 传递规则等。在C程序和ARM的汇编程序之间相互调用必须遵守ATPCS。而使用ADS的C语言 编译器编译的C语言子程序满足用户指定的ATPCS的规则。但是,对于汇编语言来说, 完全要依赖用户保证各个子程序遵循ATPCS的规则。具体来说,汇编语言的子程序应满 足下面3个条件:在子程序编写时,必须遵守相应的ATPCS规则;堆栈的使用要遵守相应的ATPCS规则;在汇编编译器中使用-atpcs选项。实验五 ARM的中断实验ARM的中断原理在ARM中,有两类中断,一类是IR
5、Q,一类是FIQ,IRQ是普通中断,FIQ是快速中 断,在进行大批量的复制、数据转移等工作时,常使用此类中断OFIQ的优先级高于IRQ。 同时,它们都属于ARM的异常模式,当一旦有中断发生,不管是外部中断,还是内部中 断,正在执行的程序都会停下,PC指针进而跳入异常向量的地址处,若是IRQ中断,则 PC指针跳到0x18处,若是FIQ中断,则跳到OxlC处。异常向量地址处,一般存有中断 服务子程序的地址,所以,接下来PC指针跳入中断服务子程序中。当完成中断服务子程 序后,PC指针会返回到被打断的程序的下一条地址处,继续执行程序。这就是ARM中断 操作的基本原理。但是,通常由于生产ARM处理器的各
6、厂家都集成了很多中断请求源, 比如,串口中断、AD中断、外部中断、定时器中断、DMA中断等等,所以,很多中断可 能同时请求中断,因此,为区分它们,更准确的完成任务,这些中断都有相应的优先级别, 以及当发生中断时,它们都有相应的中断标志位,通过在发生中断是判断中断优先级,和 访问中断标志位的状态来识别到底哪一个中断发生了。三、仪器设备1、实验二:1. EL-ARM-830+教学实验箱,Pentiumll以上的PC机,仿真调试电缆,串口直连电缆;2. PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真调试驱 动程序。2、实验三:1. EL-ARM-830+教学实验箱
7、,Pentiumll以上的PC机,仿真调试电缆,串口直连电缆;2. PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真调试驱动 程序。3、实验五:1. EL-ARM-830+教学实验箱,Pentiumll以上的PC机,仿真调试电缆;2. PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真调试驱动 程序。1、实验二1. 本实验仅使用实验教学系统的CPU板,串口。在进行本实验时,LCD电源开关、 音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。2. 在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿
8、真调试电缆,以及串 口间连接公/母接头串口线。3. 打开超级终端,配置串口的属性(如COM1),配置波特率为115200,校验位无, 数据位为8,停止位为1,数据控制流为无;检查连接是否可靠,可靠后,接入电源线, 系统上电,同时按住“空格”键,进入VIVI状态。4. 打开ADS1.2开发环境,从里面打开实验程序HARDWAREADS实验二asm.mcp 项目文件,进行编译。5 .编译通过后,进入 ADS1.2调试界面,加载实验程序HARDWAREADS实验二 asm_DataDebug中的映象文件程序映像asm.axf。6.在ADS调试环境下全速运行映象文件。2、实验三1. 本实验仅使用实验教
9、学系统的CPU板,串口。在进行本实验时,LCD电源开关、 音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。2. 在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆,以及串 口间连接公/母接头串口线。3. 打开超级终端,配置串口的属性(如C0M1),配置波特率为115200,校验位无, 数据位为8停止位为1,数据控制流为无;检查连接是否可靠,可靠后,接入电源线, 系统上电,同时按住“空格”键,进入VIVI状态。4. 打开ADS1.2开发环境,从里面打开实验程序HARDWAREADS实验三C.mcp项 目文件,进行编译。5 .编译通过后,进入 ADS1
10、.2调试界面,加载实验程序HARDWAREADS实验三 C_DataDebug中的映象文件程序映像C.axf。6.在ADS调试环境下全速运行映象文件,之后,关闭超级终端,打开/实验软件/tools/ 目录下的串口调试助手工具,配置为波特率为115200,校验位无,数据位为8,停止位为 1。3、实验五1. 本实验仅使用实验教学系统的核心CPU板。在进行本实验时,LCD电源开关,音 频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。2. 在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆以及串口 间连接公/母接头串口线。3. 打开超级终端,配置串口的属性(
11、如COM1),配置波特率为115200,校验位无, 数据位为8,停止位为1,数据控制流为无;检查连接是否可靠,可靠后,接入电源线, 系统上电,同时按住“空格”键,进入VIVI状态。4 .打开ADS1.2开发环境,从里面打开实验程序HARDWAREADS实验六 Interrupt.mcp项目文件,进行编译。5 .编译通过后,进入 ADS1.2调试界面,加载实验程序HARDWAREADS实验六 Interrupt_DataDebug 中的映象文件程序映像 Interrupt.axf。6.在ADS调试环境下全速运行映象文件。观察LED1和LED2的变化! LED1和LED2 灯会由于定时中断的1秒钟
12、发生一次,而一秒钟闪烁一次!也可以改变闪烁的频率,即改 变 Startup2410target.c 文件内的 void Timer1_init(void)函数里的 rTCNTB1 = 48828;的赋值, 数字量越小,闪烁频率越快。编译全速运行,观看结果,看闪烁频率是否发生了改变!这 是对GPIO 口操作的结果。五、实验源代码1、实验二1、一个寄存器的每个位有其不同的意义,进行不同的设置会使硬件产生不同的效果和 功能;2、有些情况下需要对一个寄存器进行连续的不同的甚至完全相反的设置;3、有些情况下需要对一个寄存器中的某一位或一位进行连续的不同的甚至完全相反的 设置,而其余的位要保持不变;4、有
13、时,对一个寄存器进行设置时,对其不同的位进行先后顺序不同的设置,即对其 各个位有先后设置的顺序的要求,使硬件产生的结果也不同;5、有时,对于一个寄存器要求必须一次赋值,若对其某些位赋值先后顺序不同,便达 不到预期的效果和功能。寄存器的赋值操作方法为说明方便,定义如下3个8位的寄存器:#define REG 0xFFFFFF101、对单个的位进行赋值(1)将寄存器REG的第5位置T”REG 1= (1 5);(2) 将寄存器REG的第5位清零REG &=(1 5);(3) 将寄存器REG的第3、5位置T”REG 1= (1 5) I (1 3);(4) 将寄存器REG的第3、5位清零REG &=
14、 ( (1 5) I (1 3);2、直接赋值(1)将寄存器REG的0、1、2、3、5、7位置T”REG = 0x5F;(即给寄存器REG1赋值为1010 1111,这种方法多在初始化中用)(2)分别将寄存器REG的1、3、5、7位置T”,0、2位置“0” uint32 temp; tmep = REG; temp &= 0x01; temp |= (1 1); temp &=(1 2); temp I= (1 3); temp I= (1 5); temp I= (1 7);REG = temp;2、实验三#include .incconfig.hunsigned char data;unsigned char name;void Main(void)Target_Init();/target.c 中定义Delay(10);data = 0x19;name = wangpei;while(1)Uart_Printf(%xDelay(10);Uart_Printf(%xDelay(10);3、实验五/主程序/!嵌入包括硬件的头文件/定义全局变量定义全局变量目标板初始化,定义串口的硬件初始化在/延时给全局变量赋值给全局变量赋值!,data); 串口 0输出学号延时,name); /串口 0输出姓名void Main(void)