arm的启动分析详解

上传人:n**** 文档编号:88889520 上传时间:2019-05-12 格式:PDF 页数:48 大小:337.12KB
返回 下载 相关 举报
arm的启动分析详解_第1页
第1页 / 共48页
arm的启动分析详解_第2页
第2页 / 共48页
arm的启动分析详解_第3页
第3页 / 共48页
arm的启动分析详解_第4页
第4页 / 共48页
arm的启动分析详解_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《arm的启动分析详解》由会员分享,可在线阅读,更多相关《arm的启动分析详解(48页珍藏版)》请在金锄头文库上搜索。

1、1 ARM ARM 的启动代码分析的启动代码分析 2 1、启动代码概述、启动代码概述 基于基于ARM 芯片的应用系统,多数为复杂的片上系统,该复杂系统里芯片的应用系统,多数为复杂的片上系统,该复杂系统里 ,多数硬件模块都是可配置的,需要由软件来预先设置其需要的工作状,多数硬件模块都是可配置的,需要由软件来预先设置其需要的工作状 态,态,因此在用户的应用程序之前,需要由专门的一段代码来完成对系统因此在用户的应用程序之前,需要由专门的一段代码来完成对系统 基本的初始化工作。基本的初始化工作。 由于此类代码直接面对处理器内核和硬件控制器进行编程,故一般均由于此类代码直接面对处理器内核和硬件控制器进行

2、编程,故一般均 用汇编语言实现。用汇编语言实现。 通常通常,启动代码是指启动代码是指CPU复位后到进复位后到进入入C语言的语言的main函函数之前需要数之前需要执执 行的行的那那段汇编代码。段汇编代码。 这是由于这是由于C语言程序的运行需要具备一定的条件语言程序的运行需要具备一定的条件,比如比如:分分 配好外部数据空间堆栈空间和中断入口等。另外汇编代码可配好外部数据空间堆栈空间和中断入口等。另外汇编代码可 以更直接的对硬件进行操,使效率更高。以更直接的对硬件进行操,使效率更高。 3 编编址方式址方式 4 SDRAM分分配配 5 1、启动代码概述、启动代码概述 通常启动代码是放在通常启动代码是放

3、在2410INIT.S汇编文件(本实验平台汇编文件(本实验平台 是是Startup.s);); 特殊功能寄存器定义在特殊功能寄存器定义在2410addr.s; Memory Bank 配置在配置在mencfg.s; 还有系统的选项等在还有系统的选项等在option.s文件。文件。 6 1、启动代码概述、启动代码概述 7 程序程序入口入口 其其中关键字中关键字ENTRY 是指是指定定编编译译器器保留这保留这段代码,段代码, 链链接的接的时候时候要要确保这确保这段代码段代码被链被链接在接在整个整个程序的程序的入口入口 地址地址,该,该地址也就地址也就是是RO 的的连连接接地址地址。 当当ARM 启

4、动启动时时,PC指指针会自针会自动动寻找寻找该该关键字从关键字从 该该关键字关键字处处执执行,该行,该关键字关键字的的地址地址应应满足满足4 字节字节对对齐齐 的的地址地址。 8 程序程序入口入口 下下面是面是大小端大小端的一的一个判断个判断, 条条件编件编译译,在编,在编译译成成机机器码前器码前 就就设设定好定好,在在Option.inc里里已经已经设为设为FALSE。 9 分分配配中断向量表中断向量表 ARM 要要求中断向量表必须放求中断向量表必须放置在置在从从0x00000000 地址开地址开 始,始,连续连续32 个字节个字节的的空间空间内。内。 每当每当一一个中断发生个中断发生后,后

5、,即使移植了操即使移植了操作系统作系统如如linux ,处理处理 器器还还是是会跳转会跳转到到从从0x0开开始始,强强制制把把PC指指针针指指向向对应对应中断中断类类型型 的的向量表中向量表中的的地址地址。 因为因为每个中断每个中断只占据只占据向量表中向量表中4 个字节个字节的的存存储储空间空间,只只能能 放放置一置一条条ARM 指指令令,所以所以,通常,通常放放一一条跳转条跳转指指令让令让程序程序跳跳 转转到到存存储储器的其器的其他他地方地方,再再执执行行中断中断处理。处理。 10 1. 分分配配中断向量表中断向量表 b ResetHandler;因为设成因为设成FALSE,所以系统复位后,

