您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 《嵌入式电子系统设计》课程实验指导书实验1最小系统实验,(2014711)
实验一最小系统实验一、实验目的熟悉最小系统的硬件构成,掌握复位电路、晶振电路、电源电路(尤其是滤波电容的应用),编写一个例程,并在最小系统上运行;了解嵌入式开发的基本思想和过程。掌握最小系统的构成,在将来的项目运用中能根据不同的场合选择相应的复位电路。二、实验原理本实验通过一个简短的Boot引导程序介绍ARM开发平台的启动过程,同时该引导程序也可其他章节程序引导的示例程序。本程序主要为了让读者能够清晰理解启动程序的基本架构组成部分以及掌握ARM引导程序的编写方法。三、主要实验设备1.硬件:宿主机、ARM教学试验箱;2.软件:Windows操作系统、ADS1.2集成开发环境。四、实验内容构建最小系统,用示波器观察一下晶振电路的波形,测一下晶振正常工作时的电压。编写一个例程,编译并运行。设置ARM仿真器的开发环境。程序架构如下:1.程序头IMPORTMDCNFG;声明MDCNFG(读写寄存器)物理地址0x48000000IMPORTMDREFR;声明MDREFR(刷新寄存器)0x48000004IMPORTMDMRS;声明MDMRS(模式/设置寄存器0x48000040IMPORTinit_MDCNFG;声明init_MDCNFG0x02000ac9IMPORTinit_MDREFR;声明init_MDREFR0x0011e018IMPORTinit_MDMRS;声明init_MDMRS0x320032IMPORTStackSvc;声明StackSvc0xa0600000IMPORTStackIrq;声明StackIrq0xa0605000IMPORTStackFiq;声明StackFiq0xa060a000IMPORTStackAbt;声明StackAbt0xa060e000IMPORTStackUnd;声明StackUnd0xa0714000IMPORTStackUsr;声明StackUsr0xa0720000IMPORTmainIMPORT宏通知编译器本源码文件需要引用在其他文件中定义的变量或函数。2.程序入口AREAboot,CODE,READONLYENTRY;初始化入口点BReset_Handler该代码段定义了boot程序所在的段(CODE)、属性(READONLY)等属性;图1.1程序链接配置ENTRY宏表示程序的入口,一个程序可设置有多个入口,可通过工程配置设置程序执行入口函数(如图1-1),在引导程序中,boot代码段程序初始化入口点。由于AREA和ENTRY都是伪操作,不分配成实质的指令,所以,BReset_Handler为程序执行第一条指令。3.设置中断向量表表1-1ARM中断向量表地址异常类型进入时的模式进入时I的状态进入时F的状态0x00000000复位管理禁止禁止0x00000004未定义指令未定义IF0x00000008软件中断管理禁止F0x0000000C中止(预取)中止IF0x00000010中止(数据)中止IF0x00000014保留保留——0x00000018IRQ中断禁止F0x0000001CFIQ快中断禁止禁止每当一个中断发生后,ARM处理器便强制把程序计数器(PC)指针置为向量表中对应中断类型所对应的地址值。由于ARM微处理器每个中断向量中只有4个字节的大小,所以通常在中断向量位置存放1条跳转指令或存放1条直接对程序计数器(PC)寄存器赋值的指令,使程序能跳转到相应的异常中断处理程序中执行。如果中断处理程序所在的物理地址小于32MB,可使用B跳转指令;当跳转范围大于32MB时,需使用LDR指令。对于程序中未使用的中断,可使中断异常跳转到一个只含返回指令的哑函数或跳转到自身标号地址处,以防止中断异常引起系统的混乱。如:Undefined_HandlerBUndefined_Handler下面代码为ARM微处理器中断向量表的初始化过程。BReset_Handler;跳转复位0x0000,0000复位管理模式BUndefined_Handler;跳转未定义指令0x0000,0004未定义指令未定义模式BSWI_Handler;跳转软件中断0x0000,0008软件中断管理模式BPrefetch_Handler;跳转预取指令0x0000,000C预取指令中止模式BDataAbort_Handler;跳转数据异常数据异常中止模式NOP;延时保留BIRQ_Handler;跳转IRQ(中断请求)0x0000,0018IRQIRQBFIQ_Handler;跳转FIQ(快速中断请求)0x0000,001CFIQFIQ从表1-1分析可知NOP一定不能去掉,必须要保证中断向量表正确建立。4.程序初始化部分;*************************;CheckifrunintheSDRAM;*************************MOVR0,PCCMPR0,#0x00000040BNESetStackBLInitMem;如果相等的话,则跳转到初始化内存代码段InitMemSetStack;定义设置堆栈标签BLInitStack;设置初始化堆栈BLInitGPIO;初始化GPIOBmain;跳转到C语言main.c主应用程序CMPR0,#0x00000040语句判断程序是否从0x0开始运行。ARM处理器上电首先从地址0开始执行,然后跳转到复位中断,0x00000038为Reset_Handle标号地址所在的位置(图1.2,程序地址映射表),0x00000040为0x00000038+8后的地址。图1.2程序地址映射表5.汇编程序详解GPIO初始化过程:PXA270微处理器的GPIO引脚具有为多功能复用,需要在使用之前,需要对具体的GPIO引脚进行编程配置,从图1.3可知,要控制一个GPIO口,需要对GPIO方向寄存器(GPDR)、功能寄存器GAFR、电平设置寄存器GPSR/GPCR)等GPIO控制寄存器进行编程配置。图1.3PXA270GPIO功能示意图GPIO初始化代码段:;**************************************;InitGPIO;**************************************ALIGNInitGPIOLDRR1,=0x40e00000MOVR0,#0x10000STRR0,[R1,#0x20]LDRR0,=0xa0000000STRR0,[R1,#0x64]LDRR0,=0x01c000STRR0,[R1,#0x14]LDRR0,=0x402STRR0,[R1,#0x68]MOVPC,LRGPIO初始化代码段完成对GPIO的输入/输出、复用、电平等功能进行配置,一般情况,需要根据具体平台的GPIO的实际功能进行编程设置。LDRR1,=0x40e00000MOVR0,#0x10000;GPIO64-95statusOutput-HighSTRR0,[R1,#0x20]该代码实现将GPIO80口设置为高电平输出(图1.4GPSR2控制寄存器位定义)。图1.4GPSR2控制寄存器位定义LDRR0,=0xa0000000STRR0,[R1,#0x64]上面两条语句通过对GPIO功能转换控制寄存器进行设置,将GPIO78、GPIO79口的功能配置成转换输出功能2,即GPIO78、GPIO79分别设置为nCS2,nCS3片选功能。图1.5、GAFR2_L控制寄存器位定义;图1.6为GPIO78、GPIO79为转换功能表;图1.7为GPDR2控制寄存器位定义。图1.5GAFR2_L控制寄存器位定义图1.6GPIO78、GPIO79为转换功能表图1.7GPDR2控制寄存器位定义LDRR0,=0x01c000STRR0,[R1,#0x14]该代码实现将将GPIO78、GPIO79、GPIO80口的配置成输出端口。LDRR0,=0x402STRR0,[R1,#0x68]该代码完成将GPIO80口的功能设置成nCS4,将GPIO85口的功能设置成FFRXD。图1.8为GAFR2_U控制寄存器位定义,图1.9为GPIO80、GPIO85为转换功能表。图18GAFR2_U控制寄存器位定义图1.9GPIO80、GPIO85转换功能表存储控制器初始化过程:对于EELiodPxa270教学实验平台,SDRAM初始化的工作是通过配置存储控制器寄存器来完成,这些寄存器包括主要包括SDRAM配置寄存器(MDCNFG),SDRAM刷新控制寄存器(MDREFR),SDRAM模式设置配置寄存器(MDMRS)。SDRAM配置寄存器MDCNFG主要完成对SDRAM的使能(DEn)、位宽(DWINn)、行列地址线(DRACn、DCACn)、内部块的数量(DNBn)以及时序参数(DTCn)等参数的配置,图1.10为MDCNFG配置SDRAM的控制位。图1.10MDCNFG寄存器EELiod平台的SDRAM配置代码如下:LDRR11,=MDCNFGLDRR1,=init_MDCNFG;0x02000ac9STRR1,[R11]EELiod平台由两块4banksx4Mbitx16位的HYB25L256160ACSDRAM芯片组成64M32位的存储空间,该芯片使用9位列地址,13位行地址,且内部采用4个bank设计方式,tRP=3,CL=3,RCD=3,tRAS=7,tRC=10,采用普通寻址模式;平台利用分区0(Partition0)进行寻址该存储芯片组。所以对SDRAM配置寄存器MDCNFG赋值为0x02000AC9。动态RAM在使用过程中为防止数据丢失,需要不停地对其进行充电刷新。SDRAM刷新控制寄存器除了完成对SDRAM刷新参数进行配置之外,还对存储器的时钟选择等参数进行配置,如图1.11、1.12为寄存器的控制位。图1.11MDREFR寄存器的控制位图1.12MDMRS寄存器的控制位配置代码如下:LDRR11,=MDREFRLDRR1,=init_MDREFR;0x0011e018STRR1,[R11]写入SDRAM中的MRS值,,设置到模式寄存器后,存储控制器初始化完毕。在SDRAM芯片内部有一个逻辑控制单元,并且有一个模式寄存器为其提供控制参数。因此,每次开机时SDRAM都要先对这个控制逻辑核心进行初始化,也就是配置MDMRS寄存器。寄存器的信息由地址线来提供。在设置到模式寄存器之后,SDRAM就开始了进入正常的工作状态:LDRR11,=MDMRSLDRR1,=init_MDMRS;0x320032STRR1,[R11]堆栈初始化过程:ARM处理器有7种异常工作模式,每一种异常工作模式的必须使用其影子寄存器进行必要的数据处理,但ARM处理器进入异常工作模式时,需要对现场进行保护,以便实现正确返回。所以必须对各异常工作模式的堆栈进行设置。具体方法是改变状态寄存器(CPSR)内的状态位,使处理器切换到不同的状态,然后给SP赋值,初始化代码如下:;***************************************;InitStack;***************************************ALIGNInitStack;SetIRQmode(IRQ)MSRCPSR_c,#0xd2;设置IRQ模式,且只更新CPSR[7:0]LDRSP,=StackIrq;设置IRQ堆栈的起始地址;SetFIQmode(FIQ)MSRCPSR_c,#0xd1;设置FRQ模式,且只更新CPSR[7:0]LDRSP,=StackFiq;设置FRQ堆栈的起始地址;SetAbortmode(ABT)MSRCPSR_c,#0xd7;设置ABT模式,且只更新CPSR[7:0]LDRSP,=StackAbt;设置ABT堆栈的起始地址;SetUndefinemode(UND)MSRCPSR_c,#0xdb;设置UND模式,且只更新CPSR[7:0]LDRSP,=StackUnd;设置UND堆栈的起始地址;SetUser/Systemmode(
本文标题:《嵌入式电子系统设计》课程实验指导书实验1最小系统实验,(2014711)
链接地址:https://www.777doc.com/doc-2844265 .html