ARM的启动分析详解

ARM的启动分析详解

ID:38849023

大小:337.12 KB

页数:48页

时间:2019-06-20

ARM的启动分析详解_第1页
ARM的启动分析详解_第2页
ARM的启动分析详解_第3页
ARM的启动分析详解_第4页
ARM的启动分析详解_第5页
资源描述:

《ARM的启动分析详解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、ARM的启动代码分析11、启动代码概述基于ARM芯片的应用系统,多数为复杂的片上系统,该复杂系统里,多数硬件模块都是可配置的,需要由软件来预先设置其需要的工作状态,因此在用户的应用程序之前,需要由专门的一段代码来完成对系统基本的初始化工作。由于此类代码直接面对处理器内核和硬件控制器进行编程,故一般均用汇编语言实现。通常,启动代码是指CPU复位后到进入C语言的main函数之前需要执行的那段汇编代码。这是由于C语言程序的运行需要具备一定的条件,比如:分配好外部数据空间堆栈空间和中断入口等。另外汇编代码可以更直接的对硬件进行操,使效率更高。2编址方式3SDRAM分配41

2、、启动代码概述通常启动代码是放在2410INIT.S汇编文件(本实验平台是Startup.s);特殊功能寄存器定义在2410addr.s;MemoryBank配置在mencfg.s;还有系统的选项等在option.s文件。51、启动代码概述6程序入口其中关键字ENTRY是指定编译器保留这段代码,链接的时候要确保这段代码被链接在整个程序的入口地址,该地址也就是RO的连接地址。当ARM启动时,PC指针会自动寻找该关键字从该关键字处执行,该关键字的地址应满足4字节对齐的地址。7程序入口下面是大小端的一个判断,条件编译,在编译成机器码前就设定好,在Option.inc里已

3、经设为FALSE。8分配中断向量表ARM要求中断向量表必须放置在从0x00000000地址开始,连续32个字节的空间内。每当一个中断发生后,即使移植了操作系统如linux,处理器还是会跳转到从0x0开始,强制把PC指针指向对应中断类型的向量表中的地址。因为每个中断只占据向量表中4个字节的存储空间,只能放置一条ARM指令,所以,通常放一条跳转指令让程序跳转到存储器的其他地方,再执行中断处理。91.分配中断向量表bResetHandler;因为设成FALSE,所以系统复位后;就来到这了,转跳到复位程序入口]bHandlerUndef;转跳到Undefinedmode程

4、序入口bHandlerSWI;转跳到SWI中断程序入口bHandlerPabort;转跳到PAbort(指令异常)程序入口bHandlerDabort;转跳到DAbort(数据异常)程序入口b.;保留bHandlerIRQ;转跳到IRQ中断程序入口bHandlerFIQ;转跳到FIQ中断程序入口10分配中断向量表系统上电或复位后,程序从位于地址0x0的ResetExceptionVector处开始执行,因此需要在这里放置Bootloader的第一条指令:bResetHandler跳转到标号为ResetHandler处进行第一阶段的硬件初始化:关看门狗定时器,关中断

5、,初始化PLL和时钟等。111、关看门狗定时器;//ENTRYResetHandlerldrr0,=WTCON;watchdogdisable关看门狗ldrr1,=0x0strr1,[r0]122、关中断ldrr0,=INTMSKldrr1,=0xffffffff;屏蔽所有中断strr1,[r0]ldrr0,=INTSUBMSKldrr1,=0x3ff;屏蔽所有子中断strr1,[r0]134、初始化PLL和时钟上电复位时,晶振在几毫秒内开始振荡。当OSC时钟稳定后,PLL根据默认PLL设置开始生效,但是通常这个时候是不稳定的,因此在软件重新配置PLLCON寄存器

6、之前FCLK直接使用Fin而不是MPLL。即使用户不希望改变PLLCON的默认值,用户也应该执行一遍写PLLCON操作。根据工作频率设置pll:Fpllo=(m*Fin)/(p*2^s)m=MDIV+8,p=PDIV+2,s=SDIVFpllo必须大于20Mhz小于66Mhz,Fpllo*2^s必须小于170Mhz144、初始化PLL和时钟PLLCON[19:12]=M_DIV(Maindividercontrol)PLLCON[9:4]=P_DIV(Pre-dividercontrol)PLLCON[1:0]=S_DIV(Postdividercontrol)如

7、下面的PLLCON设定中的M_DIVP_DIVS_DIV是取自option.s中:M_DIV=0x5c=92P_DIV=0x4S_DIV=0x2,所以Fpllo=(m*Fin)/(p*2^s)=(92+8)*12M/(4+2)*2^2=50M154、初始化PLL和时钟;ToreducePLLlocktime,adjusttheLOCKTIMEregister.为了减少PLL的lock;time,调整LOCKTIME寄存器.ldrr0,=LOCKTIME;//LOCKTIME为锁定计数定时器,即设置PLL稳定过渡时间,;一般大于150uSldrr1,=0xfffff

8、fstrr

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。