6、所以系统复位后 ;就来到这了就来到这了,转跳到复位程序入口转跳到复位程序入口 b HandlerUndef;转跳到转跳到Undefined mode程序入口程序入口 b HandlerSWI;转跳到转跳到SWI 中断程序入口中断程序入口 b HandlerPabort;转跳到转跳到PAbort(指令异常指令异常)程序入口程序入口 b HandlerDabort;转跳到转跳到DAbort(数据异常数据异常)程序入口程序入口 b . ;保留保留 b HandlerIRQ;转跳到转跳到IRQ 中断程序入口中断程序入口 b HandlerFIQ;转跳到转跳到FIQ 中断程序入口中断程序入口 11 分分

7、配配中断向量表中断向量表 系统上系统上电或电或复位后,程序复位后,程序从从位于位于地址地址0x0的的Reset Exception Vector处处开开始始执执行,因此需要在行,因此需要在这这里里放放置置 Bootloader的的第第一一条条指指令:令: b ResetHandler 跳转跳转到到标号标号为为ResetHandler处进行处进行第第一一阶阶段的硬件初始段的硬件初始 化化: 关关看看门门狗狗定时定时器,器,关中断关中断,初始化,初始化PLL和和时时钟钟等等。 12 1、关关看看门门狗狗定时定时器器 ;/ ENTRY ResetHandler ldr r0,=WTCON ;watc

8、h dog disable 关看门狗关看门狗 ldr r1,=0x0 str r1,r0 13 2、关中断关中断 ldr r0,=INTMSK ldr r1,=0xffffffff; 屏蔽所有中断屏蔽所有中断 str r1,r0 ldr r0,=INTSUBMSK ldr r1,=0x3ff ;屏蔽所有子中断屏蔽所有子中断 str r1,r0 14 4、初始化、初始化PLL和和时时钟钟 上电复位时,晶振在几毫秒内开始振荡。当上电复位时,晶振在几毫秒内开始振荡。当OSC时时 钟稳定后,钟稳定后,PLL根据默认根据默认PLL设置开始生效,但是通常这个设置开始生效,但是通常这个 时候是不稳定的,因此

9、在软件重新配置时候是不稳定的,因此在软件重新配置PLLCON寄存器之前寄存器之前 FCLK直接使用直接使用Fin而不是而不是MPLL。即使用户不希望改变。即使用户不希望改变 PLLCON的默认值,用户也应该执行一遍写的默认值,用户也应该执行一遍写PLLCON操作。操作。 根据根据工作工作频率频率设置设置pll : Fpllo=(m*Fin)/(p*2s) m=MDIV+8,p=PDIV+2,s=SDIV Fpllo必须大必须大于于20Mhz小小于于66Mhz,Fpllo*2s必须小必须小于于170Mhz 15 4、初始化、初始化PLL和和时时钟钟 PLLCON19:12=M_DIV (Main

10、 divider control) PLLCON9:4=P_DIV (Pre- divider control) PLLCON1:0=S_DIV(Post divider control) 如下面的如下面的PLLCON设定中的设定中的M_DIV P_DIV S_DIV是取自是取自 option.s中中: M_DIV=0x5c=92 P_DIV=0x4 S_DIV=0x2, 所以所以 Fpllo=(m*Fin)/(p*2s)=(92+8)*12M/(4+2) *22=50M 16 4、初始化、初始化PLL和和时时钟钟 ;To reduce PLL lock time, adjust the LO

11、CKTIME register. 为了减少为了减少PLL的的lock ; time,调整调整LOCKTIME寄存器寄存器. ldr r0,=LOCKTIME ;/LOCKTIME为锁定计数定时器,即设置为锁定计数定时器,即设置PLL稳定过渡时间,稳定过渡时间, ;一般大于一般大于150uS ldr r1,=0xffffff str r1,r0 PLL_ON_START ;Configure MPLL ldr r0,=MPLLCON ;/M_DIV=0x5c=92 P_DIV=0x4 S_DIV=0x2 ldr r1,=(M_MDIV12)+(M_PDIV4)+M_SDIV) ;Fin=12MH

12、z,Fout=50MHz str r1,r0 ;Configure UPLL ldr r0,=UPLLCON ldr r1,=(U_MDIV12)+(U_PDIV4)+U_SDIV) ;Fin=12MHz,UPLLout=48MHz str r1,r0 17 5、判断判断此此次次启动是启动是否否是是从从掉电掉电模模式式唤醒唤醒 是通是通过过判断判断GSTATUS2 寄存寄存器里的器里的bit1 位来位来确定确定的的 ,如如果果bit1位为位为0,则说明则说明此此次次的启动是的启动是从从掉电掉电模模式式唤醒唤醒。 对于对于唤醒唤醒,程序的,程序的执执行是行是不同不同的,因为的,因为唤醒唤醒时时不

13、不需要需要 进行进行下下面的面的 步骤步骤,直接,直接跳入跳入醒醒前的状态前的状态开开始始执执行。行。 若若bit1位为位为1,则我们继则我们继续下续下面的面的步骤步骤。 18 5、判断判断此此次次启动是启动是否否是是从从掉电掉电模模式式唤醒唤醒 ;Check if the boot is caused by the wake- up from POWER_OFF mode. ldr r1,=GSTATUS2 ldr r0,r1 tst r0,#0x2 ;In case of the wake- up from POWER_OFF mode, go to POWER_OFF_WAKEUP ha

14、ndler. bne WAKEUP_POWER_OFF EXPORT StartPointAfterPowerOffWakeUp StartPointAfterPowerOffWakeUp 19 6、 初始化、 初始化存存储储器系统器系统 CPU使使用一用一组组专用的专用的特殊功能寄存特殊功能寄存器来控制器来控制外部外部存存 储储器的器的读读/写写操操作,通作,通过过对该对该组组特殊功能寄存特殊功能寄存器编程,可器编程,可以以设设 定定外部外部数数据总线宽度据总线宽度,访问周期访问周期,定时定时的控制的控制信号信号等等参参数数. 通常通常Flash 和和SRAM同属同属于于静静态态存存储储器类

15、器类型型,可,可以合以合 用用同同一一个存个存储储器器端口;端口;而而DRAM 因为因为有有动态动态刷新刷新和和地址地址线线复复 用用等特等特性性,通常配,通常配有有专用的专用的存存储储器器端口端口。 除除存存储储器器外外,网络网络芯片的芯片的存存储储器器相相关关配置,配置,外外接接大大 容容量量的的存存储储卡卡的配置均在此处实现。的配置均在此处实现。 这这里是在对里是在对SDRAM 控制器的控制器的相相关寄存关寄存器器赋赋初始初始值值, 以以控制控制它它的工作模的工作模式式。共共有有13个个与与SDRAM工作工作相相关关的的寄存寄存 器,要一一对其器,要一一对其赋赋值值。 20 6、 初始化

16、、 初始化存存储储器系统器系统 ;/Set memory control registers ldr r0,=SMRDATA ldr r1,=BWSCON ; BWSCON Address add r2, r0, #52;End address of SMRDATA, ;/共共13个个DCD,52个字节个字节 0 ldr r3, r0, #4 str r3, r1, #4 cmp r2, r0 bne %B0 ;/上面这段小程序将后面定义的数据复制到相关内存控制寄存器上面这段小程序将后面定义的数据复制到相关内存控制寄存器 21 6、 初始化、 初始化存存储储器系统器系统 其其中中用到的用到的SMRDATA的数的数据据,这这在代码后面在代码后面有定义有定义: ;以下是上面提到的对存储寄存器初始化的数据以下是上面提到的对存储寄存器初始化的数据map

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号